[gnome-settings-daemon] Add touchpad_enabled gconf key.
- From: Bastien Nocera <hadess src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] Add touchpad_enabled gconf key.
- Date: Mon, 15 Feb 2010 14:09:47 +0000 (UTC)
commit 045935aff4693375221ca3011c51fc08fc6736df
Author: Peter Hutterer <peter hutterer who-t net>
Date: Tue Oct 27 14:20:30 2009 +1000
Add touchpad_enabled gconf key.
Boolean key that toggles the "Device Enabled" property on all touchpad
devices. If TRUE, touchpads are enabled, otherwise, all touchpads are
disabled.
Touchpad disabled with this key will be visible to other X Input clients but
cannot send events unless re-enabled.
Signed-off-by: Peter Hutterer <peter hutterer who-t net>
https://bugzilla.gnome.org/show_bug.cgi?id=594831
data/desktop_gnome_peripherals_touchpad.schemas.in | 11 +++++
plugins/mouse/gsd-mouse-manager.c | 45 ++++++++++++++++++++
2 files changed, 56 insertions(+), 0 deletions(-)
---
diff --git a/data/desktop_gnome_peripherals_touchpad.schemas.in b/data/desktop_gnome_peripherals_touchpad.schemas.in
index 381dc24..78734e7 100644
--- a/data/desktop_gnome_peripherals_touchpad.schemas.in
+++ b/data/desktop_gnome_peripherals_touchpad.schemas.in
@@ -50,5 +50,16 @@
</locale>
</schema>
+ <schema>
+ <key>/schemas/desktop/gnome/peripherals/touchpad/touchpad_enabled</key>
+ <applyto>/desktop/gnome/peripherals/touchpad/touchpad_enabled</applyto>
+ <owner>gnome</owner>
+ <type>bool</type>
+ <default>TRUE</default>
+ <locale name="C">
+ <short>Enable touchpad</short>
+ <long>Set this to TRUE to enable all touchpads.</long>
+ </locale>
+ </schema>
</schemalist>
</gconfschemafile>
diff --git a/plugins/mouse/gsd-mouse-manager.c b/plugins/mouse/gsd-mouse-manager.c
index d0ecf6b..4371081 100644
--- a/plugins/mouse/gsd-mouse-manager.c
+++ b/plugins/mouse/gsd-mouse-manager.c
@@ -66,6 +66,7 @@
#define KEY_TAP_TO_CLICK GCONF_TOUCHPAD_DIR "/tap_to_click"
#define KEY_SCROLL_METHOD GCONF_TOUCHPAD_DIR "/scroll_method"
#define KEY_PAD_HORIZ_SCROLL GCONF_TOUCHPAD_DIR "/horiz_scroll_enabled"
+#define KEY_TOUCHPAD_ENABLED GCONF_TOUCHPAD_DIR "/touchpad_enabled"
struct GsdMouseManagerPrivate
{
@@ -757,6 +758,44 @@ set_edge_scroll (int method)
return 0;
}
+static int
+set_touchpad_enabled (gboolean state)
+{
+ int numdevices, i;
+ XDeviceInfo *devicelist = XListInputDevices (GDK_DISPLAY (), &numdevices);
+ XDevice *device;
+ Atom prop_enabled;
+
+ if (devicelist == NULL)
+ return 0;
+
+ prop_enabled = XInternAtom (GDK_DISPLAY (), "Device Enabled", False);
+
+ if (!prop_enabled)
+ return 0;
+
+ for (i = 0; i < numdevices; i++) {
+ if ((device = device_is_touchpad (devicelist[i]))) {
+ unsigned char data = state;
+ gdk_error_trap_push ();
+ XChangeDeviceProperty (GDK_DISPLAY (), device,
+ prop_enabled, XA_INTEGER, 8,
+ PropModeReplace, &data, 1);
+ XCloseDevice (GDK_DISPLAY (), device);
+ gdk_flush ();
+ if (gdk_error_trap_pop ()) {
+ g_warning ("Error %s device \"%s\"",
+ (state) ? "enabling" : "disabling",
+ devicelist[i].name);
+ continue;
+ }
+ }
+ }
+
+ XFreeDeviceList (devicelist);
+ return 0;
+}
+
static void
set_locate_pointer (GsdMouseManager *manager,
gboolean state)
@@ -862,6 +901,7 @@ set_mouse_settings (GsdMouseManager *manager)
set_tap_to_click (gconf_client_get_bool (client, KEY_TAP_TO_CLICK, NULL), left_handed);
set_edge_scroll (gconf_client_get_int (client, KEY_SCROLL_METHOD, NULL));
set_horiz_scroll (gconf_client_get_bool (client, KEY_PAD_HORIZ_SCROLL, NULL));
+ set_touchpad_enabled (gconf_client_get_bool (client, KEY_TOUCHPAD_ENABLED, NULL));
g_object_unref (client);
}
@@ -904,6 +944,10 @@ mouse_callback (GConfClient *client,
if (entry->value->type == GCONF_VALUE_BOOL) {
set_locate_pointer (manager, gconf_value_get_bool (entry->value));
}
+ } else if (! strcmp (entry->key, KEY_TOUCHPAD_ENABLED)) {
+ if (entry->value->type == GCONF_VALUE_BOOL) {
+ set_touchpad_enabled (gconf_value_get_bool (entry->value));
+ }
} else if (! strcmp (entry->key, KEY_DWELL_ENABLE)) {
if (entry->value->type == GCONF_VALUE_BOOL) {
set_mousetweaks_daemon (manager,
@@ -975,6 +1019,7 @@ gsd_mouse_manager_idle_cb (GsdMouseManager *manager)
gconf_client_get_bool (client, KEY_LEFT_HANDED, NULL));
set_edge_scroll (gconf_client_get_int (client, KEY_SCROLL_METHOD, NULL));
set_horiz_scroll (gconf_client_get_bool (client, KEY_PAD_HORIZ_SCROLL, NULL));
+ set_touchpad_enabled (gconf_client_get_bool (client, KEY_TOUCHPAD_ENABLED, NULL));
g_object_unref (client);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]