Avoid GdkDeviceManager with GTK+4

This commit is contained in:
Paul Cornett
2017-12-17 10:31:28 -08:00
parent 3ee52836c6
commit ea5cd6dbfc
2 changed files with 61 additions and 6 deletions

View File

@@ -332,9 +332,15 @@ bool wxPopupTransientWindow::Show( bool show )
{ {
#ifdef __WXGTK3__ #ifdef __WXGTK3__
GdkDisplay* display = gtk_widget_get_display(m_widget); GdkDisplay* display = gtk_widget_get_display(m_widget);
#ifdef __WXGTK4__
gdk_seat_ungrab(gdk_display_get_default_seat(display));
#else
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
GdkDeviceManager* manager = gdk_display_get_device_manager(display); GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager); GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
gdk_device_ungrab(device, unsigned(GDK_CURRENT_TIME)); gdk_device_ungrab(device, unsigned(GDK_CURRENT_TIME));
wxGCC_WARNING_RESTORE()
#endif
#else #else
gdk_pointer_ungrab( (guint32)GDK_CURRENT_TIME ); gdk_pointer_ungrab( (guint32)GDK_CURRENT_TIME );
#endif #endif
@@ -364,18 +370,25 @@ bool wxPopupTransientWindow::Show( bool show )
{ {
gtk_grab_add( m_widget ); gtk_grab_add( m_widget );
GdkWindow* window = gtk_widget_get_window(m_widget);
#ifdef __WXGTK4__
GdkDisplay* display = gdk_window_get_display(window);
GdkSeat* seat = gdk_display_get_default_seat(display);
gdk_seat_grab(seat, window, GDK_SEAT_CAPABILITY_POINTER, false, NULL, NULL, NULL, 0);
#else
const GdkEventMask mask = GdkEventMask( const GdkEventMask mask = GdkEventMask(
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_RELEASE_MASK |
GDK_POINTER_MOTION_HINT_MASK | GDK_POINTER_MOTION_HINT_MASK |
GDK_POINTER_MOTION_MASK); GDK_POINTER_MOTION_MASK);
GdkWindow* window = gtk_widget_get_window(m_widget);
#ifdef __WXGTK3__ #ifdef __WXGTK3__
GdkDisplay* display = gdk_window_get_display(window); GdkDisplay* display = gdk_window_get_display(window);
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
GdkDeviceManager* manager = gdk_display_get_device_manager(display); GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager); GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
gdk_device_grab(device, window, gdk_device_grab(device, window,
GDK_OWNERSHIP_NONE, true, mask, NULL, unsigned(GDK_CURRENT_TIME)); GDK_OWNERSHIP_NONE, true, mask, NULL, unsigned(GDK_CURRENT_TIME));
wxGCC_WARNING_RESTORE()
#else #else
gdk_pointer_grab( window, true, gdk_pointer_grab( window, true,
mask, mask,
@@ -383,6 +396,7 @@ bool wxPopupTransientWindow::Show( bool show )
NULL, NULL,
(guint32)GDK_CURRENT_TIME ); (guint32)GDK_CURRENT_TIME );
#endif #endif
#endif // !__WXGTK4__
} }
#endif #endif

View File

@@ -2427,13 +2427,19 @@ wxMouseState wxGetMouseState()
gint y; gint y;
GdkModifierType mask; GdkModifierType mask;
GdkDisplay* display = gdk_window_get_display(wxGetTopLevelGDK()); GdkWindow* window = wxGetTopLevelGDK();
GdkDisplay* display = gdk_window_get_display(window);
#ifdef __WXGTK3__ #ifdef __WXGTK3__
#ifdef __WXGTK4__
GdkSeat* seat = gdk_display_get_default_seat(display);
GdkDevice* device = gdk_seat_get_pointer(seat);
#else
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
GdkDeviceManager* manager = gdk_display_get_device_manager(display); GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager); GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
GdkScreen* screen; wxGCC_WARNING_RESTORE()
gdk_device_get_position(device, &screen, &x, &y); #endif
GdkWindow* window = gdk_screen_get_root_window(screen); gdk_device_get_position(device, NULL, &x, &y);
gdk_device_get_state(device, window, NULL, &mask); gdk_device_get_state(device, window, NULL, &mask);
#else #else
gdk_display_get_pointer(display, NULL, &x, &y, &mask); gdk_display_get_pointer(display, NULL, &x, &y, &mask);
@@ -4831,8 +4837,16 @@ void wxWindowGTK::WarpPointer( int x, int y )
GdkDisplay* display = gtk_widget_get_display(m_widget); GdkDisplay* display = gtk_widget_get_display(m_widget);
GdkScreen* screen = gtk_widget_get_screen(m_widget); GdkScreen* screen = gtk_widget_get_screen(m_widget);
#ifdef __WXGTK3__ #ifdef __WXGTK3__
#ifdef __WXGTK4__
GdkSeat* seat = gdk_display_get_default_seat(display);
GdkDevice* device = gdk_seat_get_pointer(seat);
#else
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
GdkDeviceManager* manager = gdk_display_get_device_manager(display); GdkDeviceManager* manager = gdk_display_get_device_manager(display);
gdk_device_warp(gdk_device_manager_get_client_pointer(manager), screen, x, y); GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
wxGCC_WARNING_RESTORE()
#endif
gdk_device_warp(device, screen, x, y);
#else #else
#ifdef GDK_WINDOWING_X11 #ifdef GDK_WINDOWING_X11
XWarpPointer(GDK_DISPLAY_XDISPLAY(display), XWarpPointer(GDK_DISPLAY_XDISPLAY(display),
@@ -5768,6 +5782,11 @@ void wxWindowGTK::DoCaptureMouse()
wxCHECK_RET( window, wxT("CaptureMouse() failed") ); wxCHECK_RET( window, wxT("CaptureMouse() failed") );
#ifdef __WXGTK4__
GdkDisplay* display = gdk_window_get_display(window);
GdkSeat* seat = gdk_display_get_default_seat(display);
gdk_seat_grab(seat, window, GDK_SEAT_CAPABILITY_POINTER, false, NULL, NULL, NULL, 0);
#else
const GdkEventMask mask = GdkEventMask( const GdkEventMask mask = GdkEventMask(
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_RELEASE_MASK |
@@ -5775,11 +5794,13 @@ void wxWindowGTK::DoCaptureMouse()
GDK_POINTER_MOTION_MASK); GDK_POINTER_MOTION_MASK);
#ifdef __WXGTK3__ #ifdef __WXGTK3__
GdkDisplay* display = gdk_window_get_display(window); GdkDisplay* display = gdk_window_get_display(window);
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
GdkDeviceManager* manager = gdk_display_get_device_manager(display); GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager); GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
gdk_device_grab( gdk_device_grab(
device, window, GDK_OWNERSHIP_NONE, false, mask, device, window, GDK_OWNERSHIP_NONE, false, mask,
NULL, unsigned(GDK_CURRENT_TIME)); NULL, unsigned(GDK_CURRENT_TIME));
wxGCC_WARNING_RESTORE()
#else #else
gdk_pointer_grab( window, FALSE, gdk_pointer_grab( window, FALSE,
mask, mask,
@@ -5787,6 +5808,7 @@ void wxWindowGTK::DoCaptureMouse()
NULL, NULL,
(guint32)GDK_CURRENT_TIME ); (guint32)GDK_CURRENT_TIME );
#endif #endif
#endif // !__WXGTK4__
g_captureWindow = this; g_captureWindow = this;
g_captureWindowHasMouse = true; g_captureWindowHasMouse = true;
} }
@@ -5810,9 +5832,15 @@ void wxWindowGTK::DoReleaseMouse()
#ifdef __WXGTK3__ #ifdef __WXGTK3__
GdkDisplay* display = gdk_window_get_display(window); GdkDisplay* display = gdk_window_get_display(window);
#ifdef __WXGTK4__
gdk_seat_ungrab(gdk_display_get_default_seat(display));
#else
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
GdkDeviceManager* manager = gdk_display_get_device_manager(display); GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager); GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
gdk_device_ungrab(device, unsigned(GDK_CURRENT_TIME)); gdk_device_ungrab(device, unsigned(GDK_CURRENT_TIME));
wxGCC_WARNING_RESTORE()
#endif
#else #else
gdk_pointer_ungrab ( (guint32)GDK_CURRENT_TIME ); gdk_pointer_ungrab ( (guint32)GDK_CURRENT_TIME );
#endif #endif
@@ -5822,9 +5850,15 @@ void wxWindowGTK::GTKReleaseMouseAndNotify()
{ {
GdkDisplay* display = gtk_widget_get_display(m_widget); GdkDisplay* display = gtk_widget_get_display(m_widget);
#ifdef __WXGTK3__ #ifdef __WXGTK3__
#ifdef __WXGTK4__
gdk_seat_ungrab(gdk_display_get_default_seat(display));
#else
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
GdkDeviceManager* manager = gdk_display_get_device_manager(display); GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager); GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
gdk_device_ungrab(device, unsigned(GDK_CURRENT_TIME)); gdk_device_ungrab(device, unsigned(GDK_CURRENT_TIME));
wxGCC_WARNING_RESTORE()
#endif
#else #else
gdk_display_pointer_ungrab(display, unsigned(GDK_CURRENT_TIME)); gdk_display_pointer_ungrab(display, unsigned(GDK_CURRENT_TIME));
#endif #endif
@@ -6067,8 +6101,15 @@ void wxGetMousePosition(int* x, int* y)
{ {
GdkDisplay* display = gdk_window_get_display(wxGetTopLevelGDK()); GdkDisplay* display = gdk_window_get_display(wxGetTopLevelGDK());
#ifdef __WXGTK3__ #ifdef __WXGTK3__
#ifdef __WXGTK4__
GdkSeat* seat = gdk_display_get_default_seat(display);
GdkDevice* device = gdk_seat_get_pointer(seat);
#else
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
GdkDeviceManager* manager = gdk_display_get_device_manager(display); GdkDeviceManager* manager = gdk_display_get_device_manager(display);
GdkDevice* device = gdk_device_manager_get_client_pointer(manager); GdkDevice* device = gdk_device_manager_get_client_pointer(manager);
wxGCC_WARNING_RESTORE()
#endif
gdk_device_get_position(device, NULL, x, y); gdk_device_get_position(device, NULL, x, y);
#else #else
gdk_display_get_pointer(display, NULL, x, y, NULL); gdk_display_get_pointer(display, NULL, x, y, NULL);