diff --git a/sflphone-client-kde/src/SFLPhoneView.cpp b/sflphone-client-kde/src/SFLPhoneView.cpp index b79ae38987d4e488656c770c0504220bf8f8e471..3d03cebc9ec93c7acea083401dbc2f34c64ebd1b 100644 --- a/sflphone-client-kde/src/SFLPhoneView.cpp +++ b/sflphone-client-kde/src/SFLPhoneView.cpp @@ -231,16 +231,48 @@ void SFLPhoneView::typeString(QString str) if(stackedWidget_screen->currentWidget() == page_callList) { - callManager.playDTMF(str); QListWidgetItem * item = listWidget_callList->currentItem(); - if(!item) + callManager.playDTMF(str); + Call *currentCall = 0; + Call *candidate = 0; + + if(item) + { + Call *call = callList->findCallByItem(listWidget_callList->currentItem()); + + if(call->getState() == CALL_STATE_CURRENT) + { + currentCall = call; + } + } + + for(int i = callList->size() - 1 ; i >= 0 ; i--) + { + Call * call = (*callList)[i]; + + if(currentCall != call && call->getState() == CALL_STATE_CURRENT) + { + + action(call, CALL_ACTION_HOLD); + } + else if(call->getState() == CALL_STATE_DIALING) + { + candidate = call; + } + } + + if(!currentCall && !candidate) { qDebug() << "Typing when no item is selected. Opening an item."; - Call * call = callList->addDialingCall(); - addCallToCallList(call); + candidate = callList->addDialingCall(); + addCallToCallList(candidate); listWidget_callList->setCurrentRow(listWidget_callList->count() - 1); } - callList->findCallByItem(listWidget_callList->currentItem())->appendItemText(str); + + if(!currentCall && candidate) + { + callList->findCallByItem(listWidget_callList->currentItem())->appendItemText(str); + } } if(stackedWidget_screen->currentWidget() == page_callHistory) {