[Libreoffice-commits] .: Branch 'feature/unitymenus-quantal' - 4 commits - vcl/inc vcl/unx
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Mon Oct 22 07:10:10 PDT 2012
vcl/inc/unx/gtk/gtksalmenu.hxx | 12 ++++++++----
vcl/unx/gtk/window/gtkframe.cxx | 2 +-
vcl/unx/gtk/window/gtksalmenu.cxx | 29 +++++++++++++++++++++--------
3 files changed, 30 insertions(+), 13 deletions(-)
New commits:
commit 8f3152f39b3d8be2d746349c9ebc148c06db3c36
Author: Antonio Fernandez <antonio.fernandez at aentos.es>
Date: Mon Oct 22 15:08:52 2012 +0100
Removed pre-definition of class GtkSalMenu.
Change-Id: I56652b6074d0138128178b479503a21e0bcd0c7f
diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx
index b7d3bdd..2da7c88 100644
--- a/vcl/inc/unx/gtk/gtksalmenu.hxx
+++ b/vcl/inc/unx/gtk/gtksalmenu.hxx
@@ -35,7 +35,6 @@
class MenuItemList;
-class GtkSalMenu;
class GtkSalMenuItem;
commit 8f7852e08114d4413881407e1c101da176a1fd0f
Author: Antonio Fernandez <antonio.fernandez at aentos.es>
Date: Mon Oct 22 14:44:50 2012 +0100
Added ImplUpdate method to provide recursive and non-recursive menu updating.
Change-Id: Ifd4b3f0d68f4919a10f97d6681bfd0002fa48c7a
diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx
index 5b77a29..b7d3bdd 100644
--- a/vcl/inc/unx/gtk/gtksalmenu.hxx
+++ b/vcl/inc/unx/gtk/gtksalmenu.hxx
@@ -59,6 +59,7 @@ private:
GActionGroup* mpActionGroup;
GtkSalMenu* GetMenuForItemCommand( gchar* aCommand, gboolean bGetSubmenu );
+ void ImplUpdate( gboolean bRecurse );
public:
GtkSalMenu( sal_Bool bMenuBar );
diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx
index 38a90db..a6295c4 100644
--- a/vcl/unx/gtk/window/gtksalmenu.cxx
+++ b/vcl/unx/gtk/window/gtksalmenu.cxx
@@ -241,7 +241,7 @@ void RemoveUnusedCommands( GLOActionGroup* pActionGroup, GList* pOldCommandList,
}
}
-void GtkSalMenu::Update()
+void GtkSalMenu::ImplUpdate( gboolean bRecurse )
{
SolarMutexGuard aGuard;
//GTK_YIELD_GRAB();
@@ -358,149 +358,17 @@ void GtkSalMenu::Update()
}
g_object_unref( pSubMenuModel );
- }
-
- g_free( aNativeCommand );
-
- ++nItemPos;
- ++validItems;
- }
-
- // Delete extra items in last section.
- RemoveSpareItemsFromNativeMenu( pLOMenu, &pOldCommandList, nSection, validItems );
-
- // Delete extra sections.
- RemoveSpareSectionsFromNativeMenu( pLOMenu, &pOldCommandList, nSection );
-
- // Delete unused commands.
- RemoveUnusedCommands( pActionGroup, pOldCommandList, pNewCommandList );
-}
-void GtkSalMenu::UpdateFull()
-{
- SolarMutexGuard aGuard;
- //GTK_YIELD_GRAB();
-
- if( !PrepUpdate() )
- return;
-
- Menu* pVCLMenu = mpVCLMenu;
- GLOMenu* pLOMenu = G_LO_MENU( mpMenuModel );
- GLOActionGroup* pActionGroup = G_LO_ACTION_GROUP( mpActionGroup );
- GList *pOldCommandList = NULL;
- GList *pNewCommandList = NULL;
-
- sal_uInt16 nLOMenuSize = g_menu_model_get_n_items( G_MENU_MODEL( pLOMenu ) );
-
- if ( nLOMenuSize == 0 )
- g_lo_menu_new_section( pLOMenu, 0, NULL );
-
- sal_Int32 nSection = 0;
- sal_Int32 nItemPos = 0;
- sal_Int32 validItems = 0;
- sal_Int32 nItem;
-
- for ( nItem = 0; nItem < ( sal_Int32 ) GetItemCount(); nItem++ ) {
- if ( IsItemVisible( nItem ) == sal_False )
- continue;
-
- GtkSalMenuItem *pSalMenuItem = GetItemAtPos( nItem );
- sal_uInt16 nId = pSalMenuItem->mnId;
-
- if ( pSalMenuItem->mnType == MENUITEM_SEPARATOR )
- {
- // Delete extra items from current section.
- RemoveSpareItemsFromNativeMenu( pLOMenu, &pOldCommandList, nSection, validItems );
-
- nSection++;
- nItemPos = 0;
- validItems = 0;
-
- if ( nLOMenuSize <= nSection )
+ if ( bRecurse )
{
- g_lo_menu_new_section( pLOMenu, nSection, NULL );
- nLOMenuSize++;
- }
-
- continue;
- }
-
- if ( nItemPos >= g_lo_menu_get_n_items_from_section( pLOMenu, nSection ) )
- g_lo_menu_insert_in_section( pLOMenu, nSection, nItemPos, "EMPTY STRING" );
-
- // Get internal menu item values.
- String aText = pVCLMenu->GetItemText( nId );
- rtl::OUString aCommand( pVCLMenu->GetItemCommand( nId ) );
- sal_Bool itemEnabled = pVCLMenu->IsItemEnabled( nId );
- KeyCode nAccelKey = pVCLMenu->GetAccelKey( nId );
- sal_Bool itemChecked = pVCLMenu->IsItemChecked( nId );
- MenuItemBits itemBits = pVCLMenu->GetItemBits( nId );
-
- // Convert internal values to native values.
- gboolean bChecked = ( itemChecked == sal_True ) ? TRUE : FALSE;
- gboolean bEnabled = ( itemEnabled == sal_True ) ? TRUE : FALSE;
-// gchar* aNativeCommand = g_strdup( rtl::OUStringToOString( aCommand, RTL_TEXTENCODING_UTF8 ).getStr() );
- gchar* aNativeCommand = GetCommandForSpecialItem( pSalMenuItem );
-
- // Store current item command in command list.
- gchar *aCurrentCommand = g_lo_menu_get_command_from_item_in_section( pLOMenu, nSection, nItemPos );
-
- if ( aCurrentCommand != NULL )
- pOldCommandList = g_list_append( pOldCommandList, aCurrentCommand );
-
- // Force updating of native menu labels.
- NativeSetItemText( nSection, nItemPos, aText );
- NativeSetAccelerator( nSection, nItemPos, nAccelKey, nAccelKey.GetName( GetFrame()->GetWindow() ) );
-
- // Some items are special, so they have different commands.
-// if ( g_strcmp0( aNativeCommand, "" ) == 0 )
- if ( !aNativeCommand )
- {
-// gchar *aSpecialItemCmd = GetCommandForSpecialItem( pSalMenuItem );
- aNativeCommand = g_strdup( rtl::OUStringToOString( aCommand, RTL_TEXTENCODING_UTF8 ).getStr() );
+ pSubmenu->SetMenuModel( G_MENU_MODEL( pSubMenuModel ) );
+ pSubmenu->SetActionGroup( G_ACTION_GROUP( pActionGroup ) );
-// if ( aSpecialItemCmd != NULL )
-// {
-// g_free( aNativeCommand );
-// aNativeCommand = aSpecialItemCmd;
-// }
- }
+ pSubmenu->GetMenu()->Activate();
+ pSubmenu->GetMenu()->Deactivate();
- if ( g_strcmp0( aNativeCommand, "" ) != 0 && pSalMenuItem->mpSubMenu == NULL )
- {
- NativeSetItemCommand( nSection, nItemPos, nId, aNativeCommand, itemBits, bChecked, FALSE );
- NativeCheckItem( nSection, nItemPos, itemBits, bChecked );
- NativeSetEnableItem( aNativeCommand, bEnabled );
-
- pNewCommandList = g_list_append( pNewCommandList, g_strdup( aNativeCommand ) );
- }
-
- GtkSalMenu* pSubmenu = pSalMenuItem->mpSubMenu;
-
- if ( pSubmenu && pSubmenu->GetMenu() )
- {
- NativeSetItemCommand( nSection, nItemPos, nId, aNativeCommand, itemBits, FALSE, TRUE );
- pNewCommandList = g_list_append( pNewCommandList, g_strdup( aNativeCommand ) );
-
- GLOMenu* pSubMenuModel = g_lo_menu_get_submenu_from_item_in_section( pLOMenu, nSection, nItemPos );
-
- if ( pSubMenuModel == NULL )
- {
- //pSubMenuModel = g_lo_menu_new();
- //g_lo_menu_set_submenu_to_item_in_section( pLOMenu, nSection, nItemPos, G_MENU_MODEL( pSubMenuModel ) );
- g_lo_menu_new_submenu_in_item_in_section( pLOMenu, nSection, nItemPos );
- pSubMenuModel = g_lo_menu_get_submenu_from_item_in_section( pLOMenu, nSection, nItemPos );
+ pSubmenu->ImplUpdate( bRecurse );
}
-
- g_object_unref( pSubMenuModel );
-
- pSubmenu->SetMenuModel( G_MENU_MODEL( pSubMenuModel ) );
- pSubmenu->SetActionGroup( G_ACTION_GROUP( pActionGroup ) );
-
- pSubmenu->GetMenu()->Activate();
- pSubmenu->GetMenu()->Deactivate();
-
- pSubmenu->UpdateFull();
}
g_free( aNativeCommand );
@@ -519,6 +387,16 @@ void GtkSalMenu::UpdateFull()
RemoveUnusedCommands( pActionGroup, pOldCommandList, pNewCommandList );
}
+void GtkSalMenu::Update()
+{
+ ImplUpdate( FALSE );
+}
+
+void GtkSalMenu::UpdateFull()
+{
+ ImplUpdate( TRUE );
+}
+
/*
* GtkSalMenu
commit fcec048d761abd99dd590694c05d247857470bc7
Author: Antonio Fernandez <antonio.fernandez at aentos.es>
Date: Mon Oct 22 14:29:14 2012 +0100
Some code refactoring.
Change-Id: I47d9be121898ca66f73488be4b46cc16cc4013a9
diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx
index 81ff193..5b77a29 100644
--- a/vcl/inc/unx/gtk/gtksalmenu.hxx
+++ b/vcl/inc/unx/gtk/gtksalmenu.hxx
@@ -40,7 +40,7 @@ class GtkSalMenuItem;
// Generate the complete structure of a menu.
-static void GenerateFullMenu( GtkSalMenu* pSalMenu );
+//static void GenerateFullMenu( GtkSalMenu* pSalMenu );
class GtkSalMenu : public SalMenu
@@ -110,7 +110,8 @@ public:
void Deactivate( const gchar* aMenuCommand );
void Display( sal_Bool bVisible );
bool PrepUpdate();
-// void UpdateNativeMenu();
+ void Update(); // Update this menu only.
+ void UpdateFull(); // Update full menu hierarchy from this menu.
};
class GtkSalMenuItem : public SalMenuItem
diff --git a/vcl/unx/gtk/window/gtkframe.cxx b/vcl/unx/gtk/window/gtkframe.cxx
index f307a11..4b27b7d 100644
--- a/vcl/unx/gtk/window/gtkframe.cxx
+++ b/vcl/unx/gtk/window/gtkframe.cxx
@@ -581,7 +581,7 @@ void on_registrar_available( GDBusConnection * /*connection*/,
{
GtkSalMenu* pGtkSalMenu = static_cast<GtkSalMenu*>(pSalMenu);
pGtkSalMenu->Display( sal_True );
- pGtkSalMenu->UpdateNativeMenu();
+ pGtkSalMenu->UpdateFull();
}
}
diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx
index d094a4f..38a90db 100644
--- a/vcl/unx/gtk/window/gtksalmenu.cxx
+++ b/vcl/unx/gtk/window/gtksalmenu.cxx
@@ -241,7 +241,7 @@ void RemoveUnusedCommands( GLOActionGroup* pActionGroup, GList* pOldCommandList,
}
}
-void GtkSalMenu::UpdateNativeMenu()
+void GtkSalMenu::Update()
{
SolarMutexGuard aGuard;
//GTK_YIELD_GRAB();
@@ -376,17 +376,17 @@ void GtkSalMenu::UpdateNativeMenu()
RemoveUnusedCommands( pActionGroup, pOldCommandList, pNewCommandList );
}
-static void GenerateFullMenu( GtkSalMenu* pSalMenu )
+void GtkSalMenu::UpdateFull()
{
SolarMutexGuard aGuard;
//GTK_YIELD_GRAB();
- if( !pSalMenu || !pSalMenu->PrepUpdate() )
+ if( !PrepUpdate() )
return;
- Menu* pVCLMenu = pSalMenu->GetMenu();
- GLOMenu* pLOMenu = G_LO_MENU( pSalMenu->GetMenuModel() );
- GLOActionGroup* pActionGroup = G_LO_ACTION_GROUP( pSalMenu->GetActionGroup() );
+ Menu* pVCLMenu = mpVCLMenu;
+ GLOMenu* pLOMenu = G_LO_MENU( mpMenuModel );
+ GLOActionGroup* pActionGroup = G_LO_ACTION_GROUP( mpActionGroup );
GList *pOldCommandList = NULL;
GList *pNewCommandList = NULL;
@@ -400,11 +400,11 @@ static void GenerateFullMenu( GtkSalMenu* pSalMenu )
sal_Int32 validItems = 0;
sal_Int32 nItem;
- for ( nItem = 0; nItem < ( sal_Int32 ) pSalMenu->GetItemCount(); nItem++ ) {
- if ( pSalMenu->IsItemVisible( nItem ) == sal_False )
+ for ( nItem = 0; nItem < ( sal_Int32 ) GetItemCount(); nItem++ ) {
+ if ( IsItemVisible( nItem ) == sal_False )
continue;
- GtkSalMenuItem *pSalMenuItem = pSalMenu->GetItemAtPos( nItem );
+ GtkSalMenuItem *pSalMenuItem = GetItemAtPos( nItem );
sal_uInt16 nId = pSalMenuItem->mnId;
if ( pSalMenuItem->mnType == MENUITEM_SEPARATOR )
@@ -440,7 +440,7 @@ static void GenerateFullMenu( GtkSalMenu* pSalMenu )
gboolean bChecked = ( itemChecked == sal_True ) ? TRUE : FALSE;
gboolean bEnabled = ( itemEnabled == sal_True ) ? TRUE : FALSE;
// gchar* aNativeCommand = g_strdup( rtl::OUStringToOString( aCommand, RTL_TEXTENCODING_UTF8 ).getStr() );
- gchar* aNativeCommand = pSalMenu->GetCommandForSpecialItem( pSalMenuItem );
+ gchar* aNativeCommand = GetCommandForSpecialItem( pSalMenuItem );
// Store current item command in command list.
gchar *aCurrentCommand = g_lo_menu_get_command_from_item_in_section( pLOMenu, nSection, nItemPos );
@@ -449,8 +449,8 @@ static void GenerateFullMenu( GtkSalMenu* pSalMenu )
pOldCommandList = g_list_append( pOldCommandList, aCurrentCommand );
// Force updating of native menu labels.
- pSalMenu->NativeSetItemText( nSection, nItemPos, aText );
- pSalMenu->NativeSetAccelerator( nSection, nItemPos, nAccelKey, nAccelKey.GetName( GetFrame()->GetWindow() ) );
+ NativeSetItemText( nSection, nItemPos, aText );
+ NativeSetAccelerator( nSection, nItemPos, nAccelKey, nAccelKey.GetName( GetFrame()->GetWindow() ) );
// Some items are special, so they have different commands.
// if ( g_strcmp0( aNativeCommand, "" ) == 0 )
@@ -468,9 +468,9 @@ static void GenerateFullMenu( GtkSalMenu* pSalMenu )
if ( g_strcmp0( aNativeCommand, "" ) != 0 && pSalMenuItem->mpSubMenu == NULL )
{
- pSalMenu->NativeSetItemCommand( nSection, nItemPos, nId, aNativeCommand, itemBits, bChecked, FALSE );
- pSalMenu->NativeCheckItem( nSection, nItemPos, itemBits, bChecked );
- pSalMenu->NativeSetEnableItem( aNativeCommand, bEnabled );
+ NativeSetItemCommand( nSection, nItemPos, nId, aNativeCommand, itemBits, bChecked, FALSE );
+ NativeCheckItem( nSection, nItemPos, itemBits, bChecked );
+ NativeSetEnableItem( aNativeCommand, bEnabled );
pNewCommandList = g_list_append( pNewCommandList, g_strdup( aNativeCommand ) );
}
@@ -479,7 +479,7 @@ static void GenerateFullMenu( GtkSalMenu* pSalMenu )
if ( pSubmenu && pSubmenu->GetMenu() )
{
- pSalMenu->NativeSetItemCommand( nSection, nItemPos, nId, aNativeCommand, itemBits, FALSE, TRUE );
+ NativeSetItemCommand( nSection, nItemPos, nId, aNativeCommand, itemBits, FALSE, TRUE );
pNewCommandList = g_list_append( pNewCommandList, g_strdup( aNativeCommand ) );
GLOMenu* pSubMenuModel = g_lo_menu_get_submenu_from_item_in_section( pLOMenu, nSection, nItemPos );
@@ -500,8 +500,7 @@ static void GenerateFullMenu( GtkSalMenu* pSalMenu )
pSubmenu->GetMenu()->Activate();
pSubmenu->GetMenu()->Deactivate();
- GenerateFullMenu( pSubmenu );
- //pSubmenu->UpdateNativeMenu();
+ pSubmenu->UpdateFull();
}
g_free( aNativeCommand );
@@ -630,7 +629,7 @@ void GtkSalMenu::SetFrame( const SalFrame* pFrame )
// Generate the main menu structure.
if (bMenuVisibility)
- UpdateNativeMenu();
+ UpdateFull();
g_lo_menu_insert_section( pMenuModel, 0, NULL, mpMenuModel );
}
@@ -843,7 +842,7 @@ void GtkSalMenu::Activate( const gchar* aMenuCommand )
if ( pSalSubMenu != NULL ) {
MenuBar* pMenuBar = static_cast< MenuBar* >( mpVCLMenu );
pMenuBar->HandleMenuActivateEvent( pSalSubMenu->mpVCLMenu );
- pSalSubMenu->UpdateNativeMenu2();
+ pSalSubMenu->Update();
}
}
commit f40d82656e1978b44289ca40bb7d0cdd9ba8adb7
Author: Antonio Fernandez <antonio.fernandez at aentos.es>
Date: Mon Oct 22 10:52:58 2012 +0100
Only activated submenus are generated when activating them. (Broken)
Change-Id: I9548a2c8dfec114de3133d55ca00362793b71a6c
diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx
index 46ba215..81ff193 100644
--- a/vcl/inc/unx/gtk/gtksalmenu.hxx
+++ b/vcl/inc/unx/gtk/gtksalmenu.hxx
@@ -35,9 +35,14 @@
class MenuItemList;
+class GtkSalMenu;
class GtkSalMenuItem;
+// Generate the complete structure of a menu.
+static void GenerateFullMenu( GtkSalMenu* pSalMenu );
+
+
class GtkSalMenu : public SalMenu
{
private:
@@ -103,11 +108,9 @@ public:
void DispatchCommand( gint itemId, const gchar* aCommand );
void Activate( const gchar* aMenuCommand );
void Deactivate( const gchar* aMenuCommand );
-// void DisconnectFrame();
void Display( sal_Bool bVisible );
- void UpdateNativeMenu();
-// void UpdateNativeSubMenu();
- bool PrepUpdate();
+ bool PrepUpdate();
+// void UpdateNativeMenu();
};
class GtkSalMenuItem : public SalMenuItem
diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx
index 8c48873..d094a4f 100644
--- a/vcl/unx/gtk/window/gtksalmenu.cxx
+++ b/vcl/unx/gtk/window/gtksalmenu.cxx
@@ -358,6 +358,141 @@ void GtkSalMenu::UpdateNativeMenu()
}
g_object_unref( pSubMenuModel );
+ }
+
+ g_free( aNativeCommand );
+
+ ++nItemPos;
+ ++validItems;
+ }
+
+ // Delete extra items in last section.
+ RemoveSpareItemsFromNativeMenu( pLOMenu, &pOldCommandList, nSection, validItems );
+
+ // Delete extra sections.
+ RemoveSpareSectionsFromNativeMenu( pLOMenu, &pOldCommandList, nSection );
+
+ // Delete unused commands.
+ RemoveUnusedCommands( pActionGroup, pOldCommandList, pNewCommandList );
+}
+
+static void GenerateFullMenu( GtkSalMenu* pSalMenu )
+{
+ SolarMutexGuard aGuard;
+ //GTK_YIELD_GRAB();
+
+ if( !pSalMenu || !pSalMenu->PrepUpdate() )
+ return;
+
+ Menu* pVCLMenu = pSalMenu->GetMenu();
+ GLOMenu* pLOMenu = G_LO_MENU( pSalMenu->GetMenuModel() );
+ GLOActionGroup* pActionGroup = G_LO_ACTION_GROUP( pSalMenu->GetActionGroup() );
+ GList *pOldCommandList = NULL;
+ GList *pNewCommandList = NULL;
+
+ sal_uInt16 nLOMenuSize = g_menu_model_get_n_items( G_MENU_MODEL( pLOMenu ) );
+
+ if ( nLOMenuSize == 0 )
+ g_lo_menu_new_section( pLOMenu, 0, NULL );
+
+ sal_Int32 nSection = 0;
+ sal_Int32 nItemPos = 0;
+ sal_Int32 validItems = 0;
+ sal_Int32 nItem;
+
+ for ( nItem = 0; nItem < ( sal_Int32 ) pSalMenu->GetItemCount(); nItem++ ) {
+ if ( pSalMenu->IsItemVisible( nItem ) == sal_False )
+ continue;
+
+ GtkSalMenuItem *pSalMenuItem = pSalMenu->GetItemAtPos( nItem );
+ sal_uInt16 nId = pSalMenuItem->mnId;
+
+ if ( pSalMenuItem->mnType == MENUITEM_SEPARATOR )
+ {
+ // Delete extra items from current section.
+ RemoveSpareItemsFromNativeMenu( pLOMenu, &pOldCommandList, nSection, validItems );
+
+ nSection++;
+ nItemPos = 0;
+ validItems = 0;
+
+ if ( nLOMenuSize <= nSection )
+ {
+ g_lo_menu_new_section( pLOMenu, nSection, NULL );
+ nLOMenuSize++;
+ }
+
+ continue;
+ }
+
+ if ( nItemPos >= g_lo_menu_get_n_items_from_section( pLOMenu, nSection ) )
+ g_lo_menu_insert_in_section( pLOMenu, nSection, nItemPos, "EMPTY STRING" );
+
+ // Get internal menu item values.
+ String aText = pVCLMenu->GetItemText( nId );
+ rtl::OUString aCommand( pVCLMenu->GetItemCommand( nId ) );
+ sal_Bool itemEnabled = pVCLMenu->IsItemEnabled( nId );
+ KeyCode nAccelKey = pVCLMenu->GetAccelKey( nId );
+ sal_Bool itemChecked = pVCLMenu->IsItemChecked( nId );
+ MenuItemBits itemBits = pVCLMenu->GetItemBits( nId );
+
+ // Convert internal values to native values.
+ gboolean bChecked = ( itemChecked == sal_True ) ? TRUE : FALSE;
+ gboolean bEnabled = ( itemEnabled == sal_True ) ? TRUE : FALSE;
+// gchar* aNativeCommand = g_strdup( rtl::OUStringToOString( aCommand, RTL_TEXTENCODING_UTF8 ).getStr() );
+ gchar* aNativeCommand = pSalMenu->GetCommandForSpecialItem( pSalMenuItem );
+
+ // Store current item command in command list.
+ gchar *aCurrentCommand = g_lo_menu_get_command_from_item_in_section( pLOMenu, nSection, nItemPos );
+
+ if ( aCurrentCommand != NULL )
+ pOldCommandList = g_list_append( pOldCommandList, aCurrentCommand );
+
+ // Force updating of native menu labels.
+ pSalMenu->NativeSetItemText( nSection, nItemPos, aText );
+ pSalMenu->NativeSetAccelerator( nSection, nItemPos, nAccelKey, nAccelKey.GetName( GetFrame()->GetWindow() ) );
+
+ // Some items are special, so they have different commands.
+// if ( g_strcmp0( aNativeCommand, "" ) == 0 )
+ if ( !aNativeCommand )
+ {
+// gchar *aSpecialItemCmd = GetCommandForSpecialItem( pSalMenuItem );
+ aNativeCommand = g_strdup( rtl::OUStringToOString( aCommand, RTL_TEXTENCODING_UTF8 ).getStr() );
+
+// if ( aSpecialItemCmd != NULL )
+// {
+// g_free( aNativeCommand );
+// aNativeCommand = aSpecialItemCmd;
+// }
+ }
+
+ if ( g_strcmp0( aNativeCommand, "" ) != 0 && pSalMenuItem->mpSubMenu == NULL )
+ {
+ pSalMenu->NativeSetItemCommand( nSection, nItemPos, nId, aNativeCommand, itemBits, bChecked, FALSE );
+ pSalMenu->NativeCheckItem( nSection, nItemPos, itemBits, bChecked );
+ pSalMenu->NativeSetEnableItem( aNativeCommand, bEnabled );
+
+ pNewCommandList = g_list_append( pNewCommandList, g_strdup( aNativeCommand ) );
+ }
+
+ GtkSalMenu* pSubmenu = pSalMenuItem->mpSubMenu;
+
+ if ( pSubmenu && pSubmenu->GetMenu() )
+ {
+ pSalMenu->NativeSetItemCommand( nSection, nItemPos, nId, aNativeCommand, itemBits, FALSE, TRUE );
+ pNewCommandList = g_list_append( pNewCommandList, g_strdup( aNativeCommand ) );
+
+ GLOMenu* pSubMenuModel = g_lo_menu_get_submenu_from_item_in_section( pLOMenu, nSection, nItemPos );
+
+ if ( pSubMenuModel == NULL )
+ {
+ //pSubMenuModel = g_lo_menu_new();
+ //g_lo_menu_set_submenu_to_item_in_section( pLOMenu, nSection, nItemPos, G_MENU_MODEL( pSubMenuModel ) );
+ g_lo_menu_new_submenu_in_item_in_section( pLOMenu, nSection, nItemPos );
+ pSubMenuModel = g_lo_menu_get_submenu_from_item_in_section( pLOMenu, nSection, nItemPos );
+ }
+
+ g_object_unref( pSubMenuModel );
pSubmenu->SetMenuModel( G_MENU_MODEL( pSubMenuModel ) );
pSubmenu->SetActionGroup( G_ACTION_GROUP( pActionGroup ) );
@@ -365,7 +500,8 @@ void GtkSalMenu::UpdateNativeMenu()
pSubmenu->GetMenu()->Activate();
pSubmenu->GetMenu()->Deactivate();
- pSubmenu->UpdateNativeMenu();
+ GenerateFullMenu( pSubmenu );
+ //pSubmenu->UpdateNativeMenu();
}
g_free( aNativeCommand );
@@ -707,7 +843,7 @@ void GtkSalMenu::Activate( const gchar* aMenuCommand )
if ( pSalSubMenu != NULL ) {
MenuBar* pMenuBar = static_cast< MenuBar* >( mpVCLMenu );
pMenuBar->HandleMenuActivateEvent( pSalSubMenu->mpVCLMenu );
- pSalSubMenu->UpdateNativeMenu();
+ pSalSubMenu->UpdateNativeMenu2();
}
}
More information about the Libreoffice-commits
mailing list