[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