include/vcl/menu.hxx | 1 + vcl/source/window/menu.cxx | 11 ++++++++--- vcl/unx/gtk/gtksalmenu.cxx | 23 ++++++++++++++++------- 3 files changed, 25 insertions(+), 10 deletions(-)
New commits: commit 3daa6c66eb9a4c334d6f72a8fd4bb09d7360a913 Author: Maxim Monastirsky <[email protected]> Date: Wed Mar 8 11:46:04 2017 +0200 Don't use SetDisplayable when enabling Unity mode because now it tracks the global menu too, but all we need here is to hide the in-window menubar widget. Change-Id: Ic3c8c20b88d37430e80b682333ca384bccc3f697 diff --git a/include/vcl/menu.hxx b/include/vcl/menu.hxx index f2202d1..3f57ae2 100644 --- a/include/vcl/menu.hxx +++ b/include/vcl/menu.hxx @@ -474,6 +474,7 @@ public: // if the menubar is unattached an empty rectangle is returned Rectangle GetMenuBarButtonRectPixel( sal_uInt16 nId ); void RemoveMenuBarButton( sal_uInt16 nId ); + void LayoutChanged(); }; inline MenuBar& MenuBar::operator=( const MenuBar& rMenu ) diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx index e76662b..76a6432 100644 --- a/vcl/source/window/menu.cxx +++ b/vcl/source/window/menu.cxx @@ -2477,6 +2477,13 @@ void MenuBar::ShowButtons( bool bClose, bool bFloat, bool bHide ) } } +void MenuBar::LayoutChanged() +{ + MenuBarWindow* pMenuWin = getMenuBarWindow(); + if (pMenuWin) + pMenuWin->LayoutChanged(); +} + void MenuBar::SetDisplayable( bool bDisplayable ) { if( bDisplayable != mbDisplayable ) @@ -2485,9 +2492,7 @@ void MenuBar::SetDisplayable( bool bDisplayable ) ImplGetSalMenu()->ShowMenuBar( bDisplayable ); mbDisplayable = bDisplayable; - MenuBarWindow* pMenuWin = getMenuBarWindow(); - if (pMenuWin) - pMenuWin->LayoutChanged(); + LayoutChanged(); } } diff --git a/vcl/unx/gtk/gtksalmenu.cxx b/vcl/unx/gtk/gtksalmenu.cxx index 1b5481b..e4d2eba 100644 --- a/vcl/unx/gtk/gtksalmenu.cxx +++ b/vcl/unx/gtk/gtksalmenu.cxx @@ -766,6 +766,9 @@ static gboolean MenuBarSignalKey(GtkWidget*, GdkEventKey* pEvent, gpointer menu) void GtkSalMenu::CreateMenuBarWidget() { #if GTK_CHECK_VERSION(3,0,0) + if (mpMenuBarContainerWidget) + return; + GtkGrid* pGrid = mpFrame->getTopLevelGridWidget(); mpMenuBarContainerWidget = gtk_grid_new(); @@ -1153,14 +1156,20 @@ void GtkSalMenu::Deactivate(const gchar* pCommand) void GtkSalMenu::EnableUnity(bool bEnable) { - if (bUnityMode != bEnable) - { - static_cast<MenuBar*>(mpVCLMenu.get())->SetDisplayable(!bEnable); - bUnityMode = bEnable; + bUnityMode = bEnable; + + MenuBar* pMenuBar(static_cast<MenuBar*>(mpVCLMenu.get())); - if (!bEnable) - ShowMenuBar(true); + if (bEnable) + DestroyMenuBarWidget(); + else + { + Update(); + if (pMenuBar->IsDisplayable()) + CreateMenuBarWidget(); } + + pMenuBar->LayoutChanged(); } void GtkSalMenu::ShowMenuBar( bool bVisible ) @@ -1173,7 +1182,7 @@ void GtkSalMenu::ShowMenuBar( bool bVisible ) else if (mpMenuModel && g_menu_model_get_n_items(G_MENU_MODEL(mpMenuModel)) > 0) g_lo_menu_remove(G_LO_MENU(mpMenuModel), 0); } - else if (bVisible && !mpMenuBarContainerWidget) + else if (bVisible) CreateMenuBarWidget(); else DestroyMenuBarWidget(); _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
