summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/source/window/menu.cxx68
-rw-r--r--vcl/unx/gtk/window/gtksalmenu.cxx24
2 files changed, 27 insertions, 65 deletions
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index 1dd0743f2eb5..10bcdf66da3f 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -3233,6 +3233,15 @@ void Menu::HighlightItem( sal_uInt16 nItemPos )
}
}
+void Menu::Freeze() {
+ SalMenu *pSalMenu = ImplGetSalMenu();
+
+ if ( pSalMenu ) {
+ pSalMenu->Freeze();
+ }
+}
+
+
// -----------
// - MenuBar -
// -----------
@@ -6045,63 +6054,4 @@ ImplMenuDelData::~ImplMenuDelData()
const_cast< Menu* >( mpMenu )->ImplRemoveDel( *this );
}
-#include <iostream>
-
-using namespace std;
-
-void printMenu( AbstractMenu* pMenu ) {
- if ( pMenu ) {
- sal_uInt16 itemCount = pMenu->GetItemCount();
- MenuItemList *items = ((Menu*)pMenu)->GetItemList();
-
- for (int i=0; i < itemCount; i++) {
- MenuItemData *itemData = items->GetDataFromPos(i);
- sal_uInt16 itemId = pMenu->GetItemId(i);
-
- if (itemData->eType == MENUITEM_SEPARATOR) {
- cout << "---------------" << endl;
- } else {
- rtl::OUString itemText = itemData->aText;
- rtl::OUString cmdString = itemData->aCommandStr;
- cout << "Item ID: " << itemId << " Text: " << itemText << " CMD: " << cmdString << endl;
-
- if (itemData->pSubMenu) {
- cout << ">> SUBMENU <<" << endl;
- //FIXME: This callback would introduce some noise in accessibility software.
- itemData->pSubMenu->Activate();
- printMenu( itemData->pSubMenu );
- }
- }
- }
- }
-}
-
-void generateMenuHierarchy( AbstractMenu* pMenu ) {
- if ( pMenu ) {
- sal_uInt16 itemCount = pMenu->GetItemCount();
- MenuItemList *items = ((Menu*)pMenu)->GetItemList();
-
- for (int i=0; i < itemCount; i++) {
- MenuItemData *itemData = items->GetDataFromPos(i);
-
- if (itemData->pSubMenu) {
- itemData->pSubMenu->Activate();
- generateMenuHierarchy( itemData->pSubMenu );
- }
- }
- }
-}
-
-void Menu::Freeze() {
-// printMenu( this );
- generateMenuHierarchy( this );
-// cout << "============================================================" << endl;
-
- SalMenu *pSalMenu = ImplGetSalMenu();
-
- if ( pSalMenu ) {
- pSalMenu->Freeze();
- }
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx
index c0a69c108b64..163564afd0a6 100644
--- a/vcl/unx/gtk/window/gtksalmenu.cxx
+++ b/vcl/unx/gtk/window/gtksalmenu.cxx
@@ -451,20 +451,32 @@ bool GtkSalMenu::ShowNativePopupMenu(FloatingWindow * pWin, const Rectangle& rRe
return TRUE;
}
+void updateNativeMenu( GtkSalMenu* pMenu ) {
+ if ( pMenu ) {
+ for (int i=0; i < pMenu->maItems.size(); i++) {
+ GtkSalMenuItem* pSalMenuItem = pMenu->maItems[ i ];
+ String aText = pSalMenuItem->mpVCLMenu->GetItemText( pSalMenuItem->mnId );
+
+ // Force updating of native menu labels.
+ pMenu->SetItemText( i, pSalMenuItem, aText );
+
+ if ( pSalMenuItem->mpSubMenu && pSalMenuItem->mpSubMenu->mpVCLMenu ) {
+ pSalMenuItem->mpSubMenu->mpVCLMenu->Activate();
+ updateNativeMenu( pSalMenuItem->mpSubMenu );
+ }
+ }
+ }
+}
void GtkSalMenu::Freeze()
{
- cout << __FUNCTION__ << endl;
- GLOActionGroup *mpActionGroup = g_lo_action_group_new();
+ updateNativeMenu( this );
-// GMenuModel *pMenuModel = generateMenuModelAndActions( this, mpActionGroup );
+ GLOActionGroup *mpActionGroup = g_lo_action_group_new();
generateActions( this, mpActionGroup );
-// this->publishMenu( mpMenuModel, G_ACTION_GROUP( mpActionGroup ) );
-
// Menubar would have one section only.
this->publishMenu( mpMenuModel, G_ACTION_GROUP( mpActionGroup ) );
-// g_object_unref( pMenuModel );
}
// =======================================================================