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