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. > --- > 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 > + > + 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 Acked-by: Victor Toso <victort...@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 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/spice-devel
signature.asc
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel