summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-09-08 16:36:59 +0100
committerMaxim Monastirsky <momonasmon@gmail.com>2016-09-11 08:00:06 +0000
commit571c187f0610f59573b5e2285b6bfc9589236532 (patch)
treef922db682dfb9ee00c1393d920014229361c649b
parentebd72cfc297ecfe617e9112f977a8ca12c2cacee (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.hxx1
-rw-r--r--vcl/unx/gtk/gtksalmenu.cxx8
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;