static GdkKeymap * gdk_wayland_display_get_keymap (GdkDisplay *display) { GdkDisplayWayland *display_wayland; g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL); display_wayland = GDK_DISPLAY_WAYLAND (display); if (!display_wayland->keymap) display_wayland->keymap = _gdk_wayland_keymap_new (display); return display_wayland->keymap; }
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 GdkKeymap * _gdk_wayland_display_get_keymap (GdkDisplay *display) { GdkDeviceManager *device_manager; GList *list, *l; GdkDevice *core_keyboard = NULL; static GdkKeymap *tmp_keymap = NULL; device_manager = gdk_display_get_device_manager (display); list = gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_MASTER); for (l = list; l; l = l->next) { GdkDevice *device; device = l->data; if (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD) continue; core_keyboard = device; break; } g_list_free (list); 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; }