Merge lp:~darkxst/unity-settings-daemon/gsettings3.16 into lp:unity-settings-daemon

Proposed by Tim Lunn
Status: Merged
Approved by: Tim Lunn
Approved revision: 4090
Merged at revision: 4090
Proposed branch: lp:~darkxst/unity-settings-daemon/gsettings3.16
Merge into: lp:unity-settings-daemon
Diff against target: 704 lines (+307/-98)
6 files modified
debian/control (+3/-3)
plugins/common/Makefile.am (+3/-1)
plugins/common/gsd-settings-migrate.c (+67/-0)
plugins/common/gsd-settings-migrate.h (+43/-0)
plugins/keyboard/gsd-keyboard-manager.c (+37/-2)
plugins/mouse/gsd-mouse-manager.c (+154/-92)
To merge this branch: bzr merge lp:~darkxst/unity-settings-daemon/gsettings3.16
Reviewer Review Type Date Requested Status
Unity Settings Daemon Development Team Pending
Review via email: mp+265203@code.launchpad.net

Commit message

Cherry-pick upstream changes for relocated peripheral settings

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/control'
2--- debian/control 2015-03-18 16:31:59 +0000
3+++ debian/control 2015-07-19 03:33:39 +0000
4@@ -19,7 +19,7 @@
5 libxext-dev,
6 libx11-dev,
7 libxtst-dev,
8- gsettings-desktop-schemas-dev (>= 3.7.2.1),
9+ gsettings-desktop-schemas-dev (>= 3.15.4),
10 libgnome-desktop-3-dev (>= 3.7.90),
11 libpulse-dev (>= 1:2.0),
12 libasound2-dev,
13@@ -54,9 +54,9 @@
14 Depends: ${shlibs:Depends},
15 ${misc:Depends},
16 accountsservice (>= 0.6.34),
17- gsettings-desktop-schemas (>= 3.7.2.1),
18+ gsettings-desktop-schemas (>= 3.15.4),
19 nautilus-data (>= 2.91.3-1),
20- gnome-settings-daemon-schemas (>= 3.8),
21+ gnome-settings-daemon-schemas (>= 3.16),
22 gsettings-ubuntu-schemas (>= 0.0.1+14.04.20140224),
23 Recommends: ibus (>= 1.5.0),
24 pulseaudio,
25
26=== modified file 'plugins/common/Makefile.am'
27--- plugins/common/Makefile.am 2014-06-26 02:32:12 +0000
28+++ plugins/common/Makefile.am 2015-07-19 03:33:39 +0000
29@@ -6,7 +6,9 @@
30 gsd-keygrab.c \
31 gsd-keygrab.h \
32 gsd-input-helper.c \
33- gsd-input-helper.h
34+ gsd-input-helper.h \
35+ gsd-settings-migrate.c \
36+ gsd-settings-migrate.h
37
38 libcommon_la_CPPFLAGS = \
39 $(AM_CPPFLAGS)
40
41=== added file 'plugins/common/gsd-settings-migrate.c'
42--- plugins/common/gsd-settings-migrate.c 1970-01-01 00:00:00 +0000
43+++ plugins/common/gsd-settings-migrate.c 2015-07-19 03:33:39 +0000
44@@ -0,0 +1,67 @@
45+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
46+ *
47+ * Copyright (C) 2015 Red Hat
48+ *
49+ * This program is free software; you can redistribute it and/or modify
50+ * it under the terms of the GNU General Public License as published by
51+ * the Free Software Foundation; either version 2 of the License, or
52+ * (at your option) any later version.
53+ *
54+ * This program is distributed in the hope that it will be useful,
55+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
56+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
57+ * GNU General Public License for more details.
58+ *
59+ * You should have received a copy of the GNU General Public License
60+ * along with this program; if not, write to the Free Software
61+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
62+ *
63+ * Author: Carlos Garnacho <carlosg@gnome.org>
64+ */
65+
66+#include "config.h"
67+
68+#include <gio/gio.h>
69+
70+#include "gsd-settings-migrate.h"
71+
72+void
73+gsd_settings_migrate_check (const gchar *origin_schema,
74+ const gchar *origin_path,
75+ const gchar *dest_schema,
76+ const gchar *dest_path,
77+ GsdSettingsMigrateEntry entries[],
78+ guint n_entries)
79+{
80+ GSettings *origin_settings, *dest_settings;
81+ GVariant *variant;
82+ guint i;
83+
84+ origin_settings = g_settings_new_with_path (origin_schema, origin_path);
85+ dest_settings = g_settings_new_with_path (dest_schema, dest_path);
86+
87+ for (i = 0; i < n_entries; i++) {
88+ variant = g_settings_get_user_value (origin_settings, entries[i].origin_key);
89+
90+ if (!variant)
91+ continue;
92+
93+ if (entries[i].dest_key) {
94+ if (entries[i].func) {
95+ GVariant *modified;
96+
97+ modified = entries[i].func (variant);
98+ g_variant_unref (variant);
99+ variant = g_variant_ref_sink (modified);
100+ }
101+
102+ g_settings_set_value (dest_settings, entries[i].dest_key, variant);
103+ }
104+
105+ g_settings_reset (origin_settings, entries[i].origin_key);
106+ g_variant_unref (variant);
107+ }
108+
109+ g_object_unref (origin_settings);
110+ g_object_unref (dest_settings);
111+}
112
113=== added file 'plugins/common/gsd-settings-migrate.h'
114--- plugins/common/gsd-settings-migrate.h 1970-01-01 00:00:00 +0000
115+++ plugins/common/gsd-settings-migrate.h 2015-07-19 03:33:39 +0000
116@@ -0,0 +1,43 @@
117+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
118+ *
119+ * Copyright (C) 2015 Red Hat
120+ *
121+ * This program is free software; you can redistribute it and/or modify
122+ * it under the terms of the GNU General Public License as published by
123+ * the Free Software Foundation; either version 2 of the License, or
124+ * (at your option) any later version.
125+ *
126+ * This program is distributed in the hope that it will be useful,
127+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
128+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
129+ * GNU General Public License for more details.
130+ *
131+ * You should have received a copy of the GNU General Public License
132+ * along with this program; if not, write to the Free Software
133+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
134+ *
135+ * Author: Carlos Garnacho <carlosg@gnome.org>
136+ */
137+
138+#ifndef __GSD_SETTINGS_MIGRATE_H__
139+#define __GSD_SETTINGS_MIGRATE_H__
140+
141+typedef struct _GsdSettingsMigrateEntry GsdSettingsMigrateEntry;
142+
143+typedef GVariant * (* GsdSettingsMigrateFunc) (GVariant *variant);
144+
145+struct _GsdSettingsMigrateEntry
146+{
147+ const gchar *origin_key;
148+ const gchar *dest_key;
149+ GsdSettingsMigrateFunc func;
150+};
151+
152+void gsd_settings_migrate_check (const gchar *origin_schema,
153+ const gchar *origin_path,
154+ const gchar *dest_schema,
155+ const gchar *dest_path,
156+ GsdSettingsMigrateEntry entries[],
157+ guint n_entries);
158+
159+#endif /* __GSD_SETTINGS_MIGRATE_H__ */
160
161=== modified file 'plugins/keyboard/gsd-keyboard-manager.c'
162--- plugins/keyboard/gsd-keyboard-manager.c 2015-03-12 21:34:36 +0000
163+++ plugins/keyboard/gsd-keyboard-manager.c 2015-07-19 03:33:39 +0000
164@@ -60,6 +60,7 @@
165 #include "gsd-keyboard-manager.h"
166 #include "gsd-input-helper.h"
167 #include "gsd-enums.h"
168+#include "gsd-settings-migrate.h"
169 #include "gsd-xkb-utils.h"
170
171 #ifdef HAVE_FCITX
172@@ -69,6 +70,7 @@
173 #define GSD_KEYBOARD_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_KEYBOARD_MANAGER, GsdKeyboardManagerPrivate))
174
175 #define GSD_KEYBOARD_DIR "org.gnome.settings-daemon.peripherals.keyboard"
176+#define GSETTINGS_KEYBOARD_SCHEMA "org.gnome.desktop.peripherals.keyboard"
177
178 #define KEY_REPEAT "repeat"
179 #define KEY_CLICK "click"
180@@ -113,6 +115,7 @@
181 {
182 guint start_idle_id;
183 GSettings *settings;
184+ GSettings *gsettings;
185 GSettings *input_sources_settings;
186 GSettings *interface_settings;
187 GnomeXkbInfo *xkb_info;
188@@ -1783,7 +1786,7 @@
189 guint delay;
190
191 g_debug ("Applying the repeat settings");
192- settings = manager->priv->settings;
193+ settings = manager->priv->gsettings;
194 repeat = g_settings_get_boolean (settings, KEY_REPEAT);
195 interval = g_settings_get_uint (settings, KEY_INTERVAL);
196 delay = g_settings_get_uint (settings, KEY_DELAY);
197@@ -1832,7 +1835,18 @@
198 apply_numlock (manager);
199 } else if (g_strcmp0 (key, KEY_NUMLOCK_STATE) == 0) {
200 g_debug ("Num-Lock state '%s' changed, will apply at next startup", key);
201- } else if (g_strcmp0 (key, KEY_REPEAT) == 0 ||
202+ } else {
203+ g_warning ("Unhandled settings change, key '%s'", key);
204+ }
205+
206+}
207+
208+static void
209+gsettings_changed (GSettings *settings,
210+ const char *key,
211+ GsdKeyboardManager *manager)
212+{
213+ if (g_strcmp0 (key, KEY_REPEAT) == 0 ||
214 g_strcmp0 (key, KEY_INTERVAL) == 0 ||
215 g_strcmp0 (key, KEY_DELAY) == 0) {
216 g_debug ("Key repeat setting '%s' changed, applying key repeat settings", key);
217@@ -2390,6 +2404,7 @@
218 #endif
219
220 manager->priv->settings = g_settings_new (GSD_KEYBOARD_DIR);
221+ manager->priv->gsettings = g_settings_new (GSETTINGS_KEYBOARD_SCHEMA);
222
223 xkb_init (manager);
224
225@@ -2449,6 +2464,9 @@
226
227 g_signal_connect (G_OBJECT (manager->priv->settings), "changed",
228 G_CALLBACK (settings_changed), manager);
229+ g_signal_connect (G_OBJECT (manager->priv->gsettings), "changed",
230+ G_CALLBACK (gsettings_changed), manager);
231+
232 g_signal_connect (G_OBJECT (manager->priv->input_sources_settings), "change-event",
233 G_CALLBACK (apply_input_sources_settings), manager);
234
235@@ -2572,12 +2590,29 @@
236 G_OBJECT_CLASS (gsd_keyboard_manager_parent_class)->finalize (object);
237 }
238
239+static void
240+migrate_keyboard_settings (void)
241+{
242+ GsdSettingsMigrateEntry entries[] = {
243+ { "repeat", "repeat", NULL },
244+ { "repeat-interval", "repeat-interval", NULL },
245+ { "delay", "delay", NULL }
246+ };
247+
248+ gsd_settings_migrate_check ("org.gnome.settings-daemon.peripherals.keyboard.deprecated",
249+ "/org/gnome/settings-daemon/peripherals/keyboard/",
250+ "org.gnome.desktop.peripherals.keyboard",
251+ "/org/gnome/desktop/peripherals/keyboard/",
252+ entries, G_N_ELEMENTS (entries));
253+}
254+
255 GsdKeyboardManager *
256 gsd_keyboard_manager_new (void)
257 {
258 if (manager_object != NULL) {
259 g_object_ref (manager_object);
260 } else {
261+ migrate_keyboard_settings ();
262 manager_object = g_object_new (GSD_TYPE_KEYBOARD_MANAGER, NULL);
263 g_object_add_weak_pointer (manager_object,
264 (gpointer *) &manager_object);
265
266=== modified file 'plugins/mouse/gsd-mouse-manager.c'
267--- plugins/mouse/gsd-mouse-manager.c 2013-12-04 23:55:26 +0000
268+++ plugins/mouse/gsd-mouse-manager.c 2015-07-19 03:33:39 +0000
269@@ -44,6 +44,8 @@
270 #include <X11/keysym.h>
271 #include <X11/Xatom.h>
272
273+#include <gdesktop-enums.h>
274+
275 #include <X11/extensions/XInput.h>
276 #include <X11/extensions/XIproto.h>
277
278@@ -51,30 +53,28 @@
279 #include "gsd-mouse-manager.h"
280 #include "gsd-input-helper.h"
281 #include "gsd-enums.h"
282+#include "gsd-settings-migrate.h"
283
284 #define GSD_MOUSE_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_MOUSE_MANAGER, GsdMouseManagerPrivate))
285
286-#define SETTINGS_MOUSE_DIR "org.gnome.settings-daemon.peripherals.mouse"
287-#define SETTINGS_TOUCHPAD_DIR "org.gnome.settings-daemon.peripherals.touchpad"
288+#define GSD_SETTINGS_MOUSE_SCHEMA "org.gnome.settings-daemon.peripherals.mouse"
289+#define GSETTINGS_MOUSE_SCHEMA "org.gnome.desktop.peripherals.mouse"
290+#define GSETTINGS_TOUCHPAD_SCHEMA "org.gnome.desktop.peripherals.touchpad"
291
292 /* Keys for both touchpad and mouse */
293 #define KEY_LEFT_HANDED "left-handed" /* a boolean for mouse, an enum for touchpad */
294-#define KEY_MOTION_ACCELERATION "motion-acceleration"
295-#define KEY_MOTION_THRESHOLD "motion-threshold"
296+#define KEY_SPEED "speed"
297
298 /* Touchpad settings */
299-#define KEY_TOUCHPAD_DISABLE_W_TYPING "disable-while-typing"
300-#define KEY_PAD_HORIZ_SCROLL "horiz-scroll-enabled"
301 #define KEY_SCROLL_METHOD "scroll-method"
302 #define KEY_TAP_TO_CLICK "tap-to-click"
303-#define KEY_TOUCHPAD_ENABLED "touchpad-enabled"
304+#define KEY_SEND_EVENTS "send-events"
305 #define KEY_NATURAL_SCROLL_ENABLED "natural-scroll"
306
307 /* Mouse settings */
308 #define KEY_LOCATE_POINTER "locate-pointer"
309 #define KEY_DWELL_CLICK_ENABLED "dwell-click-enabled"
310 #define KEY_SECONDARY_CLICK_ENABLED "secondary-click-enabled"
311-#define KEY_MIDDLE_BUTTON_EMULATION "middle-button-enabled"
312
313 struct GsdMouseManagerPrivate
314 {
315@@ -82,6 +82,7 @@
316 GSettings *touchpad_settings;
317 GSettings *mouse_settings;
318 GSettings *mouse_a11y_settings;
319+ GSettings *gsd_mouse_settings;
320 GdkDeviceManager *device_manager;
321 guint device_added_id;
322 guint device_removed_id;
323@@ -408,6 +409,7 @@
324 gfloat motion_acceleration;
325 int motion_threshold;
326 GSettings *settings;
327+ gdouble speed;
328 guint i;
329
330 xdevice = open_gdk_device (device);
331@@ -421,8 +423,11 @@
332 else
333 settings = manager->priv->mouse_settings;
334
335- /* Calculate acceleration */
336- motion_acceleration = g_settings_get_double (settings, KEY_MOTION_ACCELERATION);
337+ speed = g_settings_get_double (settings, KEY_SPEED);
338+
339+ /* Calculate acceleration and threshold */
340+ motion_acceleration = (speed + 1) * 5; /* speed is [-1..1], map to [0..10] */
341+ motion_threshold = CLAMP (10 - floor (motion_acceleration), 1, 10);
342
343 if (motion_acceleration >= 1.0) {
344 /* we want to get the acceleration, with a resolution of 0.5
345@@ -449,8 +454,6 @@
346 denominator = -1;
347 }
348
349- /* And threshold */
350- motion_threshold = g_settings_get_int (settings, KEY_MOTION_THRESHOLD);
351
352 /* Get the list of feedbacks for the device */
353 states = XGetFeedbackControl (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xdevice, &num_feedbacks);
354@@ -487,52 +490,6 @@
355 XCloseDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xdevice);
356 }
357
358-static void
359-set_middle_button (GsdMouseManager *manager,
360- GdkDevice *device,
361- gboolean middle_button)
362-{
363- Atom prop;
364- XDevice *xdevice;
365- Atom type;
366- int format;
367- unsigned long nitems, bytes_after;
368- unsigned char *data;
369- int rc;
370-
371- prop = XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
372- "Evdev Middle Button Emulation", True);
373-
374- if (!prop) /* no evdev devices */
375- return;
376-
377- xdevice = open_gdk_device (device);
378- if (xdevice == NULL)
379- return;
380-
381- g_debug ("setting middle button on %s", gdk_device_get_name (device));
382-
383- gdk_error_trap_push ();
384-
385- rc = XGetDeviceProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
386- xdevice, prop, 0, 1, False, XA_INTEGER, &type, &format,
387- &nitems, &bytes_after, &data);
388-
389- if (rc == Success && format == 8 && type == XA_INTEGER && nitems == 1) {
390- data[0] = middle_button ? 1 : 0;
391-
392- XChangeDeviceProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
393- xdevice, prop, type, format, PropModeReplace, data, nitems);
394- }
395-
396- if (gdk_error_trap_pop ())
397- g_warning ("Error in setting middle button emulation on \"%s\"", gdk_device_get_name (device));
398-
399- if (rc == Success)
400- XFree (data);
401-
402- XCloseDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xdevice);
403-}
404
405 /* Ensure that syndaemon dies together with us, to avoid running several of
406 * them */
407@@ -602,7 +559,6 @@
408
409 if (error) {
410 g_warning ("Failed to launch syndaemon: %s", error->message);
411- g_settings_set_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_DISABLE_W_TYPING, FALSE);
412 g_error_free (error);
413 } else {
414 g_child_watch_add (manager->priv->syndaemon_pid, syndaemon_died, manager);
415@@ -889,7 +845,7 @@
416 manager->priv->locate_pointer_spawned = (error == NULL);
417
418 if (error) {
419- g_settings_set_boolean (manager->priv->mouse_settings, KEY_LOCATE_POINTER, FALSE);
420+ g_settings_set_boolean (manager->priv->gsd_mouse_settings, KEY_LOCATE_POINTER, FALSE);
421 g_error_free (error);
422 }
423
424@@ -963,6 +919,22 @@
425 }
426 }
427
428+static gboolean
429+get_touchpad_enabled (GsdMouseManager *manager)
430+{
431+ GDesktopDeviceSendEvents send_events;
432+
433+ send_events = g_settings_get_enum (manager->priv->touchpad_settings, KEY_SEND_EVENTS);
434+
435+ if (send_events == G_DESKTOP_DEVICE_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE) {
436+ /* FIXME: mouse_is_present() also finds internal ones... */
437+ return (!mouse_is_present () && !trackball_is_present ());
438+
439+ }
440+
441+ return send_events == G_DESKTOP_DEVICE_SEND_EVENTS_ENABLED ? TRUE : FALSE;
442+}
443+
444 static void
445 set_mouse_settings (GsdMouseManager *manager,
446 GdkDevice *device)
447@@ -974,13 +946,12 @@
448 set_left_handed (manager, device, mouse_left_handed, touchpad_left_handed);
449
450 set_motion (manager, device);
451- set_middle_button (manager, device, g_settings_get_boolean (manager->priv->mouse_settings, KEY_MIDDLE_BUTTON_EMULATION));
452
453 set_tap_to_click (device, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TAP_TO_CLICK), touchpad_left_handed);
454 set_scroll_method (manager, device, g_settings_get_enum (manager->priv->touchpad_settings, KEY_SCROLL_METHOD));
455- set_horiz_scroll (device, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_PAD_HORIZ_SCROLL));
456+ set_horiz_scroll (device, TRUE);
457 set_natural_scroll (manager, device, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_NATURAL_SCROLL_ENABLED));
458- if (g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_ENABLED) == FALSE)
459+ if (!get_touchpad_enabled (manager))
460 set_touchpad_disabled (device);
461 }
462
463@@ -1075,11 +1046,8 @@
464 gboolean mouse_left_handed;
465 mouse_left_handed = g_settings_get_boolean (settings, KEY_LEFT_HANDED);
466 set_left_handed (manager, device, mouse_left_handed, get_touchpad_handedness (manager, mouse_left_handed));
467- } else if (g_str_equal (key, KEY_MOTION_ACCELERATION) ||
468- g_str_equal (key, KEY_MOTION_THRESHOLD)) {
469+ } else if (g_str_equal (key, KEY_SPEED)) {
470 set_motion (manager, device);
471- } else if (g_str_equal (key, KEY_MIDDLE_BUTTON_EMULATION)) {
472- set_middle_button (manager, device, g_settings_get_boolean (settings, KEY_MIDDLE_BUTTON_EMULATION));
473 }
474 }
475 g_list_free (devices);
476@@ -1092,11 +1060,6 @@
477 {
478 GList *devices, *l;
479
480- if (g_str_equal (key, KEY_TOUCHPAD_DISABLE_W_TYPING)) {
481- set_disable_w_typing (manager, g_settings_get_boolean (manager->priv->touchpad_settings, key));
482- return;
483- }
484-
485 devices = gdk_device_manager_list_devices (manager->priv->device_manager, GDK_DEVICE_TYPE_SLAVE);
486
487 for (l = devices; l != NULL; l = l->next) {
488@@ -1112,16 +1075,13 @@
489 get_touchpad_handedness (manager, mouse_left_handed));
490 } else if (g_str_equal (key, KEY_SCROLL_METHOD)) {
491 set_scroll_method (manager, device, g_settings_get_enum (settings, key));
492- set_horiz_scroll (device, g_settings_get_boolean (settings, KEY_PAD_HORIZ_SCROLL));
493- } else if (g_str_equal (key, KEY_PAD_HORIZ_SCROLL)) {
494- set_horiz_scroll (device, g_settings_get_boolean (settings, key));
495- } else if (g_str_equal (key, KEY_TOUCHPAD_ENABLED)) {
496- if (g_settings_get_boolean (settings, key) == FALSE)
497+ set_horiz_scroll (device, TRUE);
498+ } else if (g_str_equal (key, KEY_SEND_EVENTS)) {
499+ if (!get_touchpad_enabled (manager))
500 set_touchpad_disabled (device);
501 else
502 set_touchpad_enabled (gdk_x11_device_get_id (device));
503- } else if (g_str_equal (key, KEY_MOTION_ACCELERATION) ||
504- g_str_equal (key, KEY_MOTION_THRESHOLD)) {
505+ } else if (g_str_equal (key, KEY_SPEED)) {
506 set_motion (manager, device);
507 } else if (g_str_equal (key, KEY_LEFT_HANDED)) {
508 gboolean mouse_left_handed;
509@@ -1133,8 +1093,8 @@
510 }
511 g_list_free (devices);
512
513- if (g_str_equal (key, KEY_TOUCHPAD_ENABLED) &&
514- g_settings_get_boolean (settings, key)) {
515+ if (g_str_equal (key, KEY_SEND_EVENTS) &&
516+ get_touchpad_enabled (manager)) {
517 devices = get_disabled_devices (manager->priv->device_manager);
518 for (l = devices; l != NULL; l = l->next) {
519 int device_id;
520@@ -1150,8 +1110,34 @@
521 static void
522 ensure_touchpad_active (GsdMouseManager *manager)
523 {
524- if (mouse_is_present () == FALSE && touchscreen_is_present () == FALSE && trackball_is_present () == FALSE && touchpad_is_present ())
525- g_settings_set_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_ENABLED, TRUE);
526+ GList *devices, *l;
527+
528+ if (get_touchpad_enabled (manager)) {
529+ devices = get_disabled_devices (manager->priv->device_manager);
530+ for (l = devices; l != NULL; l = l->next) {
531+ int device_id;
532+
533+ device_id = GPOINTER_TO_INT (l->data);
534+ set_touchpad_enabled (device_id);
535+ }
536+ g_list_free (devices);
537+ } else {
538+ devices = gdk_device_manager_list_devices (manager->priv->device_manager,
539+ GDK_DEVICE_TYPE_SLAVE);
540+
541+ for (l = devices; l != NULL; l = l->next) {
542+ GdkDevice *device = l->data;
543+
544+ if (device_is_ignored (manager, device))
545+ continue;
546+ if (gdk_device_get_source (device) != GDK_SOURCE_TOUCHPAD)
547+ continue;
548+
549+ set_touchpad_disabled (device);
550+ }
551+
552+ g_list_free (devices);
553+ }
554 }
555
556 static void
557@@ -1170,7 +1156,10 @@
558 }
559
560 /* If a touchpad was to appear... */
561- set_disable_w_typing (manager, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_DISABLE_W_TYPING));
562+ set_disable_w_typing (manager, TRUE);
563+
564+ /* If a mouse was to appear... */
565+ ensure_touchpad_active (manager);
566 }
567 }
568
569@@ -1191,7 +1180,7 @@
570 run_custom_command (device, COMMAND_DEVICE_REMOVED);
571
572 /* If a touchpad was to disappear... */
573- set_disable_w_typing (manager, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_DISABLE_W_TYPING));
574+ set_disable_w_typing (manager, TRUE);
575
576 ensure_touchpad_active (manager);
577 }
578@@ -1227,25 +1216,29 @@
579
580 set_devicepresence_handler (manager);
581
582- manager->priv->mouse_settings = g_settings_new (SETTINGS_MOUSE_DIR);
583- g_signal_connect (manager->priv->mouse_settings, "changed",
584- G_CALLBACK (mouse_callback), manager);
585+ manager->priv->gsd_mouse_settings = g_settings_new (GSD_SETTINGS_MOUSE_SCHEMA);
586+ g_signal_connect (manager->priv->gsd_mouse_settings, "changed",
587+ G_CALLBACK (mouse_callback), manager);
588
589 manager->priv->mouse_a11y_settings = g_settings_new ("org.gnome.desktop.a11y.mouse");
590 g_signal_connect (manager->priv->mouse_a11y_settings, "changed",
591 G_CALLBACK (mouse_callback), manager);
592
593- manager->priv->touchpad_settings = g_settings_new (SETTINGS_TOUCHPAD_DIR);
594+ manager->priv->mouse_settings = g_settings_new (GSETTINGS_MOUSE_SCHEMA);
595+ g_signal_connect (manager->priv->mouse_settings, "changed",
596+ G_CALLBACK (mouse_callback), manager);
597+
598+ manager->priv->touchpad_settings = g_settings_new (GSETTINGS_TOUCHPAD_SCHEMA);
599 g_signal_connect (manager->priv->touchpad_settings, "changed",
600 G_CALLBACK (touchpad_callback), manager);
601
602 manager->priv->syndaemon_spawned = FALSE;
603
604- set_locate_pointer (manager, g_settings_get_boolean (manager->priv->mouse_settings, KEY_LOCATE_POINTER));
605+ set_locate_pointer (manager, g_settings_get_boolean (manager->priv->gsd_mouse_settings, KEY_LOCATE_POINTER));
606 set_mousetweaks_daemon (manager,
607 g_settings_get_boolean (manager->priv->mouse_a11y_settings, KEY_DWELL_CLICK_ENABLED),
608 g_settings_get_boolean (manager->priv->mouse_a11y_settings, KEY_SECONDARY_CLICK_ENABLED));
609- set_disable_w_typing (manager, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_DISABLE_W_TYPING));
610+ set_disable_w_typing (manager, TRUE);
611
612 devices = gdk_device_manager_list_devices (manager->priv->device_manager, GDK_DEVICE_TYPE_SLAVE);
613 for (l = devices; l != NULL; l = l->next) {
614@@ -1267,7 +1260,7 @@
615
616 ensure_touchpad_active (manager);
617
618- if (g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_ENABLED)) {
619+ if (get_touchpad_enabled (manager)) {
620 devices = get_disabled_devices (manager->priv->device_manager);
621 for (l = devices; l != NULL; l = l->next) {
622 int device_id;
623@@ -1348,12 +1341,81 @@
624 G_OBJECT_CLASS (gsd_mouse_manager_parent_class)->finalize (object);
625 }
626
627+static GVariant *
628+map_speed (GVariant *variant)
629+{
630+ gdouble value;
631+
632+ value = g_variant_get_double (variant);
633+
634+ /* Remap from [0..10] to [-1..1] */
635+ value = (value / 5) - 1;
636+
637+ return g_variant_new_double (value);
638+}
639+
640+static GVariant *
641+map_send_events (GVariant *variant)
642+{
643+ gboolean enabled;
644+
645+ enabled = g_variant_get_boolean (variant);
646+
647+ if (enabled) {
648+ return g_variant_new_string ("enabled");
649+ } else {
650+ return g_variant_new_string ("disabled");
651+ }
652+}
653+
654+static void
655+migrate_mouse_settings (void)
656+{
657+ GsdSettingsMigrateEntry trackball_entries[] = {
658+ { "scroll-wheel-emulation-button", "scroll-wheel-emulation-button", NULL }
659+ };
660+ GsdSettingsMigrateEntry mouse_entries[] = {
661+ { "left-handed", "left-handed", NULL },
662+ { "motion-acceleration", "speed", map_speed },
663+ { "motion-threshold", NULL, NULL },
664+ { "middle-button-enabled", NULL, NULL },
665+ };
666+ GsdSettingsMigrateEntry touchpad_entries[] = {
667+ { "disable-while-typing", NULL, NULL },
668+ { "horiz-scroll-enabled", NULL, NULL },
669+ { "scroll-method", "scroll-method", NULL },
670+ { "tap-to-click", "tap-to-click", NULL },
671+ { "touchpad-enabled", "send-events", map_send_events },
672+ { "left-handed", "left-handed", NULL },
673+ { "motion-acceleration", "speed", map_speed },
674+ { "motion-threshold", NULL, NULL },
675+ { "natural-scroll", "natural-scroll", NULL }
676+ };
677+
678+ gsd_settings_migrate_check ("org.gnome.settings-daemon.peripherals.trackball.deprecated",
679+ "/org/gnome/settings-daemon/peripherals/trackball/",
680+ "org.gnome.desktop.peripherals.trackball",
681+ "/org/gnome/desktop/peripherals/trackball/",
682+ trackball_entries, G_N_ELEMENTS (trackball_entries));
683+ gsd_settings_migrate_check ("org.gnome.settings-daemon.peripherals.mouse.deprecated",
684+ "/org/gnome/settings-daemon/peripherals/mouse/",
685+ "org.gnome.desktop.peripherals.mouse",
686+ "/org/gnome/desktop/peripherals/mouse/",
687+ mouse_entries, G_N_ELEMENTS (mouse_entries));
688+ gsd_settings_migrate_check ("org.gnome.settings-daemon.peripherals.touchpad.deprecated",
689+ "/org/gnome/settings-daemon/peripherals/touchpad/",
690+ "org.gnome.desktop.peripherals.touchpad",
691+ "/org/gnome/desktop/peripherals/touchpad/",
692+ touchpad_entries, G_N_ELEMENTS (touchpad_entries));
693+}
694+
695 GsdMouseManager *
696 gsd_mouse_manager_new (void)
697 {
698 if (manager_object != NULL) {
699 g_object_ref (manager_object);
700 } else {
701+ migrate_mouse_settings ();
702 manager_object = g_object_new (GSD_TYPE_MOUSE_MANAGER, NULL);
703 g_object_add_weak_pointer (manager_object,
704 (gpointer *) &manager_object);

Subscribers

People subscribed via source and target branches