[Libreoffice-commits] .: Branch 'feature/unitymenus' - 2 commits - vcl/inc vcl/source vcl/unx
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Mon Sep 24 08:21:52 PDT 2012
vcl/inc/salmenu.hxx | 4 +-
vcl/inc/unx/gtk/gtksalmenu.hxx | 9 +++--
vcl/source/window/menu.cxx | 3 +
vcl/unx/gtk/window/gtksalmenu.cxx | 60 +++++++++++++++++++++++++++++++-------
4 files changed, 60 insertions(+), 16 deletions(-)
New commits:
commit 548f323d08683ee52cfc6655b93b2a245000105e
Author: Antonio Fernandez <antonio.fernandez at aentos.es>
Date: Mon Sep 24 16:20:57 2012 +0100
Extra menu items are removed when needed, but not their actions.
Change-Id: If817b03cc7b30bfeb751e47fff4aa571fdaaafdc
diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx
index 5b8c46e..b3976ec 100644
--- a/vcl/unx/gtk/window/gtksalmenu.cxx
+++ b/vcl/unx/gtk/window/gtksalmenu.cxx
@@ -253,17 +253,14 @@ static void on_registrar_available( GDBusConnection* /*connection*/,
pSalMenu->SetActionGroup( pActionGroup );
}
-// PublishMenu( gdkWindow );
- g_timeout_add_full( G_PRIORITY_HIGH, 0, PublishMenu, (gpointer) gdkWindow, NULL );
+ PublishMenu( gdkWindow );
bDBusIsAvailable = sal_True;
if ( pMenuBar )
pMenuBar->SetDisplayable( sal_False );
-// ;
-// GenerateMenu( pSalMenu );
- g_timeout_add_full( G_PRIORITY_HIGH, 0, GenerateMenu, pSalMenu, NULL );
+ GenerateMenu( pSalMenu );
}
}
}
@@ -478,12 +475,12 @@ static void UpdateNativeSubMenu( GtkSalMenu *pMenu )
if ( nLOMenuSize == 0 )
g_lo_menu_new_section( pLOMenu, 0, NULL );
- sal_uInt16 nSection = 0;
- sal_uInt16 nItemPos = 0;
- sal_uInt16 validItems = 0;
- sal_uInt16 nItem;
+ sal_Int32 nSection = 0;
+ sal_Int32 nItemPos = 0;
+ sal_Int32 validItems = 0;
+ sal_Int32 nItem;
- for ( nItem = 0; nItem < pMenu->GetItemCount(); nItem++ ) {
+ for ( nItem = 0; nItem < ( sal_Int32 ) pMenu->GetItemCount(); nItem++ ) {
if ( pMenu->IsItemVisible( nItem ) == sal_False )
continue;
@@ -492,12 +489,12 @@ static void UpdateNativeSubMenu( GtkSalMenu *pMenu )
if ( pSalMenuItem->mnType == MENUITEM_SEPARATOR )
{
+ // Delete extra items from current section.
sal_uInt16 nSectionItems = g_lo_menu_get_n_items_from_section( pLOMenu, nSection );
- sal_Int32 nItemsToDelete = nSectionItems - validItems;
- if ( nItemsToDelete > 0 )
- for ( sal_uInt16 i = nSectionItems - 1; i >= validItems; i-- )
- g_lo_menu_remove_from_section( pLOMenu, nSection, i );
+ while ( nSectionItems > validItems )
+ // FIXME Remove associated command if needed.
+ g_lo_menu_remove_from_section( pLOMenu, nSection, --nSectionItems );
nSection++;
nItemPos = 0;
@@ -576,6 +573,17 @@ static void UpdateNativeSubMenu( GtkSalMenu *pMenu )
nItemPos++;
validItems++;
}
+
+ // Delete extra items in last section.
+ sal_Int32 nSectionItems = (sal_Int32) g_lo_menu_get_n_items_from_section( pLOMenu, nSection );
+
+ while ( nSectionItems > validItems )
+ g_lo_menu_remove_from_section( pLOMenu, nSection, --nSectionItems );
+
+ // Delete extra sections.
+ for ( sal_Int32 n = nLOMenuSize - 1; n > nSection; )
+ // FIXME Remove associated command if needed.
+ g_lo_menu_remove( pLOMenu, n-- );
}
static void UpdateNativeMenu( GtkSalMenu* pMenu )
@@ -684,8 +692,7 @@ GtkSalMenu::~GtkSalMenu()
sal_Bool GtkSalMenu::VisibleMenuBar()
{
-// return bDBusIsAvailable;
- return sal_False;
+ return bDBusIsAvailable;
}
void GtkSalMenu::InsertItem( SalMenuItem* pSalMenuItem, unsigned nPos )
@@ -732,8 +739,7 @@ void GtkSalMenu::SetFrame( const SalFrame* pFrame )
mpActionGroup = G_ACTION_GROUP( g_object_get_data( G_OBJECT( gdkWindow ), "g-lo-action-group" ) );
if ( mpMenuModel == NULL && mpActionGroup == NULL )
-// InitNativeMenu( ( GtkSalFrame* ) pFrame );
- g_idle_add_full( G_PRIORITY_HIGH_IDLE, InitNativeMenu, (gpointer) pFrame, NULL );
+ InitNativeMenu( ( GtkSalFrame* ) pFrame );
else
// Generate the main menu structure.
GenerateMenu( this );
@@ -837,7 +843,7 @@ void GtkSalMenu::EnableItem( unsigned, sal_Bool )
void GtkSalMenu::ShowItem( unsigned nPos, sal_Bool bShow )
{
if ( nPos < maItems.size() )
- ( ( GtkSalMenuItem* ) maItems[ nPos ])->mbVisible = bShow;
+ ( ( GtkSalMenuItem* ) maItems[ nPos ] )->mbVisible = bShow;
}
void GtkSalMenu::SetItemText( unsigned, SalMenuItem*, const rtl::OUString& )
commit ce402ba79e48f0e62bfd339da9df5a488a1acab0
Author: Antonio Fernandez <antonio.fernandez at aentos.es>
Date: Mon Sep 24 13:11:45 2012 +0100
Hidden items are not shown anymore.
Change-Id: I957c8c7690321be58e8daaf2fb65ebef136d95bc
diff --git a/vcl/inc/salmenu.hxx b/vcl/inc/salmenu.hxx
index e09b7ce..3411cb2 100644
--- a/vcl/inc/salmenu.hxx
+++ b/vcl/inc/salmenu.hxx
@@ -75,7 +75,7 @@ public:
virtual ~SalMenu();
virtual sal_Bool VisibleMenuBar() = 0; // must return sal_True to actually DISPLAY native menu bars
- // otherwise only menu messages are processed (eg, OLE on Windows)
+ // otherwise only menu messages are processed (eg, OLE on Windows)
virtual void InsertItem( SalMenuItem* pSalMenuItem, unsigned nPos ) = 0;
virtual void RemoveItem( unsigned nPos ) = 0;
@@ -91,7 +91,9 @@ public:
virtual bool AddMenuBarButton( const SalMenuButtonItem& ); // return false if not implemented or failure
virtual void RemoveMenuBarButton( sal_uInt16 nId );
+ // FIXME: Make the other VCL native backends to work with these new methods.
virtual void SetItemCommand( unsigned, SalMenuItem*, const rtl::OUString& ) {}
+ virtual void ShowItem( unsigned nPos, sal_Bool bShow ) { EnableItem( nPos, bShow ); }
virtual void Freeze() {}
// return an empty rectangle if not implemented
diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx
index f2f1c9d..729eafc 100644
--- a/vcl/inc/unx/gtk/gtksalmenu.hxx
+++ b/vcl/inc/unx/gtk/gtksalmenu.hxx
@@ -70,6 +70,7 @@ public:
virtual const GtkSalFrame* GetFrame() const;
virtual void CheckItem( unsigned nPos, sal_Bool bCheck );
virtual void EnableItem( unsigned nPos, sal_Bool bEnable );
+ virtual void ShowItem( unsigned nPos, sal_Bool bShow );
virtual void SetItemText( unsigned nPos, SalMenuItem* pSalMenuItem, const rtl::OUString& rText );
virtual void SetItemImage( unsigned nPos, SalMenuItem* pSalMenuItem, const Image& rImage);
virtual void SetAccelerator( unsigned nPos, SalMenuItem* pSalMenuItem, const KeyCode& rKeyCode, const rtl::OUString& rKeyName );
@@ -86,6 +87,7 @@ public:
virtual GtkSalMenuItem* GetItemAtPos( unsigned nPos ) { return maItems[ nPos ]; }
virtual void SetActionGroup( GActionGroup* pActionGroup ) { mpActionGroup = pActionGroup; }
virtual GActionGroup* GetActionGroup() { return mpActionGroup; }
+ virtual sal_Bool IsItemVisible( unsigned nPos );
void DispatchCommand( gint itemId, const gchar* aCommand );
void Activate( const gchar* aMenuCommand );
@@ -100,9 +102,10 @@ public:
sal_uInt16 mnId; // Item ID
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
- GtkSalMenu* mpSubMenu; // Sub menu of this item (if defined)
+ sal_Bool mbVisible; // Item visibility.
+ Menu* mpVCLMenu; // VCL Menu into which this menu item is inserted
+ GtkSalMenu* mpParentMenu; // The menu into which this menu item is inserted
+ GtkSalMenu* mpSubMenu; // Submenu of this item (if defined)
};
#endif // GTKSALMENU_HXX
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index 7fc74e4..bf41af8 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -1811,7 +1811,8 @@ void Menu::ShowItem( sal_uInt16 nItemId, sal_Bool bVisible )
// as long as there is no support to hide native menu entries, we just disable them
// TODO: add support to show/hide native menu entries
if( ImplGetSalMenu() )
- ImplGetSalMenu()->EnableItem( nPos, bVisible );
+// ImplGetSalMenu()->EnableItem( nPos, bVisible );
+ ImplGetSalMenu()->ShowItem( nPos, bVisible );
}
}
diff --git a/vcl/unx/gtk/window/gtksalmenu.cxx b/vcl/unx/gtk/window/gtksalmenu.cxx
index 77ae927..5b8c46e 100644
--- a/vcl/unx/gtk/window/gtksalmenu.cxx
+++ b/vcl/unx/gtk/window/gtksalmenu.cxx
@@ -31,6 +31,8 @@
# include <gdk/gdkkeysyms-compat.h>
#endif
+#include <svtools/menuoptions.hxx>
+
#include <framework/menuconfiguration.hxx>
#include <iostream>
@@ -258,6 +260,7 @@ static void on_registrar_available( GDBusConnection* /*connection*/,
if ( pMenuBar )
pMenuBar->SetDisplayable( sal_False );
+// ;
// GenerateMenu( pSalMenu );
g_timeout_add_full( G_PRIORITY_HIGH, 0, GenerateMenu, pSalMenu, NULL );
@@ -481,13 +484,24 @@ static void UpdateNativeSubMenu( GtkSalMenu *pMenu )
sal_uInt16 nItem;
for ( nItem = 0; nItem < pMenu->GetItemCount(); nItem++ ) {
+ if ( pMenu->IsItemVisible( nItem ) == sal_False )
+ continue;
+
GtkSalMenuItem *pSalMenuItem = pMenu->GetItemAtPos( nItem );
sal_uInt16 nId = pSalMenuItem->mnId;
if ( pSalMenuItem->mnType == MENUITEM_SEPARATOR )
{
+ sal_uInt16 nSectionItems = g_lo_menu_get_n_items_from_section( pLOMenu, nSection );
+ sal_Int32 nItemsToDelete = nSectionItems - validItems;
+
+ if ( nItemsToDelete > 0 )
+ for ( sal_uInt16 i = nSectionItems - 1; i >= validItems; i-- )
+ g_lo_menu_remove_from_section( pLOMenu, nSection, i );
+
nSection++;
nItemPos = 0;
+ validItems = 0;
if ( nLOMenuSize <= nSection )
{
@@ -670,7 +684,8 @@ GtkSalMenu::~GtkSalMenu()
sal_Bool GtkSalMenu::VisibleMenuBar()
{
- return bDBusIsAvailable;
+// return bDBusIsAvailable;
+ return sal_False;
}
void GtkSalMenu::InsertItem( SalMenuItem* pSalMenuItem, unsigned nPos )
@@ -801,6 +816,16 @@ void GtkSalMenu::Deactivate( const gchar* aMenuCommand )
}
}
+sal_Bool GtkSalMenu::IsItemVisible( unsigned nPos )
+{
+ sal_Bool bVisible = sal_False;
+
+ if ( nPos < maItems.size() )
+ bVisible = ( ( GtkSalMenuItem* ) maItems[ nPos ])->mbVisible;
+
+ return bVisible;
+}
+
void GtkSalMenu::CheckItem( unsigned, sal_Bool )
{
}
@@ -809,6 +834,12 @@ void GtkSalMenu::EnableItem( unsigned, sal_Bool )
{
}
+void GtkSalMenu::ShowItem( unsigned nPos, sal_Bool bShow )
+{
+ if ( nPos < maItems.size() )
+ ( ( GtkSalMenuItem* ) maItems[ nPos ])->mbVisible = bShow;
+}
+
void GtkSalMenu::SetItemText( unsigned, SalMenuItem*, const rtl::OUString& )
{
}
@@ -842,6 +873,7 @@ void GtkSalMenu::Freeze()
GtkSalMenuItem::GtkSalMenuItem( const SalItemParams* pItemData ) :
mnId( pItemData->nId ),
mnType( pItemData->eType ),
+ mbVisible( sal_True ),
mpVCLMenu( pItemData->pMenu ),
mpParentMenu( NULL ),
mpSubMenu( NULL )
More information about the Libreoffice-commits
mailing list