kbrown / rpms / libreoffice

Forked from rpms/libreoffice 2 years ago
Clone

Blame SOURCES/0001-Resolves-rhbz-1505379-gtk3-X-open-comboboxes-block-s.patch

dc0b3e
From 1e5e0f3ff363bdd0ed2d2e86113b42d6708f9be8 Mon Sep 17 00:00:00 2001
dc0b3e
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
dc0b3e
Date: Tue, 7 Nov 2017 13:26:27 +0000
dc0b3e
Subject: [PATCH] Resolves: rhbz#1505379 gtk3+X: open comboboxes block session
dc0b3e
dc0b3e
if there's none of our windows under the mouse when clicked then close the
dc0b3e
popup window.
dc0b3e
dc0b3e
There's similar code for gtk2, but using deprecated apis, do this again but
dc0b3e
with the recommended apis
dc0b3e
dc0b3e
Change-Id: I9d844d098d09d0109dcbbc06390562e83edda397
dc0b3e
---
dc0b3e
 vcl/unx/gtk3/gtk3gtkframe.cxx | 16 +++++++++++-----
dc0b3e
 1 file changed, 11 insertions(+), 5 deletions(-)
dc0b3e
dc0b3e
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
dc0b3e
index 1535f11..3b539a7 100644
dc0b3e
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
dc0b3e
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
dc0b3e
@@ -2608,12 +2608,18 @@ gboolean GtkSalFrame::signalButton( GtkWidget*, GdkEventButton* pEvent, gpointer
dc0b3e
 
dc0b3e
     vcl::DeletionListener aDel( pThis );
dc0b3e
 
dc0b3e
-    if (pThis->isFloatGrabWindow() && pEvent->window != widget_get_window(pThis->getMouseEventWidget()))
dc0b3e
+    if (pThis->isFloatGrabWindow())
dc0b3e
     {
dc0b3e
-        if (pEvent->type == GDK_BUTTON_PRESS)
dc0b3e
-            pThis->closePopup();
dc0b3e
-        else if (pEvent->type == GDK_BUTTON_RELEASE)
dc0b3e
-            return true;
dc0b3e
+        //rhbz#1505379 if the window that got the event isn't our one, or there's none
dc0b3e
+        //of our windows under the mouse then close this popup window
dc0b3e
+        if (pEvent->window != widget_get_window(pThis->getMouseEventWidget()) ||
dc0b3e
+            gdk_device_get_window_at_position(pEvent->device, nullptr, nullptr) == nullptr)
dc0b3e
+        {
dc0b3e
+            if (pEvent->type == GDK_BUTTON_PRESS)
dc0b3e
+                pThis->closePopup();
dc0b3e
+            else if (pEvent->type == GDK_BUTTON_RELEASE)
dc0b3e
+                return true;
dc0b3e
+        }
dc0b3e
     }
dc0b3e
 
dc0b3e
     if (!aDel.isDeleted())
dc0b3e
-- 
dc0b3e
2.9.5
dc0b3e