[Spice-devel] [PATCH spice-gtk v3 1/6] gtk: Use gdk_cursor_new_from_name
Pavel Grunt
pgrunt at redhat.com
Mon Jan 23 11:40:47 UTC 2017
On Mon, 2017-01-23 at 12:27 +0100, Victor Toso wrote:
> Hi,
>
> On Fri, Jan 20, 2017 at 04:53:48PM +0100, Pavel Grunt wrote:
> > Create the cursor when the widget is realized
> >
> > Also make the cursor work under Wayland
>
> Please include the information regarding the gdk_cursor_new() being
> deprecated since 3.16 too.
ok
>
> > ---
> > src/spice-widget.c | 24 ++++++++++++++++--------
> > 1 file changed, 16 insertions(+), 8 deletions(-)
> >
> > diff --git a/src/spice-widget.c b/src/spice-widget.c
> > index 72fbbc8..7678c12 100644
> > --- a/src/spice-widget.c
> > +++ b/src/spice-widget.c
> > @@ -460,12 +460,19 @@ static void spice_display_finalize(GObject
> > *obj)
> > G_OBJECT_CLASS(spice_display_parent_class)->finalize(obj);
> > }
> >
> > -static GdkCursor* get_blank_cursor(void)
> > +static GdkCursor* spice_display_get_blank_cursor(SpiceDisplay
> > *display)
> > {
> > - if (g_getenv("SPICE_DEBUG_CURSOR"))
> > - return gdk_cursor_new(GDK_DOT);
> > + GdkDisplay *gdk_display;
> > + const gchar *cursor_name;
> > + GdkWindow *gdk_window =
> > GDK_WINDOW(gtk_widget_get_window(GTK_WIDGET(display)));
> >
> > - return gdk_cursor_new(GDK_BLANK_CURSOR);
> > + if (!gdk_window)
> > + return NULL;
>
> We might want to warn before returning NULL
>
I did it intentionally (original code didn't warn). We only need the
cursor when there is a display. So I think it is ok, otherwise we
would have to make sure it would not be called without a display.
> > +
> > + gdk_display = gdk_window_get_display(gdk_window);
> > + cursor_name = g_getenv("SPICE_DEBUG_CURSOR") ? "crosshair" :
> > "none";
> > +
> > + return gdk_cursor_new_from_name(gdk_display, cursor_name);
> > }
> >
> > static gboolean grab_broken(SpiceDisplay *self,
> > GdkEventGrabBroken *event,
> > @@ -676,7 +683,6 @@ G_GNUC_END_IGNORE_DEPRECATIONS
> >
> > d->grabseq =
> > spice_grab_sequence_new_from_string("Control_L+Alt_L");
> > d->activeseq = g_new0(gboolean, d->grabseq->nkeysyms);
> > - d->mouse_cursor = get_blank_cursor();
> > }
> >
> > static GObject *
> > @@ -986,7 +992,7 @@ static gboolean do_pointer_grab(SpiceDisplay
> > *display)
> > SpiceDisplayPrivate *d = display->priv;
> > GdkWindow *window =
> > GDK_WINDOW(gtk_widget_get_window(GTK_WIDGET(display)));
> > GdkGrabStatus status;
> > - GdkCursor *blank = get_blank_cursor();
> > + GdkCursor *blank = spice_display_get_blank_cursor(display);
> > gboolean grab_successful = FALSE;
> >
> > if (!gtk_widget_get_realized(GTK_WIDGET(display)))
> > @@ -2579,7 +2585,9 @@ static void cursor_set(SpiceCursorChannel
> > *channel,
> > }
> > }
> >
> > - g_object_unref(d->mouse_cursor);
> > + if (d->mouse_cursor != NULL) {
> > + g_object_unref(d->mouse_cursor);
> > + }
>
> I would prefer g_clear_object(&d->mouse_cursor) but still
g_clear_object assigns NULL, it is not needed - we want to assign a
new cursor
>
> Acked-by: Victor Toso <victortoso at redhat.com>
> (Tested on X11 with client/server mouse mode)
>
> > d->mouse_cursor = cursor;
> >
> > update_mouse_pointer(display);
> > @@ -2596,7 +2604,7 @@ static void cursor_hide(SpiceCursorChannel
> > *channel, gpointer data)
> >
> > cursor_invalidate(display);
> > d->show_cursor = d->mouse_cursor;
> > - d->mouse_cursor = get_blank_cursor();
> > + d->mouse_cursor = spice_display_get_blank_cursor(display);
> > update_mouse_pointer(display);
> > }
> >
> > --
> > 2.11.0
Thanks,
Pavel
> >
> > _______________________________________________
> > Spice-devel mailing list
> > Spice-devel at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/spice-devel
More information about the Spice-devel
mailing list