Blob Blame History Raw
From 1e5e0f3ff363bdd0ed2d2e86113b42d6708f9be8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Tue, 7 Nov 2017 13:26:27 +0000
Subject: [PATCH] Resolves: rhbz#1505379 gtk3+X: open comboboxes block session

if there's none of our windows under the mouse when clicked then close the
popup window.

There's similar code for gtk2, but using deprecated apis, do this again but
with the recommended apis

Change-Id: I9d844d098d09d0109dcbbc06390562e83edda397
---
 vcl/unx/gtk3/gtk3gtkframe.cxx | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index 1535f11..3b539a7 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -2608,12 +2608,18 @@ gboolean GtkSalFrame::signalButton( GtkWidget*, GdkEventButton* pEvent, gpointer
 
     vcl::DeletionListener aDel( pThis );
 
-    if (pThis->isFloatGrabWindow() && pEvent->window != widget_get_window(pThis->getMouseEventWidget()))
+    if (pThis->isFloatGrabWindow())
     {
-        if (pEvent->type == GDK_BUTTON_PRESS)
-            pThis->closePopup();
-        else if (pEvent->type == GDK_BUTTON_RELEASE)
-            return true;
+        //rhbz#1505379 if the window that got the event isn't our one, or there's none
+        //of our windows under the mouse then close this popup window
+        if (pEvent->window != widget_get_window(pThis->getMouseEventWidget()) ||
+            gdk_device_get_window_at_position(pEvent->device, nullptr, nullptr) == nullptr)
+        {
+            if (pEvent->type == GDK_BUTTON_PRESS)
+                pThis->closePopup();
+            else if (pEvent->type == GDK_BUTTON_RELEASE)
+                return true;
+        }
     }
 
     if (!aDel.isDeleted())
-- 
2.9.5