vcl/inc/unx/gtk/gtksalmenu.hxx | 8 -- vcl/unx/gtk/window/gloactiongroup.cxx | 37 +++------ vcl/unx/gtk/window/gtksalmenu.cxx | 127 +++++++++++++++++++++------------- 3 files changed, 96 insertions(+), 76 deletions(-)
New commits: commit f304540454838efbc6cc3b19b863e64cbbd07523 Author: Antonio Fernandez <[email protected]> Date: Wed Sep 12 11:39:11 2012 +0100 Some code reordering and cleaning. Change-Id: Ide46f6f68f3ba2632988b490820cb1ca576bab43 diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx index 04b7361..d88c50d 100644 --- a/vcl/inc/unx/gtk/gtksalmenu.hxx +++ b/vcl/inc/unx/gtk/gtksalmenu.hxx @@ -61,7 +61,6 @@ public: GtkSalMenu( sal_Bool bMenuBar ); virtual ~GtkSalMenu(); - virtual void SetVisibleMenuBar( sal_Bool bVisible ); virtual sal_Bool VisibleMenuBar(); // must return TRUE to actually DISPLAY native menu bars // otherwise only menu messages are processed (eg, OLE on Windows) @@ -105,7 +104,6 @@ public: virtual ~GtkSalMenuItem(); sal_uInt16 mnId; // Item ID - MenuItemBits mnBits; // Item bits MenuItemType mnType; // Item type Menu* mpVCLMenu; // VCL Menu into which this MenuItem is inserted GtkSalMenu* mpParentMenu; // The menu in which this menu item is inserted diff --git a/vcl/unx/gtk/window/gloactiongroup.cxx b/vcl/unx/gtk/window/gloactiongroup.cxx index 8f7d469..171341d 100644 --- a/vcl/unx/gtk/window/gloactiongroup.cxx +++ b/vcl/unx/gtk/window/gloactiongroup.cxx @@ -158,21 +158,17 @@ g_lo_action_group_query_action (GActionGroup *group, if (enabled) *enabled = action->enabled; - if (parameter_type) { + if (parameter_type) *parameter_type = action->parameter_type; - } - if (state_type) { + if (state_type) *state_type = action->state_type; - } - if (state_hint) { + if (state_hint) *state_hint = (action->state_hint) ? g_variant_ref(action->state_hint) : NULL; - } - if (state) { + if (state) *state = (action->state) ? g_variant_ref(action->state) : NULL; - } return TRUE; } @@ -213,8 +209,6 @@ g_lo_action_group_activate (GActionGroup *group, GTK_YIELD_GRAB(); GLOActionGroup *lo_group = G_LO_ACTION_GROUP (group); - GLOAction* action = G_LO_ACTION (g_hash_table_lookup (lo_group->priv->table, action_name)); - GtkSalFrame *pFrame = lo_group->priv->frame; if ( pFrame != NULL ) @@ -222,7 +216,10 @@ g_lo_action_group_activate (GActionGroup *group, GtkSalMenu* pSalMenu = static_cast< GtkSalMenu* >( pFrame->GetMenu() ); if ( pSalMenu != NULL ) + { + GLOAction* action = G_LO_ACTION (g_hash_table_lookup (lo_group->priv->table, action_name)); pSalMenu->DispatchCommand( action->item_id, action_name ); + } } } diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx index 52e7dd6..594d9ac 100644 --- a/vcl/unx/gtk/window/gtksalmenu.cxx +++ b/vcl/unx/gtk/window/gtksalmenu.cxx @@ -146,7 +146,6 @@ static void UpdateNativeMenu( GtkSalMenu* pMenu ) pSubmenu->SetMenuModel( G_MENU_MODEL( pSubMenuModel ) ); pSubmenu->SetActionGroup( pActionGroup ); UpdateNativeMenu( pSubmenu ); - } nItemPos++; @@ -275,7 +274,6 @@ on_registrar_available (GDBusConnection * /*connection*/, g_free( aDBusMenubarPath ); bDBusIsAvailable = sal_True; - pSalMenu->SetVisibleMenuBar( sal_True ); pMenuBar->SetDisplayable( sal_False ); } } @@ -296,7 +294,6 @@ on_registrar_unavailable (GDBusConnection * /*connection*/, MenuBar* pMenuBar = static_cast< MenuBar* >( pSalMenu->GetMenu() ); bDBusIsAvailable = sal_False; - pSalMenu->SetVisibleMenuBar( sal_False ); pMenuBar->SetDisplayable( sal_True ); } @@ -338,14 +335,8 @@ GtkSalMenu::~GtkSalMenu() maItems.clear(); } -void GtkSalMenu::SetVisibleMenuBar( sal_Bool bVisible ) -{ -// mbVisible = bVisible; -} - sal_Bool GtkSalMenu::VisibleMenuBar() { -// return mbVisible; return bDBusIsAvailable; } @@ -428,10 +419,6 @@ const GtkSalFrame* GtkSalMenu::GetFrame() const return pMenu ? pMenu->mpFrame : NULL; } -void GtkSalMenu::CheckItem( unsigned nPos, sal_Bool bCheck ) -{ -} - void GtkSalMenu::NativeCheckItem( unsigned nSection, unsigned nItemPos, MenuItemBits bits, gboolean bCheck ) { if ( mpActionGroup == NULL ) @@ -463,10 +450,6 @@ void GtkSalMenu::NativeCheckItem( unsigned nSection, unsigned nItemPos, MenuItem g_free( aCommand ); } -void GtkSalMenu::EnableItem( unsigned nPos, sal_Bool bEnable ) -{ -} - void GtkSalMenu::NativeSetEnableItem( gchar* aCommand, gboolean bEnable ) { GLOActionGroup* pActionGroup = G_LO_ACTION_GROUP( mpActionGroup ); @@ -475,10 +458,6 @@ void GtkSalMenu::NativeSetEnableItem( gchar* aCommand, gboolean bEnable ) g_lo_action_group_set_action_enabled( pActionGroup, aCommand, bEnable ); } -void GtkSalMenu::SetItemText( unsigned nPos, SalMenuItem* pSalMenuItem, const rtl::OUString& rText ) -{ -} - void GtkSalMenu::NativeSetItemText( unsigned nSection, unsigned nItemPos, const rtl::OUString& rText ) { // Replace the "~" character with "_". @@ -495,14 +474,6 @@ void GtkSalMenu::NativeSetItemText( unsigned nSection, unsigned nItemPos, const g_free( aLabel ); } -void GtkSalMenu::SetItemImage( unsigned nPos, SalMenuItem* pSalMenuItem, const Image& rImage) -{ -} - -void GtkSalMenu::SetAccelerator( unsigned nPos, SalMenuItem* pSalMenuItem, const KeyCode& rKeyCode, const rtl::OUString& rKeyName ) -{ -} - void GtkSalMenu::NativeSetAccelerator( unsigned nSection, unsigned nItemPos, const KeyCode& rKeyCode, const rtl::OUString& rKeyName ) { if ( rKeyName.isEmpty() ) @@ -519,10 +490,6 @@ void GtkSalMenu::NativeSetAccelerator( unsigned nSection, unsigned nItemPos, con g_free( aCurrentAccel ); } -void GtkSalMenu::SetItemCommand( unsigned nPos, SalMenuItem* pSalMenuItem, const rtl::OUString& aCommandStr ) -{ -} - void GtkSalMenu::NativeSetItemCommand( unsigned nSection, unsigned nItemPos, GtkSalMenuItem* pItem, const gchar* aCommand ) { GLOActionGroup* pActionGroup = G_LO_ACTION_GROUP( mpActionGroup ); @@ -580,10 +547,6 @@ void GtkSalMenu::NativeSetItemCommand( unsigned nSection, unsigned nItemPos, Gtk g_free( aCurrentCommand ); } -void GtkSalMenu::GetSystemMenuData( SystemMenuData* pData ) -{ -} - GtkSalMenu* GtkSalMenu::GetMenuForItemCommand( gchar* aCommand ) { GtkSalMenu* pMenu = NULL; @@ -628,6 +591,34 @@ void GtkSalMenu::DispatchCommand( gint itemId, const gchar *aCommand ) pMenuBar->HandleMenuCommandEvent( pSubMenu, itemId ); } +void GtkSalMenu::CheckItem( unsigned nPos, sal_Bool bCheck ) +{ +} + +void GtkSalMenu::EnableItem( unsigned nPos, sal_Bool bEnable ) +{ +} + +void GtkSalMenu::SetItemText( unsigned nPos, SalMenuItem* pSalMenuItem, const rtl::OUString& rText ) +{ +} + +void GtkSalMenu::SetItemImage( unsigned nPos, SalMenuItem* pSalMenuItem, const Image& rImage) +{ +} + +void GtkSalMenu::SetAccelerator( unsigned nPos, SalMenuItem* pSalMenuItem, const KeyCode& rKeyCode, const rtl::OUString& rKeyName ) +{ +} + +void GtkSalMenu::SetItemCommand( unsigned nPos, SalMenuItem* pSalMenuItem, const rtl::OUString& aCommandStr ) +{ +} + +void GtkSalMenu::GetSystemMenuData( SystemMenuData* pData ) +{ +} + void GtkSalMenu::Freeze() { } @@ -640,7 +631,6 @@ void GtkSalMenu::Freeze() GtkSalMenuItem::GtkSalMenuItem( const SalItemParams* pItemData ) : mnId( pItemData->nId ), - mnBits( pItemData->nBits ), mnType( pItemData->eType ), mpVCLMenu( pItemData->pMenu ), mpParentMenu( NULL ), commit 56a92d82c52d8802292ad6539b6528cfcf85b5bc Author: Antonio Fernandez <[email protected]> Date: Tue Sep 11 21:25:22 2012 +0100 All Special items, including window list items are displayed, but with issues. Change-Id: I23a6857f7aa738c48061ab51f3c015c41abc84cc diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx index f746b4b..04b7361 100644 --- a/vcl/inc/unx/gtk/gtksalmenu.hxx +++ b/vcl/inc/unx/gtk/gtksalmenu.hxx @@ -55,8 +55,7 @@ private: GMenuModel* mpMenuModel; GActionGroup* mpActionGroup; - sal_Int32 GetPositionFromItem( GtkSalMenuItem* pSalMenuItem ); - void GetItemSectionAndPosition( unsigned nPos, unsigned *insertSection, unsigned *insertPos ); + GtkSalMenu* GetMenuForItemCommand( gchar* aCommand ); public: GtkSalMenu( sal_Bool bMenuBar ); @@ -89,13 +88,14 @@ public: virtual GtkSalMenuItem* GetItemAtPos( unsigned nPos ) { return maItems[ nPos ]; } virtual void SetActionGroup( GActionGroup* pActionGroup ) { mpActionGroup = pActionGroup; } virtual GActionGroup* GetActionGroup() { return mpActionGroup; } - GtkSalMenu* GetMenuForItemCommand( gchar* aCommand ); void NativeSetItemText( unsigned nSection, unsigned nItemPos, const rtl::OUString& rText ); void NativeSetItemCommand( unsigned nSection, unsigned nItemPos, GtkSalMenuItem* pItem, const gchar* aCommandStr ); void NativeSetEnableItem( gchar* aCommand, gboolean bEnable ); void NativeCheckItem( unsigned nSection, unsigned nItemPos, MenuItemBits bits, gboolean bCheck ); void NativeSetAccelerator( unsigned nSection, unsigned nItemPos, const KeyCode& rKeyCode, const rtl::OUString& rKeyName ); + + void DispatchCommand( gint itemId, const gchar* aCommand ); }; class GtkSalMenuItem : public SalMenuItem diff --git a/vcl/unx/gtk/window/gloactiongroup.cxx b/vcl/unx/gtk/window/gloactiongroup.cxx index 33e756c..8f7d469 100644 --- a/vcl/unx/gtk/window/gloactiongroup.cxx +++ b/vcl/unx/gtk/window/gloactiongroup.cxx @@ -26,7 +26,6 @@ #include <unx/gtk/gtkinst.hxx> #include <unx/gtk/gtkframe.hxx> #include <unx/gtk/gtksalmenu.hxx> -#include <vcl/menu.hxx> /* @@ -218,20 +217,13 @@ g_lo_action_group_activate (GActionGroup *group, GtkSalFrame *pFrame = lo_group->priv->frame; - if ( pFrame == NULL ) - return; - - GtkSalMenu* pSalMenu = static_cast< GtkSalMenu* >( pFrame->GetMenu() ); - - if ( pSalMenu == NULL ) - return; - - GtkSalMenu* pSalSubMenu = pSalMenu->GetMenuForItemCommand( (gchar*) action_name ); - Menu* pSubMenu = ( pSalMenu != NULL ) ? pSalSubMenu->GetMenu() : NULL; - - MenuBar* pMenuBar = static_cast< MenuBar* >( pSalMenu->GetMenu() ); + if ( pFrame != NULL ) + { + GtkSalMenu* pSalMenu = static_cast< GtkSalMenu* >( pFrame->GetMenu() ); - pMenuBar->HandleMenuCommandEvent( pSubMenu, action->item_id ); + if ( pSalMenu != NULL ) + pSalMenu->DispatchCommand( action->item_id, action_name ); + } } void diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx index b61af31..52e7dd6 100644 --- a/vcl/unx/gtk/window/gtksalmenu.cxx +++ b/vcl/unx/gtk/window/gtksalmenu.cxx @@ -28,11 +28,28 @@ #include <vcl/menu.hxx> #include <unx/gtk/gtkinst.hxx> +#include <framework/menuconfiguration.hxx> + #include <iostream> using namespace std; +static gchar* GetCommandForSpecialItem( GtkSalMenuItem* pSalMenuItem ) +{ + gchar* aCommand = NULL; + + sal_uInt16 nId = pSalMenuItem->mnId; + + // If item belongs to window list, generate a command with "window-(id)" format. + if ( ( nId >= START_ITEMID_WINDOWLIST ) && ( nId <= END_ITEMID_WINDOWLIST ) ) + { + aCommand = g_strdup_printf( "window-%d", nId ); + } + + return aCommand; +} + static void UpdateNativeMenu( GtkSalMenu* pMenu ) { if ( pMenu == NULL ) @@ -90,13 +107,23 @@ static void UpdateNativeMenu( GtkSalMenu* pMenu ) pMenu->NativeSetItemText( nSection, nItemPos, aText ); pMenu->NativeSetAccelerator( nSection, nItemPos, nAccelKey, nAccelKey.GetName( pMenu->GetFrame()->GetWindow() ) ); + // Some items are special, so they have different commands. + if ( g_strcmp0( aNativeCommand, "" ) == 0 ) + { + gchar *aSpecialItemCmd = GetCommandForSpecialItem( pSalMenuItem ); + + if ( aSpecialItemCmd != NULL ) + { + g_free( aNativeCommand ); + aNativeCommand = aSpecialItemCmd; + } + } + if ( g_strcmp0( aNativeCommand, "" ) != 0 && pSalMenuItem->mpSubMenu == NULL ) { pMenu->NativeSetItemCommand( nSection, nItemPos, pSalMenuItem, aNativeCommand ); + pMenu->NativeCheckItem( nSection, nItemPos, itemBits, bChecked ); pMenu->NativeSetEnableItem( aNativeCommand, bEnabled ); - - if ( ( itemBits & MIB_CHECKABLE ) || ( itemBits & MIB_RADIOCHECK ) ) - pMenu->NativeCheckItem( nSection, nItemPos, itemBits, bChecked ); } g_free( aNativeCommand ); @@ -114,12 +141,12 @@ static void UpdateNativeMenu( GtkSalMenu* pMenu ) } pSubmenu->GetMenu()->Activate(); + pSubmenu->GetMenu()->Deactivate(); pSubmenu->SetMenuModel( G_MENU_MODEL( pSubMenuModel ) ); pSubmenu->SetActionGroup( pActionGroup ); UpdateNativeMenu( pSubmenu ); - pSubmenu->GetMenu()->Deactivate(); } nItemPos++; @@ -417,16 +444,18 @@ void GtkSalMenu::NativeCheckItem( unsigned nSection, unsigned nItemPos, MenuItem GVariant *pCheckValue = NULL; GVariant *pCurrentState = g_action_group_get_action_state( mpActionGroup, aCommand ); - if ( bits & MIB_CHECKABLE ) + if ( bits & MIB_RADIOCHECK ) { - pCheckValue = g_variant_new_boolean( bCheck ); + pCheckValue = ( bCheck == TRUE ) ? g_variant_new_string( aCommand ) : g_variant_new_string( "" ); } - else if ( bits & MIB_RADIOCHECK ) + else { - pCheckValue = ( bCheck == TRUE ) ? g_variant_new_string( aCommand ) : g_variant_new_string( "" ); + // By default, all checked items are checkmark buttons. + if ( bCheck == TRUE || ( ( bCheck == FALSE ) && pCurrentState != NULL ) ) + pCheckValue = g_variant_new_boolean( bCheck ); } - if ( pCurrentState == NULL || g_variant_equal( pCurrentState, pCheckValue) == FALSE ) + if ( pCheckValue != NULL && ( pCurrentState == NULL || g_variant_equal( pCurrentState, pCheckValue) == FALSE ) ) g_action_group_change_action_state( mpActionGroup, aCommand, pCheckValue ); } @@ -585,6 +614,20 @@ GtkSalMenu* GtkSalMenu::GetMenuForItemCommand( gchar* aCommand ) return pMenu; } +void GtkSalMenu::DispatchCommand( gint itemId, const gchar *aCommand ) +{ + // Only the menubar is allowed to dispatch commands. + if ( mbMenuBar != TRUE ) + return; + + GtkSalMenu* pSalSubMenu = GetMenuForItemCommand( (gchar*) aCommand ); + Menu* pSubMenu = ( pSalSubMenu != NULL ) ? pSalSubMenu->GetMenu() : NULL; + + MenuBar* pMenuBar = static_cast< MenuBar* >( mpVCLMenu ); + + pMenuBar->HandleMenuCommandEvent( pSubMenu, itemId ); +} + void GtkSalMenu::Freeze() { } _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
