[mutter] wayland-keyboard: Use the backend's keymap
- From: Rui Matos <rtcm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] wayland-keyboard: Use the backend's keymap
- Date: Thu, 7 Aug 2014 09:54:59 +0000 (UTC)
commit 513628e4adb7be89a9a9f81a1a1790095b9349a4
Author: Rui Matos <tiagomatos gmail com>
Date: Mon Aug 4 16:50:04 2014 +0200
wayland-keyboard: Use the backend's keymap
Instead of getting it from xwayland, let's just keep a reference to
the backend's keymap.
https://bugzilla.gnome.org/show_bug.cgi?id=734301
src/wayland/meta-wayland-keyboard.c | 70 ++++-------------------------------
src/wayland/meta-wayland-keyboard.h | 13 ------
src/x11/events.c | 38 -------------------
3 files changed, 8 insertions(+), 113 deletions(-)
---
diff --git a/src/wayland/meta-wayland-keyboard.c b/src/wayland/meta-wayland-keyboard.c
index 106cbd7..f8a3e76 100644
--- a/src/wayland/meta-wayland-keyboard.c
+++ b/src/wayland/meta-wayland-keyboard.c
@@ -56,8 +56,8 @@
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
-#include <clutter/evdev/clutter-evdev.h>
+#include "backends/meta-backend.h"
#include "meta-wayland-private.h"
static void meta_wayland_keyboard_update_xkb_state (MetaWaylandKeyboard *keyboard);
@@ -110,22 +110,12 @@ create_anonymous_file (off_t size,
}
static void
-inform_clients_of_new_keymap (MetaWaylandKeyboard *keyboard,
- int flags)
+inform_clients_of_new_keymap (MetaWaylandKeyboard *keyboard)
{
- MetaWaylandCompositor *compositor;
- struct wl_client *xclient;
struct wl_resource *keyboard_resource;
- compositor = meta_wayland_compositor_get_default ();
- xclient = compositor->xwayland_manager.client;
-
wl_resource_for_each (keyboard_resource, &keyboard->resource_list)
{
- if ((flags & META_WAYLAND_KEYBOARD_SKIP_XCLIENTS) &&
- wl_resource_get_client (keyboard_resource) == xclient)
- continue;
-
wl_keyboard_send_keymap (keyboard_resource,
WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
keyboard->xkb_info.keymap_fd,
@@ -142,8 +132,7 @@ inform_clients_of_new_keymap (MetaWaylandKeyboard *keyboard,
static void
meta_wayland_keyboard_take_keymap (MetaWaylandKeyboard *keyboard,
- struct xkb_keymap *keymap,
- int flags)
+ struct xkb_keymap *keymap)
{
MetaWaylandXkbInfo *xkb_info = &keyboard->xkb_info;
GError *error = NULL;
@@ -157,7 +146,7 @@ meta_wayland_keyboard_take_keymap (MetaWaylandKeyboard *keyboard,
}
xkb_keymap_unref (xkb_info->keymap);
- xkb_info->keymap = keymap;
+ xkb_info->keymap = xkb_keymap_ref (keymap);
meta_wayland_keyboard_update_xkb_state (keyboard);
@@ -198,19 +187,7 @@ meta_wayland_keyboard_take_keymap (MetaWaylandKeyboard *keyboard,
strcpy (xkb_info->keymap_area, keymap_str);
free (keymap_str);
-#if defined(CLUTTER_WINDOWING_EGL)
- /* XXX -- the evdev backend can be used regardless of the
- * windowing backend. To do this properly we need a Clutter
- * API to check the input backend. */
- if (clutter_check_windowing_backend (CLUTTER_WINDOWING_EGL))
- {
- ClutterDeviceManager *manager;
- manager = clutter_device_manager_get_default ();
- clutter_evdev_set_keyboard_map (manager, xkb_info->keymap);
- }
-#endif
-
- inform_clients_of_new_keymap (keyboard, flags);
+ inform_clients_of_new_keymap (keyboard);
notify_modifiers (keyboard,
wl_display_next_serial (keyboard->display),
@@ -370,20 +347,14 @@ meta_wayland_keyboard_init (MetaWaylandKeyboard *keyboard,
wl_array_init (&keyboard->pressed_keys);
- keyboard->xkb_context = xkb_context_new (0 /* flags */);
keyboard->xkb_info.keymap_fd = -1;
- /* Compute a default until gnome-settings-daemon starts and sets
- the appropriate values
- */
- meta_wayland_keyboard_set_keymap_names (keyboard,
- "evdev",
- "pc105",
- "us", "", "", 0);
-
keyboard->settings = g_settings_new ("org.gnome.settings-daemon.peripherals.keyboard");
g_signal_connect (keyboard->settings, "changed",
G_CALLBACK (settings_changed), keyboard);
+
+ meta_wayland_keyboard_take_keymap (keyboard,
+ meta_backend_get_keymap (meta_get_backend ()));
}
static void
@@ -403,7 +374,6 @@ meta_wayland_keyboard_release (MetaWaylandKeyboard *keyboard)
{
meta_wayland_keyboard_set_focus (keyboard, NULL);
meta_wayland_xkb_info_destroy (&keyboard->xkb_info);
- xkb_context_unref (keyboard->xkb_context);
/* XXX: What about keyboard->resource_list? */
wl_array_release (&keyboard->pressed_keys);
@@ -593,30 +563,6 @@ meta_wayland_keyboard_set_focus (MetaWaylandKeyboard *keyboard,
}
}
-void
-meta_wayland_keyboard_set_keymap_names (MetaWaylandKeyboard *keyboard,
- const char *rules,
- const char *model,
- const char *layout,
- const char *variant,
- const char *options,
- int flags)
-{
- struct xkb_rule_names xkb_names;
-
- xkb_names.rules = rules;
- xkb_names.model = model;
- xkb_names.layout = layout;
- xkb_names.variant = variant;
- xkb_names.options = options;
-
- meta_wayland_keyboard_take_keymap (keyboard,
- xkb_keymap_new_from_names (keyboard->xkb_context,
- &xkb_names,
- 0 /* flags */),
- flags);
-}
-
struct wl_client *
meta_wayland_keyboard_get_focus_client (MetaWaylandKeyboard *keyboard)
{
diff --git a/src/wayland/meta-wayland-keyboard.h b/src/wayland/meta-wayland-keyboard.h
index edad9f3..33b9e2a 100644
--- a/src/wayland/meta-wayland-keyboard.h
+++ b/src/wayland/meta-wayland-keyboard.h
@@ -71,7 +71,6 @@ struct _MetaWaylandKeyboard
struct wl_array pressed_keys;
- struct xkb_context *xkb_context;
MetaWaylandXkbInfo xkb_info;
GSettings *settings;
@@ -91,18 +90,6 @@ gboolean meta_wayland_keyboard_handle_event (MetaWaylandKeyboard *keyboard,
void meta_wayland_keyboard_set_focus (MetaWaylandKeyboard *keyboard,
MetaWaylandSurface *surface);
-typedef enum {
- META_WAYLAND_KEYBOARD_SKIP_XCLIENTS = 1,
-} MetaWaylandKeyboardSetKeymapFlags;
-
-void meta_wayland_keyboard_set_keymap_names (MetaWaylandKeyboard *keyboard,
- const char *rules,
- const char *model,
- const char *layout,
- const char *variant,
- const char *options,
- int flags);
-
struct wl_client * meta_wayland_keyboard_get_focus_client (MetaWaylandKeyboard *keyboard);
void meta_wayland_keyboard_create_new_resource (MetaWaylandKeyboard *keyboard,
diff --git a/src/x11/events.c b/src/x11/events.c
index e031c0a..869e40c 100644
--- a/src/x11/events.c
+++ b/src/x11/events.c
@@ -917,40 +917,6 @@ handle_input_xevent (MetaDisplay *display,
}
static void
-reload_xkb_rules (MetaScreen *screen)
-{
- MetaWaylandCompositor *compositor;
- char **names;
- int n_names;
- gboolean ok;
- const char *rules, *model, *layout, *variant, *options;
-
- compositor = meta_wayland_compositor_get_default ();
-
- ok = meta_prop_get_latin1_list (screen->display, screen->xroot,
- screen->display->atom__XKB_RULES_NAMES,
- &names, &n_names);
- if (!ok)
- return;
-
- if (n_names != 5)
- goto out;
-
- rules = names[0];
- model = names[1];
- layout = names[2];
- variant = names[3];
- options = names[4];
-
- meta_wayland_keyboard_set_keymap_names (&compositor->seat->keyboard,
- rules, model, layout, variant, options,
- META_WAYLAND_KEYBOARD_SKIP_XCLIENTS);
-
- out:
- g_strfreev (names);
-}
-
-static void
process_request_frame_extents (MetaDisplay *display,
XEvent *event)
{
@@ -1459,10 +1425,6 @@ handle_other_xevent (MetaDisplay *display,
else if (event->xproperty.atom ==
display->atom__NET_DESKTOP_NAMES)
meta_screen_update_workspace_names (display->screen);
- else if (meta_is_wayland_compositor () &&
- event->xproperty.atom ==
- display->atom__XKB_RULES_NAMES)
- reload_xkb_rules (display->screen);
/* we just use this property as a sentinel to avoid
* certain race conditions. See the comment for the
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]