From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42449) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VqBkp-0003Ww-Vj for qemu-devel@nongnu.org; Mon, 09 Dec 2013 20:04:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VqBkf-00080g-IZ for qemu-devel@nongnu.org; Mon, 09 Dec 2013 20:04:51 -0500 Received: from mx1.redhat.com ([209.132.183.28]:39042) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VqBkf-00080X-96 for qemu-devel@nongnu.org; Mon, 09 Dec 2013 20:04:41 -0500 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id rBA14esE030398 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 9 Dec 2013 20:04:40 -0500 Received: from dreadlord-bne-redhat-com.bne.redhat.com (dhcp-40-7.bne.redhat.com [10.64.40.7]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id rBA14aej015483 for ; Mon, 9 Dec 2013 20:04:39 -0500 From: Dave Airlie Date: Tue, 10 Dec 2013 11:04:34 +1000 Message-Id: <1386637474-8165-3-git-send-email-airlied@gmail.com> In-Reply-To: <1386637474-8165-1-git-send-email-airlied@gmail.com> References: <1386637474-8165-1-git-send-email-airlied@gmail.com> Subject: [Qemu-devel] [PATCH 2/2] gtk: respect cursor visibility List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org From: Dave Airlie If the guest asks for no cursor, switch gtk to using the null cursor. Signed-off-by: Dave Airlie --- ui/gtk.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index 2abf289..f60e66f 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -158,6 +158,8 @@ typedef struct GtkDisplayState bool external_pause_update; bool modifier_pressed[ARRAY_SIZE(modifier_keycode)]; + + GdkCursor *current_cursor; } GtkDisplayState; static GtkDisplayState *global_state; @@ -338,6 +340,11 @@ static void gd_mouse_set(DisplayChangeListener *dcl, GdkDeviceManager *mgr; gint x_root, y_root; + if (!visible) + gdk_window_set_cursor(gtk_widget_get_window(s->drawing_area), s->null_cursor); + else + gdk_window_set_cursor(gtk_widget_get_window(s->drawing_area), s->current_cursor); + if (kbd_mouse_is_absolute()) return; @@ -369,21 +376,23 @@ static void gd_cursor_define(DisplayChangeListener *dcl, { GtkDisplayState *s = container_of(dcl, GtkDisplayState, dcl); GdkPixbuf *pixbuf; - GdkCursor *cursor; + + if (s->current_cursor) { +#if !GTK_CHECK_VERSION(3, 0, 0) + gdk_cursor_unref(s->current_cursor); +#else + g_object_unref(s->current_cursor); +#endif + s->current_cursor = NULL; + } pixbuf = gdk_pixbuf_new_from_data((guchar *)(c->data), GDK_COLORSPACE_RGB, true, 8, c->width, c->height, c->width * 4, NULL, NULL); - cursor = gdk_cursor_new_from_pixbuf(gtk_widget_get_display(s->drawing_area), + s->current_cursor = gdk_cursor_new_from_pixbuf(gtk_widget_get_display(s->drawing_area), pixbuf, c->hot_x, c->hot_y); - gdk_window_set_cursor(gtk_widget_get_window(s->drawing_area), cursor); g_object_unref(pixbuf); -#if !GTK_CHECK_VERSION(3, 0, 0) - gdk_cursor_unref(cursor); -#else - g_object_unref(cursor); -#endif } static void gd_switch(DisplayChangeListener *dcl, -- 1.8.3.1