> > --- > src/spice-widget.c | 46 ++++++++++++++++++++++++++++++++++++---------- > 1 file changed, 36 insertions(+), 10 deletions(-) > > diff --git a/src/spice-widget.c b/src/spice-widget.c > index a27f5a2..a3d6526 100644 > --- a/src/spice-widget.c > +++ b/src/spice-widget.c > @@ -2355,11 +2355,44 @@ static void > spice_display_class_init(SpiceDisplayClass *klass) > #define SPICE_GDK_BUTTONS_MASK \ > (GDK_BUTTON1_MASK|GDK_BUTTON2_MASK|GDK_BUTTON3_MASK|GDK_BUTTON4_MASK|GDK_BUTTON5_MASK) > > +#if GTK_CHECK_VERSION(3, 20, 0) > +static GdkSeat *spice_display_get_default_seat(SpiceDisplay *display) > +{ > + GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(display)); > + GdkDisplay *gdk_display = gdk_window_get_display(window); > + G_GNUC_BEGIN_IGNORE_DEPRECATIONS > + return gdk_display_get_default_seat(gdk_display); > + G_GNUC_END_IGNORE_DEPRECATIONS > +} > +#endif > + > +static GdkModifierType spice_display_get_modifiers_state(SpiceDisplay > *display) > +{ > + GdkModifierType modifiers; > + GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(display)); > + > + if (window == NULL) { > + return 0; > + } > + > +#if GTK_CHECK_VERSION(3, 20, 0) > + G_GNUC_BEGIN_IGNORE_DEPRECATIONS > + gdk_window_get_device_position(window, > + > gdk_seat_get_pointer(spice_display_get_default_seat(display)), > + NULL, > + NULL, > + &modifiers); > + G_GNUC_END_IGNORE_DEPRECATIONS > +#else > + gdk_window_get_pointer(window, NULL, NULL, &modifiers); > +#endif Why we need to call gdk_seat_get_pointer at all? We don't support 2.x anymore and gdk_seat_get_pointer was deprecated from 3.0 so we should just move to gdk_window_get_device_position. Is it not possible to get the device from display/window ? Also this code compiled with Gdk < 3.20 will trigger a deprecated warning calling gdk_window_get_pointer witch is the opposite of the rationale. I think part of the issue is that you started using gdk_display_get_default_seat to avoid gdk_display_get_device_manager deprecation warning but the rationale then is misleading, you should start using gdk_window_get_device_position always with an helper to get the device supporting both Gdk < 3.20 and Gdk >= 3.20. > + return modifiers; > +} > + > static void update_mouse_mode(SpiceChannel *channel, gpointer data) > { > SpiceDisplay *display = data; > SpiceDisplayPrivate *d = display->priv; > - GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(display)); > > g_object_get(channel, "mouse-mode", &d->mouse_mode, NULL); > SPICE_DEBUG("mouse mode %u", d->mouse_mode); > @@ -2372,15 +2405,8 @@ static void update_mouse_mode(SpiceChannel *channel, > gpointer data) > d->mouse_guest_x = -1; > d->mouse_guest_y = -1; > > - if (window != NULL) { > - GdkModifierType modifiers; > - /* FIXME: gdk_window_get_pointer() is deprecated */ > - G_GNUC_BEGIN_IGNORE_DEPRECATIONS > - gdk_window_get_pointer(window, NULL, NULL, &modifiers); > - G_GNUC_END_IGNORE_DEPRECATIONS > - > - if (modifiers & SPICE_GDK_BUTTONS_MASK) > - try_mouse_grab(display); > + if (spice_display_get_modifiers_state(display) & > SPICE_GDK_BUTTONS_MASK) { > + try_mouse_grab(display); > } > break; > default: Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel