[Libreoffice-commits] .: Branch 'feature/unitymenus' - vcl/source vcl/unx

Antonio Fernandez afernandez at kemper.freedesktop.org
Mon Aug 13 14:20:16 PDT 2012


 vcl/source/window/menu.cxx        |   68 +++++---------------------------------
 vcl/unx/gtk/window/gtksalmenu.cxx |   24 ++++++++++---
 2 files changed, 27 insertions(+), 65 deletions(-)

New commits:
commit 8af3f23b0632beec4147329877717d431c6942c0
Author: Antonio Fernandez <antonio.fernandez at aentos.es>
Date:   Mon Aug 13 22:19:30 2012 +0100

    All menu labels are now displayed. There are some issues with repeated labels.
    
    Change-Id: I1b92b91f34003f20aaa56558c1c0e231d1de6f94

diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index 3a14ca6..e921805 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -3244,6 +3244,15 @@ void Menu::HighlightItem( sal_uInt16 nItemPos )
     }
 }
 
+void Menu::Freeze() {
+    SalMenu *pSalMenu = ImplGetSalMenu();
+
+    if ( pSalMenu ) {
+        pSalMenu->Freeze();
+    }
+}
+
+
 // -----------
 // - MenuBar -
 // -----------
@@ -6069,63 +6078,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 c0a69c1..163564a 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 );
 }
 
 // =======================================================================


More information about the Libreoffice-commits mailing list