[Spice-devel] [PATCH spice-gtk v5 1/6] gtk: Use gdk_cursor_new_from_name
Pavel Grunt
pgrunt at redhat.com
Fri Feb 17 10:24:50 UTC 2017
gdk_cursor_new has been deprecated since Gtk 3.16
A difference is that the helper function for creating the cursor
returns early if the widget is not realized.
Also allow to hide the cursor under Wayland
Acked-by: Victor Toso <victortoso at redhat.com>
---
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..ea7b135 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 == NULL)
+ return 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);
+ }
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.1
More information about the Spice-devel
mailing list