caolanm pushed to libreoffice (master). "Resolves: gnome#745909 grab/ungrab keyboard for menus"

notifications at fedoraproject.org notifications at fedoraproject.org
Fri Mar 27 15:34:42 UTC 2015


>From 37d05d248e80432556e1942a896b9a63e1a99649 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm at redhat.com>
Date: Fri, 27 Mar 2015 15:32:37 +0000
Subject: Resolves: gnome#745909 grab/ungrab keyboard for menus


diff --git a/0001-gnome-745909-grab-ungrab-keyboard-for-menus.patch b/0001-gnome-745909-grab-ungrab-keyboard-for-menus.patch
new file mode 100644
index 0000000..2932cfb
--- /dev/null
+++ b/0001-gnome-745909-grab-ungrab-keyboard-for-menus.patch
@@ -0,0 +1,100 @@
+From 27e0fee7da99f3df722668d132bc034bef421514 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm at redhat.com>
+Date: Fri, 27 Mar 2015 15:28:28 +0000
+Subject: [PATCH] gnome#745909 grab/ungrab keyboard for menus
+
+Change-Id: Id0593e1c9af79084ae798f26a0be37c57d254227
+---
+ vcl/inc/unx/gtk/gtkframe.hxx       |  3 ++-
+ vcl/unx/gtk/window/gtksalframe.cxx | 39 ++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 39 insertions(+), 3 deletions(-)
+
+diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
+index d514411..2eb0634 100644
+--- a/vcl/inc/unx/gtk/gtkframe.hxx
++++ b/vcl/inc/unx/gtk/gtkframe.hxx
+@@ -328,7 +328,8 @@ public:
+     // and false else; if true was returned the event should
+     // be swallowed
+     bool Dispatch( const XEvent* pEvent );
+-    void grabPointer( bool bGrab, bool bOwnerEvents = false );
++    void grabPointer(bool bGrab, bool bOwnerEvents = false);
++    void grabKeyboard(bool bGrab);
+ 
+     GtkSalDisplay*  getDisplay();
+     GdkDisplay*     getGdkDisplay();
+diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx
+index aa94c26..1b8bdc5 100644
+--- a/vcl/unx/gtk/window/gtksalframe.cxx
++++ b/vcl/unx/gtk/window/gtksalframe.cxx
+@@ -1864,7 +1864,13 @@ void GtkSalFrame::Show( bool bVisible, bool bNoActivate )
+             {
+                 m_nFloats++;
+                 if( ! getDisplay()->GetCaptureFrame() && m_nFloats == 1 )
+-                    grabPointer( true, true );
++                {
++                    grabPointer(true, true);
++                    GtkSalFrame *pKeyboardFrame = this;
++                    while (pKeyboardFrame->m_pParent)
++                        pKeyboardFrame = pKeyboardFrame->m_pParent;
++                    pKeyboardFrame->grabKeyboard(true);
++                }
+                 // #i44068# reset parent's IM context
+                 if( m_pParent )
+                     m_pParent->EndExtTextInput(0);
+@@ -1878,7 +1884,13 @@ void GtkSalFrame::Show( bool bVisible, bool bNoActivate )
+             {
+                 m_nFloats--;
+                 if( ! getDisplay()->GetCaptureFrame() && m_nFloats == 0)
+-                    grabPointer( false );
++                {
++                    GtkSalFrame *pKeyboardFrame = this;
++                    while (pKeyboardFrame->m_pParent)
++                        pKeyboardFrame = pKeyboardFrame->m_pParent;
++                    pKeyboardFrame->grabKeyboard(false);
++                    grabPointer(false);
++                }
+             }
+             gtk_widget_hide( m_pWindow );
+             if( m_pIMHandler )
+@@ -2762,7 +2774,9 @@ void GtkSalFrame::grabPointer( bool bGrab, bool bOwnerEvents )
+         {
+             // Two GdkDisplays may be open
+             if( !pEnv || !*pEnv )
++            {
+                 gdk_display_pointer_ungrab( getGdkDisplay(), GDK_CURRENT_TIME);
++            }
+         }
+     }
+ #else
+@@ -2771,6 +2785,27 @@ void GtkSalFrame::grabPointer( bool bGrab, bool bOwnerEvents )
+ #endif
+ }
+ 
++void GtkSalFrame::grabKeyboard( bool bGrab )
++{
++#if !GTK_CHECK_VERSION(3,0,0)
++    if( m_pWindow )
++    {
++        if( bGrab )
++        {
++            gdk_keyboard_grab(widget_get_window(m_pWindow), true,
++                              GDK_CURRENT_TIME);
++        }
++        else
++        {
++            gdk_keyboard_ungrab(GDK_CURRENT_TIME);
++        }
++    }
++#else
++    (void)bGrab;
++    //FIXME: No GrabKeyboard implementation for gtk3 ...
++#endif
++}
++
+ void GtkSalFrame::CaptureMouse( bool bCapture )
+ {
+     getDisplay()->CaptureMouse( bCapture ? this : NULL );
+-- 
+1.9.3
+
diff --git a/libreoffice.spec b/libreoffice.spec
index c29993d..79e6aae 100644
--- a/libreoffice.spec
+++ b/libreoffice.spec
@@ -320,6 +320,7 @@ Patch23: 0002-propagate-user-set-CFLAGS-to-build.patch
 Patch24: 0001-gdk-pixbuf-xlib-2.0-gdk-pixbuf-2.0.patch
 Patch25: 0001-Resolves-rhbz-1204244-group-sdb-windows-together-as-.patch
 Patch26: 0001-Resolves-tdf-90256-repair-invalid-docking-positions.patch
+Patch27: 0001-gnome-745909-grab-ungrab-keyboard-for-menus.patch
 
 %define instdir %{_libdir}
 %define baseinstdir %{instdir}/libreoffice
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/libreoffice.git/commit/?h=master&id=37d05d248e80432556e1942a896b9a63e1a99649


More information about the scm-commits mailing list