[mutter/wip/carlosg/clutter-seat: 7/14] clutter: Move keymap from ClutterBackend to ClutterSeat
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/clutter-seat: 7/14] clutter: Move keymap from ClutterBackend to ClutterSeat
- Date: Thu, 3 Oct 2019 10:21:58 +0000 (UTC)
commit 84ff5a84ff0d2e116b646e87b58e1dfdf8f50910
Author: Carlos Garnacho <carlosg gnome org>
Date: Tue Oct 1 17:27:23 2019 +0200
clutter: Move keymap from ClutterBackend to ClutterSeat
clutter/clutter/clutter-backend-private.h | 5 ----
clutter/clutter/clutter-backend.c | 27 -----------------
clutter/clutter/clutter-backend.h | 3 --
clutter/clutter/clutter-seat.c | 14 +++++++++
clutter/clutter/clutter-seat.h | 6 ++++
clutter/clutter/clutter-text.c | 4 ++-
src/backends/meta-backend.c | 7 +++--
src/backends/meta-input-settings.c | 4 ++-
src/backends/native/meta-clutter-backend-native.c | 12 --------
src/backends/native/meta-device-manager-native.c | 6 ++--
src/backends/native/meta-input-settings-native.c | 1 +
src/backends/native/meta-keymap-native.h | 4 +++
src/backends/native/meta-seat-native.c | 24 ++++++++-------
src/backends/native/meta-seat-native.h | 3 ++
.../native/meta-virtual-input-device-native.c | 4 ++-
src/backends/x11/meta-clutter-backend-x11.c | 18 +----------
src/backends/x11/meta-keymap-x11.c | 14 +++++----
src/backends/x11/meta-seat-x11.c | 35 +++++++++++++++++++++-
src/backends/x11/meta-virtual-input-device-x11.c | 3 +-
src/backends/x11/meta-xkb-a11y-x11.c | 4 ++-
20 files changed, 108 insertions(+), 90 deletions(-)
---
diff --git a/clutter/clutter/clutter-backend-private.h b/clutter/clutter/clutter-backend-private.h
index a6a8b4de8..2a742e897 100644
--- a/clutter/clutter/clutter-backend-private.h
+++ b/clutter/clutter/clutter-backend-private.h
@@ -24,7 +24,6 @@
#include <clutter/clutter-backend.h>
#include <clutter/clutter-device-manager.h>
-#include <clutter/clutter-keymap.h>
#include <clutter/clutter-seat.h>
#include <clutter/clutter-stage-window.h>
@@ -60,8 +59,6 @@ struct _ClutterBackend
ClutterStageWindow *stage_window;
ClutterInputMethod *input_method;
-
- ClutterKeymap *keymap;
};
struct _ClutterBackendClass
@@ -96,8 +93,6 @@ struct _ClutterBackendClass
gpointer native,
ClutterEvent *event);
- ClutterKeymap * (* get_keymap) (ClutterBackend *backend);
-
ClutterSeat * (* get_default_seat) (ClutterBackend *backend);
GList * (* list_seats) (ClutterBackend *backend);
diff --git a/clutter/clutter/clutter-backend.c b/clutter/clutter/clutter-backend.c
index 8bdadf7cc..def42204d 100644
--- a/clutter/clutter/clutter-backend.c
+++ b/clutter/clutter/clutter-backend.c
@@ -540,18 +540,6 @@ clutter_backend_real_get_device_manager (ClutterBackend *backend)
return backend->device_manager;
}
-static ClutterKeymap *
-clutter_backend_real_get_keymap (ClutterBackend *backend)
-{
- if (G_UNLIKELY (backend->keymap == NULL))
- {
- g_critical ("No keymap available, expect broken keyboard input");
- return NULL;
- }
-
- return backend->keymap;
-}
-
static void
clutter_backend_class_init (ClutterBackendClass *klass)
{
@@ -618,7 +606,6 @@ clutter_backend_class_init (ClutterBackendClass *klass)
klass->get_device_manager = clutter_backend_real_get_device_manager;
klass->create_context = clutter_backend_real_create_context;
klass->get_features = clutter_backend_real_get_features;
- klass->get_keymap = clutter_backend_real_get_keymap;
}
static void
@@ -1058,20 +1045,6 @@ clutter_backend_set_input_method (ClutterBackend *backend,
g_set_object (&backend->input_method, method);
}
-/**
- * clutter_backend_get_keymap:
- * @backend: the #ClutterBackend
- *
- * Gets the keymap used by Clutter
- *
- * Returns: (transfer none): the keymap
- **/
-ClutterKeymap *
-clutter_backend_get_keymap (ClutterBackend *backend)
-{
- return CLUTTER_BACKEND_GET_CLASS (backend)->get_keymap (backend);
-}
-
ClutterStageWindow *
clutter_backend_get_stage_window (ClutterBackend *backend)
{
diff --git a/clutter/clutter/clutter-backend.h b/clutter/clutter/clutter-backend.h
index f37abce93..68bed1db5 100644
--- a/clutter/clutter/clutter-backend.h
+++ b/clutter/clutter/clutter-backend.h
@@ -79,9 +79,6 @@ ClutterInputMethod * clutter_backend_get_input_method (Clutter
CLUTTER_EXPORT
void clutter_backend_set_input_method (ClutterBackend *backend,
ClutterInputMethod *method);
-CLUTTER_EXPORT
-ClutterKeymap * clutter_backend_get_keymap (ClutterBackend
*backend);
-
CLUTTER_EXPORT
ClutterSeat * clutter_backend_get_default_seat (ClutterBackend
*backend);
CLUTTER_EXPORT
diff --git a/clutter/clutter/clutter-seat.c b/clutter/clutter/clutter-seat.c
index aa77170e3..95653b485 100644
--- a/clutter/clutter/clutter-seat.c
+++ b/clutter/clutter/clutter-seat.c
@@ -219,3 +219,17 @@ clutter_seat_bell_notify (ClutterSeat *seat)
{
CLUTTER_SEAT_GET_CLASS (seat)->bell_notify (seat);
}
+
+/**
+ * clutter_seat_get_keymap:
+ * @seat: a #ClutterSeat
+ *
+ * Returns the seat keymap
+ *
+ * Returns: (transfer none): the seat keymap
+ **/
+ClutterKeymap *
+clutter_seat_get_keymap (ClutterSeat *seat)
+{
+ return CLUTTER_SEAT_GET_CLASS (seat)->get_keymap (seat);
+}
diff --git a/clutter/clutter/clutter-seat.h b/clutter/clutter/clutter-seat.h
index 5e86674eb..22f578e88 100644
--- a/clutter/clutter/clutter-seat.h
+++ b/clutter/clutter/clutter-seat.h
@@ -28,6 +28,7 @@
#endif
#include "clutter/clutter-types.h"
+#include "clutter/clutter-keymap.h"
#define CLUTTER_TYPE_SEAT (clutter_seat_get_type ())
@@ -48,6 +49,8 @@ struct _ClutterSeatClass
ClutterInputDevice *parent);
void (* bell_notify) (ClutterSeat *seat);
+
+ ClutterKeymap * (* get_keymap) (ClutterSeat *seat);
};
CLUTTER_EXPORT
@@ -60,4 +63,7 @@ GList * clutter_seat_list_devices (ClutterSeat *seat,
CLUTTER_EXPORT
void clutter_seat_bell_notify (ClutterSeat *seat);
+CLUTTER_EXPORT
+ClutterKeymap * clutter_seat_get_keymap (ClutterSeat *seat);
+
#endif /* CLUTTER_SEAT_H */
diff --git a/clutter/clutter/clutter-text.c b/clutter/clutter/clutter-text.c
index 3cfbf98b3..d1f059740 100644
--- a/clutter/clutter/clutter-text.c
+++ b/clutter/clutter/clutter-text.c
@@ -760,9 +760,11 @@ clutter_text_create_layout_no_cache (ClutterText *text,
if (clutter_actor_has_key_focus (CLUTTER_ACTOR (text)))
{
+ ClutterSeat *seat;
ClutterKeymap *keymap;
- keymap = clutter_backend_get_keymap (backend);
+ seat = clutter_backend_get_default_seat (backend);
+ keymap = clutter_seat_get_keymap (seat);
pango_dir = clutter_keymap_get_direction (keymap);
}
else
diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c
index 7b05d72eb..ad6a5f433 100644
--- a/src/backends/meta-backend.c
+++ b/src/backends/meta-backend.c
@@ -181,9 +181,11 @@ meta_backend_finalize (GObject *object)
if (priv->keymap_state_changed_id)
{
+ ClutterSeat *seat;
ClutterKeymap *keymap;
- keymap = clutter_backend_get_keymap (priv->clutter_backend);
+ seat = clutter_backend_get_default_seat (priv->clutter_backend);
+ keymap = clutter_seat_get_keymap (seat);
g_signal_handler_disconnect (keymap, priv->keymap_state_changed_id);
}
@@ -500,7 +502,8 @@ meta_backend_real_post_init (MetaBackend *backend)
{
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
ClutterDeviceManager *device_manager = clutter_device_manager_get_default ();
- ClutterKeymap *keymap = clutter_backend_get_keymap (priv->clutter_backend);
+ ClutterSeat *seat = clutter_backend_get_default_seat (priv->clutter_backend);
+ ClutterKeymap *keymap = clutter_seat_get_keymap (seat);
priv->stage = meta_stage_new (backend);
clutter_actor_realize (priv->stage);
diff --git a/src/backends/meta-input-settings.c b/src/backends/meta-input-settings.c
index 6a4836d27..a41ec3147 100644
--- a/src/backends/meta-input-settings.c
+++ b/src/backends/meta-input-settings.c
@@ -2617,6 +2617,7 @@ void
meta_input_settings_maybe_save_numlock_state (MetaInputSettings *input_settings)
{
MetaInputSettingsPrivate *priv;
+ ClutterSeat *seat;
ClutterKeymap *keymap;
gboolean numlock_state;
@@ -2625,7 +2626,8 @@ meta_input_settings_maybe_save_numlock_state (MetaInputSettings *input_settings)
if (!g_settings_get_boolean (priv->keyboard_settings, "remember-numlock-state"))
return;
- keymap = clutter_backend_get_keymap (clutter_get_default_backend ());
+ seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
+ keymap = clutter_seat_get_keymap (seat);
numlock_state = clutter_keymap_get_num_lock_state (keymap);
if (numlock_state == g_settings_get_boolean (priv->keyboard_settings, "numlock-state"))
diff --git a/src/backends/native/meta-clutter-backend-native.c
b/src/backends/native/meta-clutter-backend-native.c
index eb35a64dc..620053c13 100644
--- a/src/backends/native/meta-clutter-backend-native.c
+++ b/src/backends/native/meta-clutter-backend-native.c
@@ -45,7 +45,6 @@
#include "backends/meta-backend-private.h"
#include "backends/meta-renderer.h"
#include "backends/native/meta-device-manager-native.h"
-#include "backends/native/meta-keymap-native.h"
#include "backends/native/meta-seat-native.h"
#include "backends/native/meta-stage-native.h"
#include "clutter/clutter.h"
@@ -58,7 +57,6 @@ struct _MetaClutterBackendNative
MetaSeatNative *main_seat;
MetaStageNative *stage_native;
- MetaKeymapNative *keymap;
MetaDeviceManagerNative *device_manager;
};
@@ -111,21 +109,12 @@ meta_clutter_backend_native_get_device_manager (ClutterBackend *backend)
return CLUTTER_DEVICE_MANAGER (backend_native->device_manager);
}
-static ClutterKeymap *
-meta_clutter_backend_native_get_keymap (ClutterBackend *backend)
-{
- MetaClutterBackendNative *backend_native = META_CLUTTER_BACKEND_NATIVE (backend);
-
- return CLUTTER_KEYMAP (backend_native->keymap);
-}
-
static void
meta_clutter_backend_native_init_events (ClutterBackend *backend)
{
MetaClutterBackendNative *backend_native = META_CLUTTER_BACKEND_NATIVE (backend);
const gchar *seat_id = evdev_seat_id ? evdev_seat_id : "seat0";
- backend_native->keymap = g_object_new (META_TYPE_KEYMAP_NATIVE, NULL);
backend_native->main_seat = g_object_new (META_TYPE_SEAT_NATIVE,
"backend", backend,
"seat-id", seat_id,
@@ -161,7 +150,6 @@ meta_clutter_backend_native_class_init (MetaClutterBackendNativeClass *klass)
clutter_backend_class->get_renderer = meta_clutter_backend_native_get_renderer;
clutter_backend_class->create_stage = meta_clutter_backend_native_create_stage;
clutter_backend_class->get_device_manager = meta_clutter_backend_native_get_device_manager;
- clutter_backend_class->get_keymap = meta_clutter_backend_native_get_keymap;
clutter_backend_class->init_events = meta_clutter_backend_native_init_events;
clutter_backend_class->get_default_seat = meta_clutter_backend_native_get_default_seat;
clutter_backend_class->list_seats = meta_clutter_backend_native_list_seats;
diff --git a/src/backends/native/meta-device-manager-native.c
b/src/backends/native/meta-device-manager-native.c
index 29727a28a..b56b47143 100644
--- a/src/backends/native/meta-device-manager-native.c
+++ b/src/backends/native/meta-device-manager-native.c
@@ -273,11 +273,11 @@ meta_device_manager_native_set_keyboard_map (ClutterDeviceManager *evdev,
g_return_if_fail (META_IS_DEVICE_MANAGER_NATIVE (evdev));
- keymap = clutter_backend_get_keymap (clutter_get_default_backend ());
+ manager_evdev = META_DEVICE_MANAGER_NATIVE (evdev);
+ keymap = clutter_seat_get_keymap (CLUTTER_SEAT (manager_evdev->priv->main_seat));
meta_keymap_native_set_keyboard_map (META_KEYMAP_NATIVE (keymap),
xkb_keymap);
- manager_evdev = META_DEVICE_MANAGER_NATIVE (evdev);
meta_seat_native_update_xkb_state (manager_evdev->priv->main_seat);
}
@@ -381,7 +381,7 @@ meta_device_manager_native_set_keyboard_numlock (ClutterDeviceManager *evdev,
manager_evdev = META_DEVICE_MANAGER_NATIVE (evdev);
priv = manager_evdev->priv;
- keymap = clutter_backend_get_keymap (clutter_get_default_backend ());
+ keymap = clutter_seat_get_keymap (CLUTTER_SEAT (priv->main_seat));
xkb_keymap = meta_keymap_native_get_keyboard_map (META_KEYMAP_NATIVE (keymap));
numlock = (1 << xkb_keymap_mod_get_index (xkb_keymap, "Mod2"));
diff --git a/src/backends/native/meta-input-settings-native.c
b/src/backends/native/meta-input-settings-native.c
index 4c980cbab..a202012e3 100644
--- a/src/backends/native/meta-input-settings-native.c
+++ b/src/backends/native/meta-input-settings-native.c
@@ -28,6 +28,7 @@
#include "backends/meta-logical-monitor.h"
#include "backends/native/meta-backend-native.h"
+#include "backends/native/meta-device-manager-native.h"
#include "backends/native/meta-input-device-native.h"
#include "backends/native/meta-input-device-tool-native.h"
#include "backends/native/meta-input-settings-native.h"
diff --git a/src/backends/native/meta-keymap-native.h b/src/backends/native/meta-keymap-native.h
index 3f30f287a..27364984c 100644
--- a/src/backends/native/meta-keymap-native.h
+++ b/src/backends/native/meta-keymap-native.h
@@ -18,6 +18,8 @@
*
* Author: Carlos Garnacho <carlosg gnome org>
*/
+#ifndef META_KEYMAP_NATIVE_H
+#define META_KEYMAP_NATIVE_H
#include "backends/native/meta-xkb-utils.h"
#include "clutter/clutter.h"
@@ -30,3 +32,5 @@ G_DECLARE_FINAL_TYPE (MetaKeymapNative, meta_keymap_native,
void meta_keymap_native_set_keyboard_map (MetaKeymapNative *keymap,
struct xkb_keymap *xkb_keymap);
struct xkb_keymap * meta_keymap_native_get_keyboard_map (MetaKeymapNative *keymap);
+
+#endif /* META_KEYMAP_NATIVE_H */
diff --git a/src/backends/native/meta-seat-native.c b/src/backends/native/meta-seat-native.c
index 82b4857e8..f340b5262 100644
--- a/src/backends/native/meta-seat-native.c
+++ b/src/backends/native/meta-seat-native.c
@@ -333,10 +333,7 @@ meta_seat_native_notify_key (MetaSeatNative *seat,
if (update_keys && (changed_state & XKB_STATE_LEDS))
{
- ClutterBackend *backend;
-
- backend = clutter_get_default_backend ();
- g_signal_emit_by_name (clutter_backend_get_keymap (backend), "state-changed");
+ g_signal_emit_by_name (seat->keymap, "state-changed");
meta_seat_native_sync_leds (seat);
meta_input_device_native_a11y_maybe_notify_toggle_keys (META_INPUT_DEVICE_NATIVE
(seat->core_keyboard));
}
@@ -2379,6 +2376,8 @@ meta_seat_native_constructed (GObject *object)
source = meta_event_source_new (seat);
seat->event_source = source;
+ seat->keymap = g_object_new (META_TYPE_KEYMAP_NATIVE, NULL);
+
if (G_OBJECT_CLASS (meta_seat_native_parent_class)->constructed)
G_OBJECT_CLASS (meta_seat_native_parent_class)->constructed (object);
}
@@ -2528,6 +2527,14 @@ meta_seat_native_bell_notify (ClutterSeat *seat)
meta_bell_notify (display, NULL);
}
+static ClutterKeymap *
+meta_seat_native_get_keymap (ClutterSeat *seat)
+{
+ MetaSeatNative *seat_native = META_SEAT_NATIVE (seat);
+
+ return CLUTTER_KEYMAP (seat_native->keymap);
+}
+
static void
meta_seat_native_class_init (MetaSeatNativeClass *klass)
{
@@ -2544,6 +2551,7 @@ meta_seat_native_class_init (MetaSeatNativeClass *klass)
seat_class->get_keyboard = meta_seat_native_get_keyboard;
seat_class->list_devices = meta_seat_native_list_devices;
seat_class->bell_notify = meta_seat_native_bell_notify;
+ seat_class->get_keymap = meta_seat_native_get_keymap;
props[PROP_SEAT_ID] =
g_param_spec_string ("seat-id",
@@ -2589,7 +2597,6 @@ meta_seat_native_stage_removed_cb (ClutterStageManager *manager,
static void
meta_seat_native_init (MetaSeatNative *seat)
{
- ClutterKeymap *keymap;
struct xkb_keymap *xkb_keymap;
seat->stage_manager = clutter_stage_manager_get_default ();
@@ -2619,8 +2626,7 @@ meta_seat_native_init (MetaSeatNative *seat)
seat->repeat_delay = 250; /* ms */
seat->repeat_interval = 33; /* ms */
- keymap = clutter_backend_get_keymap (clutter_get_default_backend ());
- xkb_keymap = meta_keymap_native_get_keyboard_map (META_KEYMAP_NATIVE (keymap));
+ xkb_keymap = meta_keymap_native_get_keyboard_map (seat->keymap);
if (xkb_keymap)
{
@@ -2830,10 +2836,8 @@ meta_seat_native_update_xkb_state (MetaSeatNative *seat)
xkb_mod_mask_t latched_mods;
xkb_mod_mask_t locked_mods;
struct xkb_keymap *xkb_keymap;
- ClutterKeymap *keymap;
- keymap = clutter_backend_get_keymap (clutter_get_default_backend ());
- xkb_keymap = meta_keymap_native_get_keyboard_map (META_KEYMAP_NATIVE (keymap));
+ xkb_keymap = meta_keymap_native_get_keyboard_map (seat->keymap);
latched_mods = xkb_state_serialize_mods (seat->xkb,
XKB_STATE_MODS_LATCHED);
diff --git a/src/backends/native/meta-seat-native.h b/src/backends/native/meta-seat-native.h
index 9aedb3240..d9a2812f3 100644
--- a/src/backends/native/meta-seat-native.h
+++ b/src/backends/native/meta-seat-native.h
@@ -26,6 +26,7 @@
#include <libinput.h>
#include <linux/input-event-codes.h>
+#include "backends/native/meta-keymap-native.h"
#include "backends/native/meta-xkb-utils.h"
#include "clutter/clutter.h"
@@ -114,6 +115,8 @@ struct _MetaSeatNative
GSList *event_filters;
+ MetaKeymapNative *keymap;
+
/* keyboard repeat */
gboolean repeat;
uint32_t repeat_delay;
diff --git a/src/backends/native/meta-virtual-input-device-native.c
b/src/backends/native/meta-virtual-input-device-native.c
index 48856677c..829570b03 100644
--- a/src/backends/native/meta-virtual-input-device-native.c
+++ b/src/backends/native/meta-virtual-input-device-native.c
@@ -282,13 +282,15 @@ pick_keycode_for_keyval_in_current_group (ClutterVirtualInputDevice *virtual_dev
{
MetaVirtualInputDeviceNative *virtual_evdev =
META_VIRTUAL_INPUT_DEVICE_NATIVE (virtual_device);
+ ClutterBackend *backend;
ClutterKeymap *keymap;
struct xkb_keymap *xkb_keymap;
struct xkb_state *state;
guint keycode, layout;
xkb_keycode_t min_keycode, max_keycode;
- keymap = clutter_backend_get_keymap (clutter_get_default_backend ());
+ backend = clutter_get_default_backend ();
+ keymap = clutter_seat_get_keymap (clutter_backend_get_default_seat (backend));
xkb_keymap = meta_keymap_native_get_keyboard_map (META_KEYMAP_NATIVE (keymap));
state = virtual_evdev->seat->xkb;
diff --git a/src/backends/x11/meta-clutter-backend-x11.c b/src/backends/x11/meta-clutter-backend-x11.c
index efdbb8928..5e8ada183 100644
--- a/src/backends/x11/meta-clutter-backend-x11.c
+++ b/src/backends/x11/meta-clutter-backend-x11.c
@@ -42,7 +42,6 @@
struct _MetaClutterBackendX11
{
ClutterBackendX11 parent;
- MetaKeymapX11 *keymap;
MetaDeviceManagerX11 *device_manager;
MetaSeatX11 *core_seat;
};
@@ -88,14 +87,6 @@ meta_clutter_backend_x11_get_device_manager (ClutterBackend *backend)
return CLUTTER_DEVICE_MANAGER (backend_x11->device_manager);
}
-static ClutterKeymap *
-meta_clutter_backend_x11_get_keymap (ClutterBackend *backend)
-{
- MetaClutterBackendX11 *backend_x11 = META_CLUTTER_BACKEND_X11 (backend);
-
- return CLUTTER_KEYMAP (backend_x11->keymap);
-}
-
static gboolean
meta_clutter_backend_x11_translate_event (ClutterBackend *backend,
gpointer native,
@@ -110,9 +101,6 @@ meta_clutter_backend_x11_translate_event (ClutterBackend *backend,
if (clutter_backend_class->translate_event (backend, native, event))
return TRUE;
- if (meta_keymap_x11_handle_event (backend_x11->keymap, native))
- return TRUE;
-
stage_x11 = META_STAGE_X11 (clutter_backend_get_stage_window (backend));
if (meta_stage_x11_translate_event (stage_x11, native, event))
return TRUE;
@@ -172,10 +160,7 @@ meta_clutter_backend_x11_init_events (ClutterBackend *backend)
if (!backend_x11->core_seat)
g_error ("No XInput 2.3 support");
- backend_x11->keymap = g_object_new (META_TYPE_KEYMAP_X11,
- "backend", backend_x11,
- NULL);
- g_signal_connect (backend_x11->keymap,
+ g_signal_connect (clutter_seat_get_keymap (CLUTTER_SEAT (backend_x11->core_seat)),
"state-changed",
G_CALLBACK (on_keymap_state_change),
backend_x11->device_manager);
@@ -208,7 +193,6 @@ meta_clutter_backend_x11_class_init (MetaClutterBackendX11Class *klass)
clutter_backend_class->get_renderer = meta_clutter_backend_x11_get_renderer;
clutter_backend_class->create_stage = meta_clutter_backend_x11_create_stage;
clutter_backend_class->get_device_manager = meta_clutter_backend_x11_get_device_manager;
- clutter_backend_class->get_keymap = meta_clutter_backend_x11_get_keymap;
clutter_backend_class->translate_event = meta_clutter_backend_x11_translate_event;
clutter_backend_class->init_events = meta_clutter_backend_x11_init_events;
clutter_backend_class->get_default_seat = meta_clutter_backend_x11_get_default_seat;
diff --git a/src/backends/x11/meta-keymap-x11.c b/src/backends/x11/meta-keymap-x11.c
index acc6682ed..ac2b1d787 100644
--- a/src/backends/x11/meta-keymap-x11.c
+++ b/src/backends/x11/meta-keymap-x11.c
@@ -516,22 +516,26 @@ meta_keymap_x11_get_caps_lock_state (ClutterKeymap *keymap)
}
static PangoDirection
-meta_keymap_x11_get_direction (MetaKeymapX11 *keymap)
+meta_keymap_x11_get_direction (ClutterKeymap *keymap)
{
+ MetaKeymapX11 *keymap_x11;
+
g_return_val_if_fail (META_IS_KEYMAP_X11 (keymap), PANGO_DIRECTION_NEUTRAL);
- if (keymap->use_xkb)
+ keymap_x11 = META_KEYMAP_X11 (keymap);
+
+ if (keymap_x11->use_xkb)
{
- if (!keymap->has_direction)
+ if (!keymap_x11->has_direction)
{
XkbStateRec state_rec;
XkbGetState (clutter_x11_get_default_display (),
XkbUseCoreKbd, &state_rec);
- update_direction (keymap, XkbStateGroup (&state_rec));
+ update_direction (keymap_x11, XkbStateGroup (&state_rec));
}
- return keymap->current_direction;
+ return keymap_x11->current_direction;
}
else
{
diff --git a/src/backends/x11/meta-seat-x11.c b/src/backends/x11/meta-seat-x11.c
index 503526b98..fdb0ac58c 100644
--- a/src/backends/x11/meta-seat-x11.c
+++ b/src/backends/x11/meta-seat-x11.c
@@ -47,6 +47,7 @@ struct _MetaSeatX11
GList *devices;
GHashTable *devices_by_id;
GHashTable *tools_by_serial;
+ MetaKeymapX11 *keymap;
int pointer_id;
int keyboard_id;
@@ -1251,6 +1252,20 @@ translate_coords (MetaStageX11 *stage_x11,
*y_out = CLAMP (event_y, 0, stage_height);
}
+static void
+on_keymap_state_change (MetaKeymapX11 *keymap_x11,
+ gpointer data)
+{
+ ClutterSeat *seat = CLUTTER_SEAT (data);
+ ClutterKbdA11ySettings kbd_a11y_settings;
+
+ /* On keymaps state change, just reapply the current settings, it'll
+ * take care of enabling/disabling mousekeys based on NumLock state.
+ */
+ clutter_seat_get_kbd_a11y_settings (seat, &kbd_a11y_settings);
+ meta_seat_x11_apply_kbd_a11y_settings (seat, &kbd_a11y_settings);
+}
+
static void
meta_seat_x11_set_property (GObject *object,
guint prop_id,
@@ -1376,6 +1391,14 @@ meta_seat_x11_constructed (GObject *object)
XSync (xdisplay, False);
+ seat_x11->keymap = g_object_new (META_TYPE_KEYMAP_X11,
+ "backend", backend,
+ NULL);
+ g_signal_connect (seat_x11->keymap,
+ "state-changed",
+ G_CALLBACK (on_keymap_state_change),
+ seat_x11);
+
if (G_OBJECT_CLASS (meta_seat_x11_parent_class)->constructed)
G_OBJECT_CLASS (meta_seat_x11_parent_class)->constructed (object);
}
@@ -1436,6 +1459,12 @@ meta_seat_x11_bell_notify (ClutterSeat *seat)
meta_bell_notify (display, NULL);
}
+static ClutterKeymap *
+meta_seat_x11_get_keymap (ClutterSeat *seat)
+{
+ return CLUTTER_KEYMAP (META_SEAT_X11 (seat)->keymap);
+}
+
static void
meta_seat_x11_class_init (MetaSeatX11Class *klass)
{
@@ -1451,6 +1480,7 @@ meta_seat_x11_class_init (MetaSeatX11Class *klass)
seat_class->get_keyboard = meta_seat_x11_get_keyboard;
seat_class->list_devices = meta_seat_x11_list_devices;
seat_class->bell_notify = meta_seat_x11_bell_notify;
+ seat_class->get_keymap = meta_seat_x11_get_keymap;
props[PROP_OPCODE] =
g_param_spec_int ("opcode",
@@ -1516,6 +1546,9 @@ meta_seat_x11_translate_event (MetaSeatX11 *seat,
XGenericEventCookie *cookie;
XIEvent *xi_event;
+ if (meta_keymap_x11_handle_event (seat->keymap, xevent))
+ return TRUE;
+
cookie = &xevent->xcookie;
if (cookie->type != GenericEvent ||
@@ -1585,7 +1618,7 @@ meta_seat_x11_translate_event (MetaSeatX11 *seat,
case XI_KeyRelease:
{
XIDeviceEvent *xev = (XIDeviceEvent *) xi_event;
- MetaKeymapX11 *keymap_x11 = META_KEYMAP_X11 (clutter_backend_get_keymap (backend));
+ MetaKeymapX11 *keymap_x11 = seat->keymap;
MetaEventX11 *event_x11;
char buffer[7] = { 0, };
gunichar n;
diff --git a/src/backends/x11/meta-virtual-input-device-x11.c
b/src/backends/x11/meta-virtual-input-device-x11.c
index 5d96b8193..beeae72b9 100644
--- a/src/backends/x11/meta-virtual-input-device-x11.c
+++ b/src/backends/x11/meta-virtual-input-device-x11.c
@@ -131,7 +131,8 @@ meta_virtual_input_device_x11_notify_keyval (ClutterVirtualInputDevice *virtual_
ClutterKeyState key_state)
{
ClutterBackend *backend = clutter_get_default_backend ();
- MetaKeymapX11 *keymap = META_KEYMAP_X11 (clutter_backend_get_keymap (backend));
+ ClutterSeat *seat = clutter_backend_get_default_seat (backend);
+ MetaKeymapX11 *keymap = META_KEYMAP_X11 (clutter_seat_get_keymap (seat));
uint32_t keycode, level;
if (!meta_keymap_x11_keycode_for_keyval (keymap, keyval, &keycode, &level))
diff --git a/src/backends/x11/meta-xkb-a11y-x11.c b/src/backends/x11/meta-xkb-a11y-x11.c
index 2baed9808..c8e07b300 100644
--- a/src/backends/x11/meta-xkb-a11y-x11.c
+++ b/src/backends/x11/meta-xkb-a11y-x11.c
@@ -198,6 +198,7 @@ meta_device_manager_x11_apply_kbd_a11y_settings (ClutterDeviceManager *device_
ClutterKbdA11ySettings *kbd_a11y_settings)
{
ClutterBackend *backend;
+ ClutterSeat *seat;
Display *xdisplay = clutter_x11_get_default_display ();
XkbDescRec *desc;
gboolean enable_accessX;
@@ -207,6 +208,7 @@ meta_device_manager_x11_apply_kbd_a11y_settings (ClutterDeviceManager *device_
return;
backend = clutter_get_default_backend ();
+ seat = clutter_backend_get_default_seat (backend);
/* general */
enable_accessX = kbd_a11y_settings->controls & CLUTTER_A11Y_KEYBOARD_ENABLED;
@@ -245,7 +247,7 @@ meta_device_manager_x11_apply_kbd_a11y_settings (ClutterDeviceManager *device_
}
/* mouse keys */
- if (clutter_keymap_get_num_lock_state (clutter_backend_get_keymap (backend)))
+ if (clutter_keymap_get_num_lock_state (clutter_seat_get_keymap (seat)))
{
/* Disable mousekeys when NumLock is ON */
desc->ctrls->enabled_ctrls &= ~(XkbMouseKeysMask | XkbMouseKeysAccelMask);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]