vcl/inc/unx/gtk/gtksalmenu.hxx | 19 +----- vcl/unx/gtk/window/gtksalmenu.cxx | 109 +++++++++++++++++++------------------- 2 files changed, 60 insertions(+), 68 deletions(-)
New commits: commit 9259bc34b95f8bc090477f9c74fed6f6d5cfb00e Author: Antonio Fernandez <antonio.fernan...@aentos.es> Date: Thu Aug 9 19:01:52 2012 +0100 Items are now correctly enabled and disabled. Change-Id: I93e3e4bf804ff1ec95368f2918581af33d22263c diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx index bb62969..3e30323 100644 --- a/vcl/inc/unx/gtk/gtksalmenu.hxx +++ b/vcl/inc/unx/gtk/gtksalmenu.hxx @@ -38,22 +38,23 @@ #include <vector> + class GtkSalMenuItem; -class GtkSalMenuSection; + +typedef std::vector< GtkSalMenuItem* > GtkSalMenuSection; class GtkSalMenu : public SalMenu { private: -// static GLOActionGroup* pCurrentActionGroup; sal_Bool mbMenuBar; virtual void publishMenu( GMenuModel*, GActionGroup* ); + GtkSalMenuItem* GetSalMenuItem( sal_uInt16 nId ); + public: std::vector< GtkSalMenuSection* > maSections; - std::vector< GtkSalMenuItem* > maItems; GtkSalMenuSection* mpCurrentSection; - GActionEntry* mpActionEntry; Menu* mpVCLMenu; GtkSalMenu* mpParentSalMenu; @@ -87,16 +88,6 @@ public: virtual const GtkSalFrame* getFrame() const; }; -class GtkSalMenuItem; - -class GtkSalMenuSection -{ -public: - std::vector< GtkSalMenuItem* > maItems; - - virtual ~GtkSalMenuSection(); -}; - class GtkSalMenuItem : public SalMenuItem { public: diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx index 4016a08..74ad97a 100644 --- a/vcl/unx/gtk/window/gtksalmenu.cxx +++ b/vcl/unx/gtk/window/gtksalmenu.cxx @@ -111,15 +111,15 @@ dispatchAction (GSimpleAction *action, GMenuModel *generateMenuModelAndActions( GtkSalMenu*, GLOActionGroup* ); -GMenuModel *generateSectionMenuModel( GtkSalMenuSection *pSection, GLOActionGroup *pActionGroup ) +GMenuModel *generateSectionMenuModel( GtkSalMenuSection* pSection, GLOActionGroup* pActionGroup ) { if ( !pSection ) return NULL; GMenu *pSectionMenuModel = g_menu_new(); - for (sal_uInt16 i = 0; i < pSection->maItems.size(); i++) { - GtkSalMenuItem *pSalMenuItem = pSection->maItems[ i ]; + for (sal_uInt16 i = 0; i < pSection->size(); i++) { + GtkSalMenuItem *pSalMenuItem = pSection->at( i ); GMenuItem *pMenuItem = pSalMenuItem->mpMenuItem; if (pSalMenuItem->mpSubMenu) { @@ -144,18 +144,18 @@ GMenuModel *generateMenuModelAndActions( GtkSalMenu *pMenu, GLOActionGroup *pAct GMenu *pMenuModel = g_menu_new(); - for (sal_uInt16 i = 0; i < pMenu->maItems.size(); i++) { - GtkSalMenuItem *pSalMenuItem = pMenu->maItems[ i ]; - GMenuItem *pMenuItem = pSalMenuItem->mpMenuItem; +// for (sal_uInt16 i = 0; i < pMenu->maItems.size(); i++) { +// GtkSalMenuItem *pSalMenuItem = pMenu->maItems[ i ]; +// GMenuItem *pMenuItem = pSalMenuItem->mpMenuItem; - if (pSalMenuItem->mpSubMenu) { - GMenuModel *pSubmenu = generateMenuModelAndActions( pSalMenuItem->mpSubMenu, pActionGroup ); - g_menu_item_set_submenu( pMenuItem, pSubmenu ); - } +// if (pSalMenuItem->mpSubMenu) { +// GMenuModel *pSubmenu = generateMenuModelAndActions( pSalMenuItem->mpSubMenu, pActionGroup ); +// g_menu_item_set_submenu( pMenuItem, pSubmenu ); +// } - g_menu_append_item( pMenuModel, pMenuItem ); - g_lo_action_group_insert( pActionGroup, pSalMenuItem->mpAction ); - } +// g_menu_append_item( pMenuModel, pMenuItem ); +// g_lo_action_group_insert( pActionGroup, pSalMenuItem->mpAction ); +// } for (sal_uInt16 i = 0; i < pMenu->maSections.size(); i++) { GtkSalMenuSection *pSection = pMenu->maSections[ i ]; @@ -212,29 +212,56 @@ void GtkSalMenu::publishMenu( GMenuModel *pMenu, GActionGroup *pActionGroup ) g_dbus_connection_export_action_group( pSessionBus, GTK_MENU_OBJ_PATH, pActionGroup, NULL); } + +// FIXME: HIGHLY IMPROVABLE CODE +GtkSalMenuItem* GtkSalMenu::GetSalMenuItem( sal_uInt16 nId ) +{ + for ( sal_uInt16 i = 0; i < maSections.size(); i++ ) + { + GtkSalMenuSection* pSection = maSections[ i ]; + + for ( sal_uInt16 j = 0; j < pSection->size(); j++ ) + { + GtkSalMenuItem* pSalMenuItem = pSection->at( j ); + + if ( pSalMenuItem->mnId == nId ) { + return pSalMenuItem; + } + + if ( pSalMenuItem->mpSubMenu ) + { + pSalMenuItem = pSalMenuItem->mpSubMenu->GetSalMenuItem( nId ); + if (pSalMenuItem) { + return pSalMenuItem; + } + } + } + } + + return NULL; +} + GtkSalMenu::GtkSalMenu( sal_Bool bMenuBar ) : mbMenuBar( bMenuBar ), mpVCLMenu( NULL ), - mpFrame( NULL ), mpParentSalMenu( NULL ), + mpFrame( NULL ), aDBusMenubarPath( NULL ), pSessionBus( NULL ), - mpActionEntry( NULL ), mBusId( 0 ), mMenubarId( 0 ), mActionGroupId ( 0 ) { - if (!bMenuBar) { - mpCurrentSection = new GtkSalMenuSection(); - maSections.push_back( mpCurrentSection ); - } else { + mpCurrentSection = new GtkSalMenuSection(); + maSections.push_back( mpCurrentSection ); + + if (bMenuBar) { pSessionBus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); if(!pSessionBus) puts ("Fail bus get"); mBusId = g_bus_own_name_on_connection (pSessionBus, GTK_MENU_BUS_NAME, G_BUS_NAME_OWNER_FLAGS_NONE, NULL, NULL, NULL, NULL); if(!mBusId) puts ("Fail own name"); } - } GtkSalMenu::~GtkSalMenu() @@ -251,7 +278,6 @@ GtkSalMenu::~GtkSalMenu() g_dbus_connection_close_sync( pSessionBus, NULL, NULL ); } - maItems.clear(); maSections.clear(); } @@ -266,19 +292,7 @@ void GtkSalMenu::InsertItem( SalMenuItem* pSalMenuItem, unsigned nPos ) GtkSalMenuItem *pGtkSalMenuItem = static_cast<GtkSalMenuItem*>( pSalMenuItem ); if ( pGtkSalMenuItem->mpMenuItem ) { - if ( mbMenuBar ) { -// if ( maItems.size() == 0 ) { - maItems.push_back( pGtkSalMenuItem ); -// } else { -// maItems.insert( maItems.begin() + nPos, pGtkSalMenuItem ); -// } - } else { -// if ( mpCurrentSection->maItems.size() == 0) { - mpCurrentSection->maItems.push_back( pGtkSalMenuItem ); -// } else { -// mpCurrentSection->maItems.insert( mpCurrentSection->maItems.begin() + nPos, pGtkSalMenuItem ); -// } - } + mpCurrentSection->push_back( pGtkSalMenuItem ); } else { // If no mpMenuItem exists, then item is a separator. mpCurrentSection = new GtkSalMenuSection(); @@ -361,12 +375,13 @@ void GtkSalMenu::EnableItem( unsigned nPos, sal_Bool bEnable ) { cout << __FUNCTION__ << endl; - if (nPos < maItems.size()) { - GtkSalMenuItem *pSalMenuItem = maItems[ nPos ]; + sal_uInt16 itemId = mpVCLMenu->GetItemId( nPos ); - if ( pSalMenuItem->mpAction ) { - g_simple_action_set_enabled( G_SIMPLE_ACTION( pSalMenuItem->mpAction ), (gboolean) bEnable ); - } + GtkSalMenuItem *pSalMenuItem = GetSalMenuItem( itemId ); + + if ( pSalMenuItem->mpAction ) { + gboolean bItemEnabled = (bEnable == sal_True) ? TRUE : FALSE; + g_simple_action_set_enabled( G_SIMPLE_ACTION( pSalMenuItem->mpAction ), bItemEnabled ); } } @@ -415,9 +430,6 @@ void GtkSalMenu::SetItemCommand( unsigned nPos, SalMenuItem* pSalMenuItem, const GSimpleAction *pAction = g_simple_action_new( aOCommandStr.getStr(), NULL ); - // Disable action by default. -// g_simple_action_set_enabled( pAction, FALSE ); - // if ( !pGtkSalMenuItem->mpVCLMenu->GetPopupMenu( pGtkSalMenuItem->mnId ) ) { g_signal_connect(pAction, "activate", G_CALLBACK( dispatchAction ), pGtkSalMenuItem); // } @@ -457,17 +469,6 @@ void GtkSalMenu::Freeze() // ======================================================================= /* - * GtlSalMenuSection - */ - -GtkSalMenuSection::~GtkSalMenuSection() -{ - maItems.clear(); -} - -// ======================================================================= - -/* * GtkSalMenuItem */ @@ -479,7 +480,7 @@ GtkSalMenuItem::GtkSalMenuItem( const SalItemParams* pItemData ) : mpMenuItem( NULL ), mpAction( NULL ) { - cout << __FUNCTION__ << "Type: " << pItemData->eType << endl; + cout << __FUNCTION__ << "Type: " << (sal_uInt16) pItemData->eType << endl; if ( pItemData->eType != MENUITEM_SEPARATOR ) { mpMenuItem = g_menu_item_new( "b", NULL ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits