[Spice-devel] [PATCH spice-gtk v4 2/6] gtk: Use gdk_window_get_device_position

Christophe Fergeau cfergeau at redhat.com
Thu Feb 16 16:05:49 UTC 2017


On Tue, Feb 14, 2017 at 07:05:14PM +0100, Pavel Grunt wrote:
> gdk_window_get_pointer has been deprecated since Gtk 3.0
> 
> Introduce helper functions for getting the display's pointing
> device and modifiers to keep the update_mouse_mode simple
> ---
>  src/spice-widget.c | 42 ++++++++++++++++++++++++++++++++----------
>  1 file changed, 32 insertions(+), 10 deletions(-)
> 
> diff --git a/src/spice-widget.c b/src/spice-widget.c
> index 7678c12..c39373c 100644
> --- a/src/spice-widget.c
> +++ b/src/spice-widget.c
> @@ -2361,11 +2361,40 @@ 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)
>  
> +static GdkDevice *gdk_window_get_pointing_device(GdkWindow *window)

Probably best if we use our own namespace here (spice_gdk_window_xxx)

> +{
> +    GdkDisplay *gdk_display = gdk_window_get_display(window);
> +    G_GNUC_BEGIN_IGNORE_DEPRECATIONS
> +#if GTK_CHECK_VERSION(3, 20, 0)
> +    return gdk_seat_get_pointer(gdk_display_get_default_seat(gdk_display));
> +#else
> +    return gdk_device_manager_get_client_pointer(gdk_display_get_device_manager(gdk_display));
> +#endif
> +    G_GNUC_END_IGNORE_DEPRECATIONS

Do we still need the G_GNUC_{BEGIN,END}_IGNORE_DEPRECATIONS guards?

Acked-by: Christophe Fergeau <cfergeau at redhat.com>

Christophe

> +}
> +
> +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;
> +    }
> +
> +    gdk_window_get_device_position(window,
> +                                   gdk_window_get_pointing_device(window),
> +                                   NULL,
> +                                   NULL,
> +                                   &modifiers);
> +
> +    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);
> @@ -2378,15 +2407,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:
> -- 
> 2.11.1
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20170216/110bedf4/attachment-0001.sig>


More information about the Spice-devel mailing list