idlehomescreen/xmluirendering/uiengine/src/xnkeyeventdispatcher.cpp
branchRCL_3
changeset 34 d05a55b217df
parent 16 9674c1a575e9
equal deleted inserted replaced
30:b8fae6b8a148 34:d05a55b217df
   190         const TUint handle( aEvent.Handle() );
   190         const TUint handle( aEvent.Handle() );
   191         
   191         
   192         CCoeControl* destination = reinterpret_cast< CCoeControl* >( handle );        
   192         CCoeControl* destination = reinterpret_cast< CCoeControl* >( handle );        
   193                                        
   193                                        
   194         TPointerEvent& event( *aEvent.Pointer() );
   194         TPointerEvent& event( *aEvent.Pointer() );
       
   195         
       
   196         // Store event
       
   197         iPointerEvent = *aEvent.Pointer();
   195                 
   198                 
   196         if ( iCbaContainer )
   199         if ( iCbaContainer )
   197             {
   200             {
   198             CEikCba* cba = 
   201             CEikCba* cba = 
   199                 static_cast< CEikCba* >( iCbaContainer->ButtonGroup() ); 
   202                 static_cast< CEikCba* >( iCbaContainer->ButtonGroup() ); 
   223             }
   226             }
   224         }
   227         }
   225     }
   228     }
   226 
   229 
   227 // -----------------------------------------------------------------------------
   230 // -----------------------------------------------------------------------------
       
   231 // CXnKeyEventDispatcher::PointerEvent()
       
   232 //
       
   233 // -----------------------------------------------------------------------------
       
   234 //
       
   235 const TPointerEvent& CXnKeyEventDispatcher::PointerEvent() const
       
   236     {
       
   237     return iPointerEvent;
       
   238     }
       
   239 
       
   240 // -----------------------------------------------------------------------------
   228 // CXnKeyEventDispatcher::OfferKeyEventL
   241 // CXnKeyEventDispatcher::OfferKeyEventL
   229 // Handles key events.
   242 // Handles key events.
   230 // -----------------------------------------------------------------------------
   243 // -----------------------------------------------------------------------------
   231 //
   244 //
   232 TKeyResponse CXnKeyEventDispatcher::OfferKeyEventL(
   245 TKeyResponse CXnKeyEventDispatcher::OfferKeyEventL(
   233     const TKeyEvent& aKeyEvent,
   246     const TKeyEvent& aKeyEvent,
   234     TEventCode aType )
   247     TEventCode aType )
   235     {
   248     {
   236     TKeyResponse resp( EKeyWasNotConsumed );
   249     TKeyResponse resp( EKeyWasNotConsumed );
   237     
   250            
   238     iEventCode = aType;
       
   239     
       
   240     CXnNode* node( NULL );
   251     CXnNode* node( NULL );
   241     
   252     
   242     TBool keyYesNoApps( EFalse );
   253     TBool keyYesNoApps( EFalse );
   243     
   254     
   244     if ( iUiEngine.IsMenuDisplaying() ||
   255     if ( iUiEngine.IsMenuDisplaying() ||
   247         {
   258         {
   248         iFocusChanged = EFalse;
   259         iFocusChanged = EFalse;
   249         // When menu is focused or LSK/RSK is pressed,
   260         // When menu is focused or LSK/RSK is pressed,
   250         // then forward events to menuadapter.
   261         // then forward events to menuadapter.
   251         // Note that MSK is handled directly in the base class as it used only
   262         // Note that MSK is handled directly in the base class as it used only
   252         // for activating
   263         // for activation
   253         node = iMenuNode;
   264         node = iMenuNode;
   254         }
   265         }
   255     else if ( aKeyEvent.iScanCode == EStdKeyApplication0 ||
   266     else if ( aKeyEvent.iScanCode == EStdKeyApplication0 ||
   256               aKeyEvent.iScanCode == EStdKeyYes ||
   267               aKeyEvent.iScanCode == EStdKeyYes ||
   257               aKeyEvent.iScanCode == EStdKeyNo )
   268               aKeyEvent.iScanCode == EStdKeyNo )
   258         {
   269         {
   259         keyYesNoApps = ETrue;
   270         keyYesNoApps = ETrue;
   260         
   271         
   261         iFocusChanged = EFalse;
   272         iFocusChanged = EFalse;
       
   273         
   262         // AppsKey, YesKey, NoKey events must be always handled, and if we don't
   274         // AppsKey, YesKey, NoKey events must be always handled, and if we don't
   263         // have a focused node, then let the view node do the job
   275         // have a focused node, then let the view handle the event
   264         node = ( !iNode ) ? iUiEngine.ActiveView() : iNode;
   276         node = ( !iNode ) ? iUiEngine.ActiveView() : iNode;
   265         }
   277         }
   266     else
   278     else
   267         {
   279         {
   268         CXnAppUiAdapter& appui( iUiEngine.AppUiAdapter() );
   280         CXnAppUiAdapter& appui( iUiEngine.AppUiAdapter() );
   307         
   319         
   308         CCoeControl* editmode( iUiEngine.EditMode() );
   320         CCoeControl* editmode( iUiEngine.EditMode() );
   309         
   321         
   310         if ( editmode->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
   322         if ( editmode->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
   311             {
   323             {
       
   324             iFocusChanged = EFalse;
       
   325             iKeyEventNode = NULL;
       
   326             iEventCode = EEventNull;
       
   327             
   312             return EKeyWasConsumed;
   328             return EKeyWasConsumed;
   313             }
   329             }
   314         
   330         
   315         // Offer keyevent to the focused node        
   331         // Offer keyevent to the focused node        
   316         node = iNode;
   332         node = iNode;
   322             iKeyEventNode = iNode;
   338             iKeyEventNode = iNode;
   323             }
   339             }
   324 
   340 
   325         if ( iFocusChanged && ( aType == EEventKeyUp ) )
   341         if ( iFocusChanged && ( aType == EEventKeyUp ) )
   326             {
   342             {
   327             // Pass keyup event to
   343             // Pass keyup event to the previously focused node            
   328             // previously focused node
       
   329             node = iKeyEventNode;
   344             node = iKeyEventNode;
   330             }
   345             }
   331         }
   346         }
   332 
   347 
   333     if ( !keyYesNoApps )
   348     if ( !keyYesNoApps )
   334         {
   349         {
   335         if ( iEventCode == EEventNull && aType != EEventKeyDown )
   350         if ( iEventCode == EEventNull && aType != EEventKeyDown )
   336             {    
   351             {    
   337             // We are waiting for down event
   352             // We are waiting for down event
   338             return resp;
   353             return resp;
   339             }        
   354             }
       
   355         
       
   356         iEventCode = aType;
   340         }
   357         }
   341         
   358         
   342     if ( !node )
   359     if ( !node )
   343         {
   360         {
   344         return resp;
   361         return resp;