diff -r 3c221667e687 -r 94dc1107e8b2 phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp --- a/phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp Mon Jun 21 15:39:45 2010 +0300 +++ b/phoneapp/phoneuicontrol/src/cphonekeyeventforwarder.cpp Thu Jul 15 18:38:16 2010 +0300 @@ -174,7 +174,7 @@ // Open number entry view if any allowed character key // is pressed on homescreen or in-call ui - if ( aType != EEventKeyUp && IsKeyAllowed( keyEvent ) ) + if ( aType != EEventKeyUp && IsKeyAllowedL( keyEvent ) ) { // Do not open number entry with up key iStateMachine->State()->HandleCreateNumberEntryL( keyEvent, aType ); @@ -252,13 +252,13 @@ } // ----------------------------------------------------------------------------- -// CPhoneKeyEventForwarder::IsAlphaNumericKey +// CPhoneKeyEventForwarder::IsKeyAllowedL // ----------------------------------------------------------------------------- // -TBool CPhoneKeyEventForwarder::IsKeyAllowed( const TKeyEvent& aKeyEvent ) +TBool CPhoneKeyEventForwarder::IsKeyAllowedL( const TKeyEvent& aKeyEvent ) { __LOGMETHODSTARTEND( EPhoneControl, - "CPhoneKeyEventForwarder::IsAlphaNumericKey"); + "CPhoneKeyEventForwarder::IsKeyAllowedL"); TKeyEvent keyEvent( aKeyEvent ); @@ -428,14 +428,20 @@ if ( EEventKeyUp == aType && EKeyNull != iKeyPressedDown ) { - // Handle short key press - iStateMachine->State()->HandleKeyMessageL( - MPhoneKeyEvents::EPhoneKeyShortPress, - TKeyCode( iKeyPressedDown ) ); - + // EKeyEnter is always offered to Telephony so donīt offer it + // to state if there is menu or a dialog open. + if ( !( EKeyEnter == iKeyPressedDown + && iDisplayingMenuOrDialogOnEventKeyDown ) ) + { + // Handle short key press + iStateMachine->State()->HandleKeyMessageL( + MPhoneKeyEvents::EPhoneKeyShortPress, + TKeyCode( iKeyPressedDown ) ); + } // Reset key code iScanCode = EStdKeyNull; iKeyPressedDown = EKeyNull; + iDisplayingMenuOrDialogOnEventKeyDown = EFalse; } return EKeyWasNotConsumed; @@ -478,7 +484,7 @@ "CPhoneKeyEventForwarder::HandleEventKeyDownBeforeControlStackL"); // Convert key code - ConvertKeyCode( iKeyPressedDown, aKeyEvent ); + ConvertKeyCodeL( iKeyPressedDown, aKeyEvent ); // Save key scan code iScanCode = aKeyEvent.iScanCode; @@ -520,7 +526,15 @@ this ) ); } - return ( EKeyWasNotConsumed ); + // Check if dialog or menu is open + // EikAppUi()->IsDisplayingMenuOrDialog doesnīt always return correct + // value for menubar, so ask visibility also from CEikMenuBar + iDisplayingMenuOrDialogOnEventKeyDown = ( iViewCommandHandle->HandleCommandL( + EPhoneViewIsDisplayingMenuOrDialog ) == + EPhoneViewResponseSuccess ) || ( iMenu && iMenu->IsDisplayed() ); + + // Consume dialer simulated key events, pass others on + return ( IsKeySimulatedByTouchDialer( aKeyEvent ) ? EKeyWasConsumed : EKeyWasNotConsumed ); } // ----------------------------------------------------------- @@ -631,7 +645,8 @@ // Store the previous scan code iPreviousScanCode = iScanCode; - return EKeyWasNotConsumed; + // Consume dialer simulated key events, pass others on + return ( IsKeySimulatedByTouchDialer( aKeyEvent ) ? EKeyWasConsumed : EKeyWasNotConsumed ); } // --------------------------------------------------------- @@ -699,19 +714,19 @@ } // ----------------------------------------------------------- -// CPhoneKeyEventForwarder::ConvertKeyCode +// CPhoneKeyEventForwarder::ConvertKeyCodeL // ----------------------------------------------------------- // -void CPhoneKeyEventForwarder::ConvertKeyCode( TUint& aCode, +void CPhoneKeyEventForwarder::ConvertKeyCodeL( TUint& aCode, const TKeyEvent& aKeyEvent ) { __LOGMETHODSTARTEND( EPhoneControl, - "CPhoneKeyEventForwarder::ConvertKeyCode"); + "CPhoneKeyEventForwarder::ConvertKeyCodeL"); // Handler for special device key mapping in case iScanCode // to iCode conversion hasn't been handled by CAknAppUi::GetAliasKeyCodeL __PHONELOG1( EBasic, EPhoneControl, - "CPhoneKeyEventHandler::ConvertKeyCode scan code (%d)", + "CPhoneKeyEventHandler::ConvertKeyCodeL scan code (%d)", aKeyEvent.iScanCode ); if ( !ConvertHalfQwertySpecialChar( aCode, aKeyEvent ) ) @@ -743,6 +758,7 @@ case EStdKeyYes: aCode = EKeyYes; break; + case EStdKeyEnd: // End key is emulated if the device has combined power and end key case EStdKeyNo: aCode = EKeyNo; break; @@ -766,7 +782,7 @@ } __PHONELOG1( EBasic, EPhoneControl, - "CPhoneKeyEventHandler::ConvertKeyCode aCode (%d)", aCode ); + "CPhoneKeyEventHandler::ConvertKeyCodeL aCode (%d)", aCode ); } // End of File