[Spice-devel] [PATCH spice-gtk v2 3/3] widget: Set cursor during construction
Pavel Grunt
pgrunt at redhat.com
Tue May 23 14:56:26 UTC 2017
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(display)),
- 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;
+ }
+
+ 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(display)),
+ 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
More information about the Spice-devel
mailing list