[Spice-devel] [PATCH spice-gtk 2/5] gtk: Avoid deprecated gdk_window_get_pointer
Frediano Ziglio
fziglio at redhat.com
Mon Dec 19 09:25:53 UTC 2016
>
> ---
> 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
More information about the Spice-devel
mailing list