X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/25fe875df65f98e7d1af0928995a615fb5559c91..1274add43f7e746721102ae6f206c8b0f746271c:/src/common/popupcmn.cpp diff --git a/src/common/popupcmn.cpp b/src/common/popupcmn.cpp index 4d94eaa688..97fdb8ccb4 100644 --- a/src/common/popupcmn.cpp +++ b/src/common/popupcmn.cpp @@ -323,7 +323,14 @@ bool wxPopupTransientWindow::Show( bool show ) #ifdef __WXGTK__ if (!show) { +#ifdef __WXGTK3__ + GdkDisplay* display = gtk_widget_get_display(m_widget); + GdkDeviceManager* manager = gdk_display_get_device_manager(display); + GdkDevice* device = gdk_device_manager_get_client_pointer(manager); + gdk_device_ungrab(device, unsigned(GDK_CURRENT_TIME)); +#else gdk_pointer_ungrab( (guint32)GDK_CURRENT_TIME ); +#endif gtk_grab_remove( m_widget ); } @@ -350,15 +357,25 @@ bool wxPopupTransientWindow::Show( bool show ) { gtk_grab_add( m_widget ); - gdk_pointer_grab( gtk_widget_get_window(m_widget), true, - (GdkEventMask) - (GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_POINTER_MOTION_HINT_MASK | - GDK_POINTER_MOTION_MASK), + const GdkEventMask mask = GdkEventMask( + GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_POINTER_MOTION_HINT_MASK | + GDK_POINTER_MOTION_MASK); + GdkWindow* window = gtk_widget_get_window(m_widget); +#ifdef __WXGTK3__ + GdkDisplay* display = gdk_window_get_display(window); + GdkDeviceManager* manager = gdk_display_get_device_manager(display); + GdkDevice* device = gdk_device_manager_get_client_pointer(manager); + gdk_device_grab(device, window, + GDK_OWNERSHIP_NONE, false, mask, NULL, unsigned(GDK_CURRENT_TIME)); +#else + gdk_pointer_grab( window, true, + mask, NULL, NULL, (guint32)GDK_CURRENT_TIME ); +#endif } #endif