[mutter] backend-native: Handle keyboard repeat settings
- From: Rui Matos <rtcm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] backend-native: Handle keyboard repeat settings
- Date: Fri, 3 Oct 2014 17:02:30 +0000 (UTC)
commit fa58752276dd1400089cf6345b1a0c008b2962dc
Author: Rui Matos <tiagomatos gmail com>
Date: Fri Sep 19 17:25:22 2014 +0200
backend-native: Handle keyboard repeat settings
We need to tell clutter's evdev backend about the desktop's key repeat
settings so that our own key bindings event processing and
gnome-shell's chrome widgets get their fake key events for continuous
key press as they expect.
Note that the wayland frontend filters out these events and thus
wayland clients do not see them as specced.
https://bugzilla.gnome.org/show_bug.cgi?id=728055
src/backends/native/meta-backend-native.c | 47 +++++++++++++++++++++++++++++
1 files changed, 47 insertions(+), 0 deletions(-)
---
diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c
index 6e2741b..269695f 100644
--- a/src/backends/native/meta-backend-native.c
+++ b/src/backends/native/meta-backend-native.c
@@ -36,11 +36,24 @@
struct _MetaBackendNativePrivate
{
MetaLauncher *launcher;
+
+ GSettings *keyboard_settings;
};
typedef struct _MetaBackendNativePrivate MetaBackendNativePrivate;
G_DEFINE_TYPE_WITH_PRIVATE (MetaBackendNative, meta_backend_native, META_TYPE_BACKEND);
+static void
+meta_backend_native_finalize (GObject *object)
+{
+ MetaBackendNative *native = META_BACKEND_NATIVE (object);
+ MetaBackendNativePrivate *priv = meta_backend_native_get_instance_private (native);
+
+ g_clear_object (&priv->keyboard_settings);
+
+ G_OBJECT_CLASS (meta_backend_native_parent_class)->finalize (object);
+}
+
/*
* The pointer constrain code is mostly a rip-off of the XRandR code from Xorg.
* (from xserver/randr/rrcrtc.c, RRConstrainCursorHarder)
@@ -143,14 +156,45 @@ pointer_constrain_callback (ClutterInputDevice *device,
}
static void
+set_keyboard_repeat (MetaBackendNative *native)
+{
+ MetaBackendNativePrivate *priv = meta_backend_native_get_instance_private (native);
+ ClutterDeviceManager *manager = clutter_device_manager_get_default ();
+ gboolean repeat;
+ unsigned int delay, interval;
+
+ repeat = g_settings_get_boolean (priv->keyboard_settings, "repeat");
+ delay = g_settings_get_uint (priv->keyboard_settings, "delay");
+ interval = g_settings_get_uint (priv->keyboard_settings, "repeat-interval");
+
+ clutter_evdev_set_keyboard_repeat (manager, repeat, delay, interval);
+}
+
+static void
+keyboard_settings_changed (GSettings *settings,
+ const char *key,
+ gpointer data)
+{
+ MetaBackendNative *native = data;
+ set_keyboard_repeat (native);
+}
+
+static void
meta_backend_native_post_init (MetaBackend *backend)
{
+ MetaBackendNative *native = META_BACKEND_NATIVE (backend);
+ MetaBackendNativePrivate *priv = meta_backend_native_get_instance_private (native);
ClutterDeviceManager *manager = clutter_device_manager_get_default ();
META_BACKEND_CLASS (meta_backend_native_parent_class)->post_init (backend);
clutter_evdev_set_pointer_constrain_callback (manager, pointer_constrain_callback,
NULL, NULL);
+
+ priv->keyboard_settings = g_settings_new ("org.gnome.settings-daemon.peripherals.keyboard");
+ g_signal_connect (priv->keyboard_settings, "changed",
+ G_CALLBACK (keyboard_settings_changed), native);
+ set_keyboard_repeat (native);
}
static MetaIdleMonitor *
@@ -236,6 +280,9 @@ static void
meta_backend_native_class_init (MetaBackendNativeClass *klass)
{
MetaBackendClass *backend_class = META_BACKEND_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = meta_backend_native_finalize;
backend_class->post_init = meta_backend_native_post_init;
backend_class->create_idle_monitor = meta_backend_native_create_idle_monitor;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]