diff options
author | Antonio Fernandez <antonio.fernandez@aentos.es> | 2012-08-08 20:05:40 +0100 |
---|---|---|
committer | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2012-11-14 13:52:40 +0100 |
commit | e61bb047cb7056329ee768f788d22e7db5602b85 (patch) | |
tree | 7d72a0e79e20e83a0cedf6bd32d4208167f8a0c0 | |
parent | 36c1c2c2754dda6e8d2b2802e3881465adaafbec (diff) |
Some actions are now performed from Unity menubar.
Change-Id: I854794ab11f63306a2e976d16876fc79564e44ff
-rw-r--r-- | vcl/inc/unx/gtk/gtksalmenu.hxx | 3 | ||||
-rw-r--r-- | vcl/unx/gtk/window/gtksalmenu.cxx | 39 |
2 files changed, 36 insertions, 6 deletions
diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx index 03c07bb4eea7..bb629693a290 100644 --- a/vcl/inc/unx/gtk/gtksalmenu.hxx +++ b/vcl/inc/unx/gtk/gtksalmenu.hxx @@ -56,6 +56,7 @@ public: GActionEntry* mpActionEntry; Menu* mpVCLMenu; + GtkSalMenu* mpParentSalMenu; const GtkSalFrame* mpFrame; gchar* aDBusMenubarPath; GDBusConnection* pSessionBus; @@ -82,6 +83,8 @@ public: virtual void SetItemCommand( unsigned nPos, SalMenuItem* pSalMenuItem, const rtl::OUString& aCommandStr ); virtual bool ShowNativePopupMenu(FloatingWindow * pWin, const Rectangle& rRect, sal_uLong nFlags); virtual void Freeze(); + + virtual const GtkSalFrame* getFrame() const; }; class GtkSalMenuItem; diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx index 134d5e274140..a7a3ba604ce1 100644 --- a/vcl/unx/gtk/window/gtksalmenu.cxx +++ b/vcl/unx/gtk/window/gtksalmenu.cxx @@ -23,12 +23,22 @@ dispatchAction (GSimpleAction *action, GtkSalMenuItem *pSalMenuItem = static_cast< GtkSalMenuItem* >( user_data ); if ( !pSalMenuItem->mpSubMenu ) { - if ( !pSalMenuItem->mpVCLMenu->IsMenuBar() ) { -// ((PopupMenu*) pSalMenuItem->mpVCLMenu)->SetSelectedEntry( pSalMenuItem->mnId ); -// pSalMenuItem->mpVCLMenu->Select(); -// pSalMenuItem->mpVCLMenu->DeSelect(); + const GtkSalFrame *pFrame = pSalMenuItem->mpParentMenu ? pSalMenuItem->mpParentMenu->getFrame() : NULL; + + if ( pFrame ) { + ((PopupMenu*) pSalMenuItem->mpVCLMenu)->SetSelectedEntry( pSalMenuItem->mnId ); + SalMenuEvent aMenuEvt( pSalMenuItem->mnId, pSalMenuItem->mpVCLMenu ); + pFrame->CallCallback( SALEVENT_MENUCOMMAND, &aMenuEvt ); } } + +// if ( !pSalMenuItem->mpSubMenu ) { +// if ( !pSalMenuItem->mpVCLMenu->IsMenuBar() ) { +//// ((PopupMenu*) pSalMenuItem->mpVCLMenu)->SetSelectedEntry( pSalMenuItem->mnId ); +//// pSalMenuItem->mpVCLMenu->Select(); +//// pSalMenuItem->mpVCLMenu->DeSelect(); +// } +// } } } @@ -223,6 +233,7 @@ void GtkSalMenu::publishMenu( GMenuModel *pMenu, GActionGroup *pActionGroup ) GtkSalMenu::GtkSalMenu( sal_Bool bMenuBar ) : mbMenuBar( bMenuBar ), mpVCLMenu( NULL ), + mpParentSalMenu( NULL ), aDBusMenubarPath( NULL ), pSessionBus( NULL ), mpActionEntry( NULL ), @@ -313,7 +324,13 @@ void GtkSalMenu::SetSubMenu( SalMenuItem* pSalMenuItem, SalMenu* pSubMenu, unsig GtkSalMenuItem *pGtkSalMenuItem = static_cast<GtkSalMenuItem*>( pSalMenuItem ); GtkSalMenu *pGtkSubMenu = static_cast<GtkSalMenu*>( pSubMenu ); - pGtkSalMenuItem->mpSubMenu = pGtkSubMenu; + if ( pGtkSubMenu ) { + pGtkSalMenuItem->mpSubMenu = pGtkSubMenu; + + if ( !pGtkSubMenu->mpParentSalMenu ) { + pGtkSubMenu->mpParentSalMenu = this; + } + } } void GtkSalMenu::SetFrame( const SalFrame* pFrame ) @@ -344,6 +361,14 @@ void GtkSalMenu::SetFrame( const SalFrame* pFrame ) } } +const GtkSalFrame* GtkSalMenu::getFrame() const +{ + const GtkSalMenu* pMenu = this; + while( pMenu && ! pMenu->mpFrame ) + pMenu = pMenu->mpParentSalMenu; + return pMenu ? pMenu->mpFrame : NULL; +} + void GtkSalMenu::CheckItem( unsigned nPos, sal_Bool bCheck ) { cout << __FUNCTION__ << endl; @@ -410,7 +435,9 @@ void GtkSalMenu::SetItemCommand( unsigned nPos, SalMenuItem* pSalMenuItem, const // Disable action by default. // g_simple_action_set_enabled( pAction, FALSE ); - g_signal_connect(pAction, "activate", G_CALLBACK( dispatchAction ), pGtkSalMenuItem); +// if ( !pGtkSalMenuItem->mpVCLMenu->GetPopupMenu( pGtkSalMenuItem->mnId ) ) { + g_signal_connect(pAction, "activate", G_CALLBACK( dispatchAction ), pGtkSalMenuItem); +// } pGtkSalMenuItem->mpAction = G_ACTION( pAction ); |