[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH ui/gtk 03/13] Conditionalize use of gdk_keyboard_gra
From: |
Daniel P. Berrange |
Subject: |
[Qemu-devel] [PATCH ui/gtk 03/13] Conditionalize use of gdk_keyboard_grab / gdk_keyboard_ungrab |
Date: |
Mon, 25 Feb 2013 15:20:36 +0000 |
From: "Daniel P. Berrange" <address@hidden>
On GTK3 there is support for multiple keyboard devices, so
rather than using gdk_keyboard_grab / gdk_keyboard_ungrab
we should iterate over all devices, grabbing each one in
turn
Signed-off-by: Daniel P. Berrange <address@hidden>
---
ui/gtk.c | 41 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 40 insertions(+), 1 deletion(-)
diff --git a/ui/gtk.c b/ui/gtk.c
index 8ccd95f..3826bea 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -758,14 +758,53 @@ static void gd_menu_zoom_fit(GtkMenuItem *item, void
*opaque)
static void gd_grab_keyboard(GtkDisplayState *s)
{
- gdk_keyboard_grab(gtk_widget_get_window(GTK_WIDGET(s->drawing_area)),
+#if GTK_CHECK_VERSION(3, 0, 0)
+ GdkDisplay *display = gtk_widget_get_display(s->drawing_area);
+ GdkDeviceManager *mgr = gdk_display_get_device_manager(display);
+ GList *devices = gdk_device_manager_list_devices(mgr,
+ GDK_DEVICE_TYPE_MASTER);
+ GList *tmp = devices;
+ while (tmp) {
+ GdkDevice *dev = tmp->data;
+ if (gdk_device_get_source(dev) == GDK_SOURCE_KEYBOARD) {
+ gdk_device_grab(dev,
+ gtk_widget_get_window(s->drawing_area),
+ GDK_OWNERSHIP_NONE,
+ FALSE,
+ GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK,
+ NULL,
+ GDK_CURRENT_TIME);
+ }
+ tmp = tmp->next;
+ }
+ g_list_free(devices);
+#else
+ gdk_keyboard_grab(gtk_widget_get_window(s->drawing_area),
FALSE,
GDK_CURRENT_TIME);
+#endif
}
static void gd_ungrab_keyboard(GtkDisplayState *s)
{
+#if GTK_CHECK_VERSION(3, 0, 0)
+ GdkDisplay *display = gtk_widget_get_display(s->drawing_area);
+ GdkDeviceManager *mgr = gdk_display_get_device_manager(display);
+ GList *devices = gdk_device_manager_list_devices(mgr,
+ GDK_DEVICE_TYPE_MASTER);
+ GList *tmp = devices;
+ while (tmp) {
+ GdkDevice *dev = tmp->data;
+ if (gdk_device_get_source(dev) == GDK_SOURCE_KEYBOARD) {
+ gdk_device_ungrab(dev,
+ GDK_CURRENT_TIME);
+ }
+ tmp = tmp->next;
+ }
+ g_list_free(devices);
+#else
gdk_keyboard_ungrab(GDK_CURRENT_TIME);
+#endif
}
static void gd_menu_grab_input(GtkMenuItem *item, void *opaque)
--
1.8.1.2
- [Qemu-devel] [PATCH ui/gtk 00/13] Add support for GTK3 & fix GTK 2.18, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 02/13] Remove use of gdk_drawable_get_{screen, display}, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 05/13] Remove use of GtkVBox in GTK3, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 01/13] Add compat for gdk_drawable_get_size on GTK3, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 04/13] Conditionalize use of gdk_pointer_grab / gdk_pointer_ungrab, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 03/13] Conditionalize use of gdk_keyboard_grab / gdk_keyboard_ungrab,
Daniel P. Berrange <=
- [Qemu-devel] [PATCH ui/gtk 08/13] Conditionalize use of gtk_widget_size_request, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 07/13] Conditionalize use of gdk_display_warp_pointer, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 13/13] Add compat for GDK_KEY_XXX symbols, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 09/13] Replace expose-event handler with draw handler in GTK3, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 11/13] Add support for enabling build with GTK3, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 10/13] Ensure x_keymap.o is built when GTK is enabled, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 06/13] Replace gtk_menu_append with gtk_menu_shell_append, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 12/13] Add compat macro for gtk_widget_get_realized, Daniel P. Berrange, 2013/02/25
- Re: [Qemu-devel] [PATCH ui/gtk 00/13] Add support for GTK3 & fix GTK 2.18, Daniel P. Berrange, 2013/02/27