diff -r c743ef5928ba -r f966699dea19 idlehomescreen/xmluirendering/uiengine/src/xnpopupcontroladapter.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnpopupcontroladapter.cpp Tue Feb 02 00:04:13 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnpopupcontroladapter.cpp Fri Feb 19 22:42:37 2010 +0200 @@ -24,8 +24,12 @@ // User includes #include "xnappuiadapter.h" +#include "xnviewmanager.h" +#include "xnviewdata.h" +#include "xnplugindata.h" #include "xnproperty.h" #include "xncontroladapter.h" +#include "xndomnode.h" #include "xnnodepluginif.h" #include "xnnode.h" #include "xntype.h" @@ -49,18 +53,20 @@ // ----------------------------------------------------------------------------- // FindWidgetMenuItemL +// // ----------------------------------------------------------------------------- // -CXnNode* FindWidgetMenuItemL( const TDesC8& aSource, - CXnNode& aPlugin ) - { - if( aPlugin.Children().Count() == 0 ) +static CXnNode* FindWidgetMenuItemL( CXnPluginData& aPlugin, + const TDesC8& aSource ) + { + if ( !aPlugin.Occupied() ) { return NULL; } - - // Get element from the element - RPointerArray< CXnNode >& children( aPlugin.Children()[0]->Children() ); + + CXnNode* widget( aPlugin.Node()->LayoutNode() ); + + RPointerArray< CXnNode >& children( widget->Children() ); for ( TInt i = children.Count() - 1; i >= 0; i-- ) { @@ -190,6 +196,10 @@ // void CXnPopupControlAdapter::TryDisplayingStylusPopupL( CXnNode& aPlugin ) { + CXnViewManager* manager( iUiEngine->ViewManager() ); + + CXnPluginData& plugin( manager->ActiveViewData().Plugin( &aPlugin ) ); + HideMenuL(); TPointerEvent event( iUiEngine->HitTest().PointerEvent() ); @@ -204,10 +214,10 @@ for ( TInt i = 0; i < children.Count(); i++ ) { - PopulateMenuL( children[i], aPlugin ); + PopulateMenuL( plugin, children[i] ); } - ShowMenuL( aPlugin, event.iParentPosition ); + ShowMenuL( plugin, event.iParentPosition ); } // ----------------------------------------------------------------------------- @@ -223,7 +233,8 @@ // CXnPopupControlAdapter::PopulateMenuL // ----------------------------------------------------------------------------- // -void CXnPopupControlAdapter::PopulateMenuL( CXnNode* aItem, CXnNode& aPlugin ) +void CXnPopupControlAdapter::PopulateMenuL( CXnPluginData& aPlugin, + CXnNode* aItem ) { CXnNode* menuitem( NULL ); CXnProperty* prop( NULL ); @@ -240,7 +251,7 @@ if ( source ) { CXnNode* widgetItem( - FindWidgetMenuItemL( source->StringValue(), aPlugin ) ); + FindWidgetMenuItemL( aPlugin, source->StringValue() ) ); if ( widgetItem ) { @@ -248,11 +259,13 @@ // Get label from the view item prop = aItem->LabelL(); + if ( !prop ) { // no localization in view, check from widget prop = widgetItem->LabelL(); } + // Pretend the original item is this widget item aItem = widgetItem; } @@ -268,8 +281,10 @@ } else if ( type == KDynMenuItem && iObserver ) { + CXnNode* plugin( aPlugin.Owner()->LayoutNode() ); + // Let observer decide whether dynmenuitem is visible or not - if ( iObserver->DynInitMenuItemL( aItem->AppIfL(), &aPlugin.AppIfL() ) ) + if ( iObserver->DynInitMenuItemL( aItem->AppIfL(), &plugin->AppIfL() ) ) { menuitem = aItem; } @@ -277,8 +292,10 @@ if ( menuitem ) { - CXnProperty* display = menuitem->DisplayL(); - if ( display && display->StringValue() == XnPropertyNames::style::common::display::KNone ) + CXnProperty* display( menuitem->DisplayL() ); + + if ( display && display->StringValue() == + XnPropertyNames::style::common::display::KNone ) { return; } @@ -305,23 +322,26 @@ // CXnPopupControlAdapter::ShowMenuL // ----------------------------------------------------------------------------- // -void CXnPopupControlAdapter::ShowMenuL( CXnNode& aPlugin, TPoint aPosition ) +void CXnPopupControlAdapter::ShowMenuL( CXnPluginData& aPlugin, + TPoint aPosition ) { if ( iMenuItems.Count() > 0 && !iMenuShown ) { iUiEngine->AppUiAdapter().HideFocus(); - - iUiEngine->Editor()->SetTargetPlugin( &aPlugin ); + + CXnNode* plugin( aPlugin.Owner()->LayoutNode() ); + + iUiEngine->Editor()->SetTargetPlugin( plugin ); if ( AknLayoutUtils::LayoutMirrored() ) { iStylusPopupMenu->SetPosition( aPosition, - CAknStylusPopUpMenu::EPositionTypeRightBottom ); + CAknStylusPopUpMenu::EPositionTypeRightBottom ); } else { iStylusPopupMenu->SetPosition( aPosition, - CAknStylusPopUpMenu::EPositionTypeLeftBottom ); + CAknStylusPopUpMenu::EPositionTypeLeftBottom ); } iStylusPopupMenu->ShowMenu();