vcl/inc/unx/gtk/gtksalmenu.hxx |    1 +
 vcl/unx/gtk/gtksalmenu.cxx     |    8 ++++++++
 2 files changed, 9 insertions(+)

New commits:
commit d45d8ae3c51606eb1d9e63396a0eab13c8742907
Author: Caolán McNamara <caol...@redhat.com>
Date:   Thu Sep 8 16:36:59 2016 +0100

    Resolves: tdf#101881 gtk3 3.18 menubar doesn't grab keyboard...
    
    the same way gtk3 3.20 does with gtk_grab_add, so on gtk_menu_shell_deselect
    the keyboard focus doesn't remain in the menubar.
    
    bisecting gtk itself I find...
    
    commit 5cbbb90e311d95192d1b68ba89c3190cdb652868
    Author: Carlos Garnacho <carl...@gnome.org>
    Date:   Thu Nov 26 19:54:31 2015 +0100
    
        GtkCellRendererAccel: Use gdk_seat_grab()
    
        https://bugzilla.gnome.org/show_bug.cgi?id=759309
    
    is the commit that makes it do what I want, so add an extra
    gtk_grab_add/gtk_grab_remove around our entry and exit of the menubar
    
    Change-Id: I5bf09834b4e1a14d30403208d03b3abd28a382a8

diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx
index b6c1042..48e9373 100644
--- a/vcl/inc/unx/gtk/gtksalmenu.hxx
+++ b/vcl/inc/unx/gtk/gtksalmenu.hxx
@@ -48,6 +48,7 @@ private:
     bool                            mbMenuBar;
     bool                            mbNeedsUpdate;
     bool                            mbReturnFocusToDocument;
+    bool                            mbAddedGrab;
     GtkWidget*                      mpMenuBarContainerWidget;
     GtkWidget*                      mpMenuBarWidget;
     GtkWidget*                      mpCloseButton;
diff --git a/vcl/unx/gtk/gtksalmenu.cxx b/vcl/unx/gtk/gtksalmenu.cxx
index d75e7bc..604a418 100644
--- a/vcl/unx/gtk/gtksalmenu.cxx
+++ b/vcl/unx/gtk/gtksalmenu.cxx
@@ -421,6 +421,7 @@ GtkSalMenu::GtkSalMenu( bool bMenuBar ) :
     mbMenuBar( bMenuBar ),
     mbNeedsUpdate( false ),
     mbReturnFocusToDocument( false ),
+    mbAddedGrab( false ),
     mpMenuBarContainerWidget( nullptr ),
     mpMenuBarWidget( nullptr ),
     mpCloseButton( nullptr ),
@@ -599,6 +600,11 @@ void GtkSalMenu::ShowCloseButton(bool bShow)
 //focus to the next pane by itself.
 void GtkSalMenu::ReturnFocus()
 {
+    if (mbAddedGrab)
+    {
+        gtk_grab_remove(mpMenuBarWidget);
+        mbAddedGrab = false;
+    }
     if (!mbReturnFocusToDocument)
         gtk_widget_grab_focus(GTK_WIDGET(mpFrame->getEventBox()));
     else
@@ -658,6 +664,8 @@ bool GtkSalMenu::TakeFocus()
 
     //this pairing results in a menubar with keyboard focus with no menus
     //auto-popped down
+    gtk_grab_add(mpMenuBarWidget);
+    mbAddedGrab = true;
     gtk_menu_shell_select_first(GTK_MENU_SHELL(mpMenuBarWidget), false);
     gtk_menu_shell_deselect(GTK_MENU_SHELL(mpMenuBarWidget));
     mbReturnFocusToDocument = true;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to