Hi, On Thu, May 25, 2017 at 03:13:13PM +0200, Pavel Grunt wrote: > On Wed, 2017-05-24 at 09:22 +0200, Victor Toso wrote: > > On Tue, May 23, 2017 at 04:56:26PM +0200, Pavel Grunt wrote: > > > In a multimonitor environment can easily happen that a cursor is > > > set > > > before some of the SpiceDisplays are created. IOW the first > > > created > > > SpiceDisplay has the cursor but others don't. > > > > > > To avoid the issue set the initial cursor using the "cursor" > > > property > > > of the SpiceCursorChannel. > > > > > > Resolves: > > > https://bugzilla.redhat.com/show_bug.cgi?id=1411380 > > > --- > > > v2: changed to "early return" > > > --- > > > src/spice-widget.c | 36 +++++++++++++++++++----------------- > > > 1 file changed, 19 insertions(+), 17 deletions(-) > > > > > > diff --git a/src/spice-widget.c b/src/spice-widget.c > > > index b1c8ab1..a117484 100644 > > > --- a/src/spice-widget.c > > > +++ b/src/spice-widget.c > > > @@ -2646,23 +2646,24 @@ static void cursor_set(SpiceCursorChannel > > > *channel, > > > cursor_invalidate(display); > > > > > > g_object_get(G_OBJECT(channel), "cursor", &cursor_shape, > > > NULL); > > > - if (cursor_shape != NULL && cursor_shape->data != NULL) { > > > - g_clear_object(&d->mouse_pixbuf); > > > - d->mouse_pixbuf = gdk_pixbuf_new_from_data(cursor_shape- > > > >data, > > > - GDK_COLORSPACE > > > _RGB, > > > - TRUE, 8, > > > - cursor_shape- > > > >width, > > > - cursor_shape- > > > >height, > > > - cursor_shape- > > > >width * 4, > > > - NULL, NULL); > > > - d->mouse_hotspot.x = cursor_shape->hot_spot_x; > > > - d->mouse_hotspot.y = cursor_shape->hot_spot_y; > > > - cursor = > > > gdk_cursor_new_from_pixbuf(gtk_widget_get_display(GTK_WIDGET(displ > > > ay)), > > > - d->mouse_pixbuf, > > > - d->mouse_hotspot.x, > > > - d->mouse_hotspot.y); > > > - } else > > > - g_warn_if_reached(); > > > + if (G_UNLIKELY(cursor_shape == NULL || cursor_shape->data == > > > NULL)) { > > > + return; > > > + } > > > > Is it unlikely? Do we always receive cursor->data? > It is unlikely, i've never seen this warning. I change it to return, > because it is now called in the widget construction. I can change it > back if it is preferred. I think it is fine to keep the return :) Cheers, > > > > > Before it was g_warn_if_reached() which means we would very likely > > be > > calling update_mouse_pointer() and cursor_invalidate(). Not calling > > this functions now is part of the solution to rhbz#1411380? If so, I > > would mention it in the commit log too. > > > > Acked-by: Victor Toso <victortoso@xxxxxxxxxx> > > > > > + > > > + g_clear_object(&d->mouse_pixbuf); > > > + d->mouse_pixbuf = gdk_pixbuf_new_from_data(cursor_shape- > > > >data, > > > + GDK_COLORSPACE_RGB > > > , > > > + TRUE, 8, > > > + cursor_shape- > > > >width, > > > + cursor_shape- > > > >height, > > > + cursor_shape- > > > >width * 4, > > > + NULL, NULL); > > > + d->mouse_hotspot.x = cursor_shape->hot_spot_x; > > > + d->mouse_hotspot.y = cursor_shape->hot_spot_y; > > > + cursor = > > > gdk_cursor_new_from_pixbuf(gtk_widget_get_display(GTK_WIDGET(displ > > > ay)), > > > + d->mouse_pixbuf, > > > + d->mouse_hotspot.x, > > > + d->mouse_hotspot.y); > > > s > > > #if HAVE_EGL > > > if (egl_enabled(d)) > > > @@ -2970,6 +2971,7 @@ static void channel_new(SpiceSession *s, > > > SpiceChannel *channel, gpointer data) > > > spice_g_signal_connect_object(channel, "cursor-reset", > > > G_CALLBACK(cursor_reset), > > > display, 0); > > > spice_channel_connect(channel); > > > + cursor_set(d->cursor, NULL, display); > > > return; > > > } > > > > > > -- > > > 2.13.0 > > > > > > _______________________________________________ > > > Spice-devel mailing list > > > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > > > https://lists.freedesktop.org/mailman/listinfo/spice-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel