Receiving key event data in your application

The UI controller is the default handler for key events. In order for other controls to receive events, you must register them with the control stack with CCoeAppUi::AddToStackL(). Controls are usually added to the control stack in the second phase constructor.

The options are as follows:

  • In a traditional Symbian UI application architecture, this is done in the UI controller construction phase. An example of an implementation is as follows:

    void CAddressBookAppUi::ConstructL()
        {
        BaseConstructL();
        iCurrentView = CMyAppMainView::NewL( ClientRect() );
        AddToStackL( iCurrentView );
        }
    

    This places iCurrentView on top of the control stack, which means the UI controller is underneath it in the stack. When the application framework passes an event to the application, the framework first requests that iCurrentView handle it. If this control does not consume the event, then the framework calls the method for the UI controller to handle the event.

    CCoeAppUi::AddToStackL() offers a parameter to set the stack priority of a UI control.

    You should use CCoeAppUi::RemoveFromStackL() to remove a control from the control stack when it should no longer receive events.

  • In an Symbian view architecture, this is typically done with CAknView::DoActivateL() when the UI controls are constructed. An example of an implementation for this approach is as follows:

    void CMyView::DoActivateL(const TVwsViewId&, TUid , const TDesC8&)
        {
        if (!iUIControl)
            {
            iUIControl = CMyUiControl::NewL( this, ClientRect() );
            AppUi()->AddToStackL( *this, iUiControl );
            } 
       }
    

    This places iUiControl on top of the control stack, which means the UI controller is underneath it in the stack. When the application framework passes an event to the application, the framework first requests that iUIControl handle it. If this control does not consume the event, then the framework calls the method for the UI controller to handle the event.

    CCoeAppUi::AddToStackL() offers a parameter to set the stack priority for a UI control.

    You should use CCoeAppUi::RemoveFromStackL() to remove a control from the control stack when it should no longer receive events.