summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx14
1 files changed, 9 insertions, 5 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index a291dafc7d44..bc7802987366 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -6459,12 +6459,13 @@ private:
}
#endif
//else older gtk3
- const int nMask = (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK);
-
GdkDeviceManager* pDeviceManager = gdk_display_get_device_manager(pDisplay);
GdkDevice* pPointer = gdk_device_manager_get_client_pointer(pDeviceManager);
- gdk_device_grab(pPointer, gtk_widget_get_window(GTK_WIDGET(m_pMenuHack)), GDK_OWNERSHIP_NONE,
- true, GdkEventMask(nMask), nullptr, gtk_get_current_event_time());
+ GdkWindow* pWindow = gtk_widget_get_window(GTK_WIDGET(m_pMenuHack));
+ guint32 nCurrentTime = gtk_get_current_event_time();
+ gdk_device_grab(pPointer, pWindow, GDK_OWNERSHIP_NONE, true, GDK_ALL_EVENTS_MASK, nullptr, nCurrentTime);
+ if (GdkDevice* pKeyboard = gdk_device_get_associated_device(pPointer))
+ gdk_device_grab(pKeyboard, pWindow, GDK_OWNERSHIP_NONE, true, GDK_ALL_EVENTS_MASK, nullptr, nCurrentTime);
}
void do_ungrab()
@@ -6481,7 +6482,10 @@ private:
//else older gtk3
GdkDeviceManager* pDeviceManager = gdk_display_get_device_manager(pDisplay);
GdkDevice* pPointer = gdk_device_manager_get_client_pointer(pDeviceManager);
- gdk_device_ungrab(pPointer, gtk_get_current_event_time());
+ guint32 nCurrentTime = gtk_get_current_event_time();
+ gdk_device_ungrab(pPointer, nCurrentTime);
+ if (GdkDevice* pKeyboard = gdk_device_get_associated_device(pPointer))
+ gdk_device_ungrab(pKeyboard, nCurrentTime);
}
void toggle_menu()