static void window_grab_broken_cb (GSWindow *window, GdkEventGrabBroken *event, GSManager *manager) { GdkDisplay *display; GdkSeat *seat; GdkDevice *device; display = gdk_window_get_display (gs_window_get_gdk_window (window)); seat = gdk_display_get_default_seat (display); if (event->keyboard) { gs_debug ("KEYBOARD GRAB BROKEN!"); device = gdk_seat_get_pointer (seat); if (!gdk_display_device_is_grabbed (display, device)) gs_grab_reset (manager->priv->grab); } else { gs_debug ("POINTER GRAB BROKEN!"); device = gdk_seat_get_keyboard (seat); if (!gdk_display_device_is_grabbed (display, device)) gs_grab_reset (manager->priv->grab); } }
XfwmDevices * xfwm_devices_new (GdkDisplay *display) { XfwmDevices *devices; #ifdef HAVE_XI2 GdkSeat *seat; GdkDevice *pointer_device; GdkDevice *keyboard_device; gint firstevent, firsterror; #endif devices = g_new0 (XfwmDevices, 1); devices->xi2_available = FALSE; devices->xi2_opcode = 0; devices->pointer.keyboard = FALSE; devices->pointer.xi2_device = None; devices->keyboard.keyboard = TRUE; devices->keyboard.xi2_device = None; #ifdef HAVE_XI2 seat = gdk_display_get_default_seat (display); pointer_device = gdk_seat_get_pointer (seat); keyboard_device = gdk_seat_get_keyboard (seat); if (GDK_IS_X11_DEVICE_XI2 (pointer_device) || GDK_IS_X11_DEVICE_XI2 (keyboard_device)) { /* GDK uses XI2, let's use it too */ /* Obtain XI2 opcode */ if (XQueryExtension (gdk_x11_display_get_xdisplay (display), "XInputExtension", &devices->xi2_opcode, &firstevent, &firsterror)) { devices->xi2_available = TRUE; devices->pointer.xi2_device = gdk_x11_device_get_id (pointer_device); devices->keyboard.xi2_device = gdk_x11_device_get_id (keyboard_device); } } #endif return devices; }
static GdkKeymap * _gdk_wayland_display_get_keymap (GdkDisplay *display) { GdkDevice *core_keyboard = NULL; static GdkKeymap *tmp_keymap = NULL; core_keyboard = gdk_seat_get_keyboard (gdk_display_get_default_seat (display)); if (core_keyboard && tmp_keymap) { g_object_unref (tmp_keymap); tmp_keymap = NULL; } if (core_keyboard) return _gdk_wayland_device_get_keymap (core_keyboard); if (!tmp_keymap) tmp_keymap = _gdk_wayland_keymap_new (); return tmp_keymap; }
static void generate_key_event (GdkWindow *window, GdkEventType type, guint state, guint keyval, guint16 keycode, gboolean is_modifier, guint32 event_time) { GdkEvent *event; GdkDisplay *display; GdkSeat *seat; GdkDevice *keyboard; event = gdk_event_new (type); event->key.state = state; event->key.keyval = keyval; event->key.hardware_keycode = keycode + 8; gdk_event_set_scancode (event, keycode + 8); event->key.is_modifier = is_modifier; event->key.time = event_time; set_key_event_string (&event->key); display = gdk_window_get_display (window); seat = gdk_display_get_default_seat (display); keyboard = gdk_seat_get_keyboard (seat); send_event (window, keyboard, event); }