diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-09-08 16:36:59 +0100 |
---|---|---|
committer | Maxim Monastirsky <momonasmon@gmail.com> | 2016-09-11 08:00:06 +0000 |
commit | 571c187f0610f59573b5e2285b6bfc9589236532 (patch) | |
tree | f922db682dfb9ee00c1393d920014229361c649b | |
parent | ebd72cfc297ecfe617e9112f977a8ca12c2cacee (diff) |
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 <carlosg@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
(cherry picked from commit d45d8ae3c51606eb1d9e63396a0eab13c8742907)
Reviewed-on: https://gerrit.libreoffice.org/28759
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com>
-rw-r--r-- | vcl/inc/unx/gtk/gtksalmenu.hxx | 1 | ||||
-rw-r--r-- | vcl/unx/gtk/gtksalmenu.cxx | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx index 90fcb7d95db1..08b4113cd5a7 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 2980ac06b06d..c891cf339e27 100644 --- a/vcl/unx/gtk/gtksalmenu.cxx +++ b/vcl/unx/gtk/gtksalmenu.cxx @@ -423,6 +423,7 @@ GtkSalMenu::GtkSalMenu( bool bMenuBar ) : mbMenuBar( bMenuBar ), mbNeedsUpdate( false ), mbReturnFocusToDocument( false ), + mbAddedGrab( false ), mpMenuBarContainerWidget( nullptr ), mpMenuBarWidget( nullptr ), mpCloseButton( nullptr ), @@ -602,6 +603,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 @@ -661,6 +667,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; |