[Spice-devel] [PATCH spice-gtk 2/5] gtk: Avoid deprecated gdk_window_get_pointer

Pavel Grunt pgrunt at redhat.com
Mon Dec 19 11:23:41 UTC 2016


Hi Frediano,

On Mon, 2016-12-19 at 04:25 -0500, Frediano Ziglio wrote:
> > 
> > ---
> >  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_BUTTO
> > N4_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 ?
If we consider deprecated functions than it is possible to get the
device only from the seat

> 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.
It is not my rationale. I am more worried with the code not compiling
using gtk master.
Deprecation warnings are not considered as error since the commit
f8e0516ba7f6dcc8b27e02e80fd6f3d23a03e816

> I think part of the issue is that you started using
> gdk_display_get_default_seat to avoid gdk_display_get_device_manager

I don't like the idea of introducing the usage of deprecated functions
to the current code.

> 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.
okay

Pavel
> 
> > +    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