diff -r 9d760f716ca8 -r 3d09643def13 qtmobileextensions/src/keycapture/targetwrapper.cpp --- a/qtmobileextensions/src/keycapture/targetwrapper.cpp Thu Sep 02 21:20:48 2010 +0300 +++ b/qtmobileextensions/src/keycapture/targetwrapper.cpp Fri Sep 17 08:34:25 2010 +0300 @@ -48,7 +48,7 @@ TargetWrapper::~TargetWrapper() { - delete selector; + cleanup(); } void TargetWrapper::close(XQKeyCapture::CapturingFlags flags) @@ -66,7 +66,7 @@ void TargetWrapper::reset() { try { - delete selector; + cleanup(); QT_TRAP_THROWING(selector = CRemConInterfaceSelector::NewL()); @@ -87,7 +87,9 @@ selector = 0; target = 0; targetEx = 0; + delete handler; handler = 0; + delete handlerEx; handlerEx = 0; qDebug() << "TargetWrapper::init - exception: " << e.what(); throw; @@ -106,50 +108,94 @@ } +/* + * Function for cleaning up selector and handlers, targets are handled via selector + */ +void TargetWrapper::cleanup() +{ + delete handler; + handler = 0; + delete handlerEx; + handlerEx = 0; + delete selector; + selector = 0; +} + void TargetWrapper::MrccatoCommand(TRemConCoreApiOperationId aOperationId, TRemConCoreApiButtonAction aButtonAct) { - Qt::Key key = mapKey(aOperationId); - - switch (aButtonAct) { - case ERemConCoreApiButtonPress: - TX_LOG_ARGS("ERemConCoreApiButtonPress"); - sendKey(QEvent::KeyPress, key, Qt::NoModifier, aOperationId); - break; - case ERemConCoreApiButtonRelease: - TX_LOG_ARGS("ERemConCoreApiButtonRelease"); - sendKey(QEvent::KeyRelease, key, Qt::NoModifier, aOperationId); - break; - case ERemConCoreApiButtonClick: - TX_LOG_ARGS("ERemConCoreApiButtonClick"); - sendKey(QEvent::KeyPress, key, Qt::NoModifier, aOperationId); - sendKey(QEvent::KeyRelease, key, Qt::NoModifier, aOperationId); - break; - default: - return; + if (target) { + Qt::Key key = mapKey(aOperationId); + switch (aButtonAct) { + case ERemConCoreApiButtonPress: + TX_LOG_ARGS("ERemConCoreApiButtonPress"); + sendKey(QEvent::KeyPress, key, Qt::NoModifier, aOperationId); + break; + case ERemConCoreApiButtonRelease: + TX_LOG_ARGS("ERemConCoreApiButtonRelease"); + sendKey(QEvent::KeyRelease, key, Qt::NoModifier, aOperationId); + break; + case ERemConCoreApiButtonClick: + TX_LOG_ARGS("ERemConCoreApiButtonClick"); + sendKey(QEvent::KeyPress, key, Qt::NoModifier, aOperationId); + sendKey(QEvent::KeyRelease, key, Qt::NoModifier, aOperationId); + break; + default: + return; + } + } else { + qWarning() << "target in MrccatoCommand was not initialized"; } - - handler->CompleteAnyKey(aOperationId); + + if (handler) { + handler->CompleteAnyKey(aOperationId); + } else { + qWarning() << "handler in MrccatoCommand was not initialized"; + } } void TargetWrapper::AnswerCall() { - sendKey(QEvent::KeyPress, Qt::Key_Call, Qt::NoModifier); - sendKey(QEvent::KeyRelease, Qt::Key_Call, Qt::NoModifier); - handlerEx->CompleteAnyKey(0); + if (targetEx) { + sendKey(QEvent::KeyPress, Qt::Key_Call, Qt::NoModifier); + sendKey(QEvent::KeyRelease, Qt::Key_Call, Qt::NoModifier); + } else { + qWarning() << "targetEx in AnswerCall was not initialized"; + } + if (handlerEx) { + handlerEx->CompleteAnyKey(0); + } else { + qWarning() << "handlerEx in AnswerCall was not initialized"; + } } void TargetWrapper::EndCall() { - sendKey(QEvent::KeyPress, Qt::Key_Hangup, Qt::NoModifier); - sendKey(QEvent::KeyRelease, Qt::Key_Hangup, Qt::NoModifier); - handlerEx->CompleteAnyKey(0); + if (targetEx) { + sendKey(QEvent::KeyPress, Qt::Key_Hangup, Qt::NoModifier); + sendKey(QEvent::KeyRelease, Qt::Key_Hangup, Qt::NoModifier); + } else { + qWarning() << "targetEx in EndCall was not initialized"; + } + if (handlerEx) { + handlerEx->CompleteAnyKey(0); + } else { + qWarning() << "handlerEx in EndCall was not initialized"; + } } void TargetWrapper::AnswerEndCall() { - sendKey(QEvent::KeyPress, Qt::Key_Hangup, Qt::NoModifier); //TODO: Qt::Key_ToggleCallHangup - sendKey(QEvent::KeyRelease, Qt::Key_Hangup, Qt::NoModifier); - handlerEx->CompleteAnyKey(0); + if (targetEx) { + sendKey(QEvent::KeyPress, Qt::Key_Hangup, Qt::NoModifier); //TODO: Qt::Key_ToggleCallHangup + sendKey(QEvent::KeyRelease, Qt::Key_Hangup, Qt::NoModifier); + } else { + qWarning() << "targetEx in AnswerEndCall was not initialized"; + } + if (handlerEx) { + handlerEx->CompleteAnyKey(0); + } else { + qWarning() << "handlerEx in AnswerEndCall was not initialized"; + } } void TargetWrapper::VoiceDial( const TBool aActivate ) @@ -201,7 +247,6 @@ if (event){ QApplication::sendEvent(widget, event); - qDebug("sending key event!"); delete event; } } @@ -211,11 +256,9 @@ { QWidget *widget; widget = QWidget::keyboardGrabber(); - if (!widget) { widget = QApplication::focusWidget(); } - if (!widget) { if (QApplication::activePopupWidget()) { widget = QApplication::activePopupWidget()->focusWidget(); @@ -224,7 +267,6 @@ } } } - return widget; }