Merge lp:~darkxst/unity-settings-daemon/gsettings3.16 into lp:unity-settings-daemon
- gsettings3.16
- Merge into trunk
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 | ||||
Related bugs: |
|
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
Description of the change
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 | 19 | libxext-dev, | 19 | libxext-dev, |
6 | 20 | libx11-dev, | 20 | libx11-dev, |
7 | 21 | libxtst-dev, | 21 | libxtst-dev, |
9 | 22 | gsettings-desktop-schemas-dev (>= 3.7.2.1), | 22 | gsettings-desktop-schemas-dev (>= 3.15.4), |
10 | 23 | libgnome-desktop-3-dev (>= 3.7.90), | 23 | libgnome-desktop-3-dev (>= 3.7.90), |
11 | 24 | libpulse-dev (>= 1:2.0), | 24 | libpulse-dev (>= 1:2.0), |
12 | 25 | libasound2-dev, | 25 | libasound2-dev, |
13 | @@ -54,9 +54,9 @@ | |||
14 | 54 | Depends: ${shlibs:Depends}, | 54 | Depends: ${shlibs:Depends}, |
15 | 55 | ${misc:Depends}, | 55 | ${misc:Depends}, |
16 | 56 | accountsservice (>= 0.6.34), | 56 | accountsservice (>= 0.6.34), |
18 | 57 | gsettings-desktop-schemas (>= 3.7.2.1), | 57 | gsettings-desktop-schemas (>= 3.15.4), |
19 | 58 | nautilus-data (>= 2.91.3-1), | 58 | nautilus-data (>= 2.91.3-1), |
21 | 59 | gnome-settings-daemon-schemas (>= 3.8), | 59 | gnome-settings-daemon-schemas (>= 3.16), |
22 | 60 | gsettings-ubuntu-schemas (>= 0.0.1+14.04.20140224), | 60 | gsettings-ubuntu-schemas (>= 0.0.1+14.04.20140224), |
23 | 61 | Recommends: ibus (>= 1.5.0), | 61 | Recommends: ibus (>= 1.5.0), |
24 | 62 | pulseaudio, | 62 | pulseaudio, |
25 | 63 | 63 | ||
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 | 6 | gsd-keygrab.c \ | 6 | gsd-keygrab.c \ |
31 | 7 | gsd-keygrab.h \ | 7 | gsd-keygrab.h \ |
32 | 8 | gsd-input-helper.c \ | 8 | gsd-input-helper.c \ |
34 | 9 | gsd-input-helper.h | 9 | gsd-input-helper.h \ |
35 | 10 | gsd-settings-migrate.c \ | ||
36 | 11 | gsd-settings-migrate.h | ||
37 | 10 | 12 | ||
38 | 11 | libcommon_la_CPPFLAGS = \ | 13 | libcommon_la_CPPFLAGS = \ |
39 | 12 | $(AM_CPPFLAGS) | 14 | $(AM_CPPFLAGS) |
40 | 13 | 15 | ||
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 | 1 | /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- | ||
46 | 2 | * | ||
47 | 3 | * Copyright (C) 2015 Red Hat | ||
48 | 4 | * | ||
49 | 5 | * This program is free software; you can redistribute it and/or modify | ||
50 | 6 | * it under the terms of the GNU General Public License as published by | ||
51 | 7 | * the Free Software Foundation; either version 2 of the License, or | ||
52 | 8 | * (at your option) any later version. | ||
53 | 9 | * | ||
54 | 10 | * This program is distributed in the hope that it will be useful, | ||
55 | 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
56 | 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
57 | 13 | * GNU General Public License for more details. | ||
58 | 14 | * | ||
59 | 15 | * You should have received a copy of the GNU General Public License | ||
60 | 16 | * along with this program; if not, write to the Free Software | ||
61 | 17 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
62 | 18 | * | ||
63 | 19 | * Author: Carlos Garnacho <carlosg@gnome.org> | ||
64 | 20 | */ | ||
65 | 21 | |||
66 | 22 | #include "config.h" | ||
67 | 23 | |||
68 | 24 | #include <gio/gio.h> | ||
69 | 25 | |||
70 | 26 | #include "gsd-settings-migrate.h" | ||
71 | 27 | |||
72 | 28 | void | ||
73 | 29 | gsd_settings_migrate_check (const gchar *origin_schema, | ||
74 | 30 | const gchar *origin_path, | ||
75 | 31 | const gchar *dest_schema, | ||
76 | 32 | const gchar *dest_path, | ||
77 | 33 | GsdSettingsMigrateEntry entries[], | ||
78 | 34 | guint n_entries) | ||
79 | 35 | { | ||
80 | 36 | GSettings *origin_settings, *dest_settings; | ||
81 | 37 | GVariant *variant; | ||
82 | 38 | guint i; | ||
83 | 39 | |||
84 | 40 | origin_settings = g_settings_new_with_path (origin_schema, origin_path); | ||
85 | 41 | dest_settings = g_settings_new_with_path (dest_schema, dest_path); | ||
86 | 42 | |||
87 | 43 | for (i = 0; i < n_entries; i++) { | ||
88 | 44 | variant = g_settings_get_user_value (origin_settings, entries[i].origin_key); | ||
89 | 45 | |||
90 | 46 | if (!variant) | ||
91 | 47 | continue; | ||
92 | 48 | |||
93 | 49 | if (entries[i].dest_key) { | ||
94 | 50 | if (entries[i].func) { | ||
95 | 51 | GVariant *modified; | ||
96 | 52 | |||
97 | 53 | modified = entries[i].func (variant); | ||
98 | 54 | g_variant_unref (variant); | ||
99 | 55 | variant = g_variant_ref_sink (modified); | ||
100 | 56 | } | ||
101 | 57 | |||
102 | 58 | g_settings_set_value (dest_settings, entries[i].dest_key, variant); | ||
103 | 59 | } | ||
104 | 60 | |||
105 | 61 | g_settings_reset (origin_settings, entries[i].origin_key); | ||
106 | 62 | g_variant_unref (variant); | ||
107 | 63 | } | ||
108 | 64 | |||
109 | 65 | g_object_unref (origin_settings); | ||
110 | 66 | g_object_unref (dest_settings); | ||
111 | 67 | } | ||
112 | 0 | 68 | ||
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 | 1 | /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- | ||
118 | 2 | * | ||
119 | 3 | * Copyright (C) 2015 Red Hat | ||
120 | 4 | * | ||
121 | 5 | * This program is free software; you can redistribute it and/or modify | ||
122 | 6 | * it under the terms of the GNU General Public License as published by | ||
123 | 7 | * the Free Software Foundation; either version 2 of the License, or | ||
124 | 8 | * (at your option) any later version. | ||
125 | 9 | * | ||
126 | 10 | * This program is distributed in the hope that it will be useful, | ||
127 | 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
128 | 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
129 | 13 | * GNU General Public License for more details. | ||
130 | 14 | * | ||
131 | 15 | * You should have received a copy of the GNU General Public License | ||
132 | 16 | * along with this program; if not, write to the Free Software | ||
133 | 17 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
134 | 18 | * | ||
135 | 19 | * Author: Carlos Garnacho <carlosg@gnome.org> | ||
136 | 20 | */ | ||
137 | 21 | |||
138 | 22 | #ifndef __GSD_SETTINGS_MIGRATE_H__ | ||
139 | 23 | #define __GSD_SETTINGS_MIGRATE_H__ | ||
140 | 24 | |||
141 | 25 | typedef struct _GsdSettingsMigrateEntry GsdSettingsMigrateEntry; | ||
142 | 26 | |||
143 | 27 | typedef GVariant * (* GsdSettingsMigrateFunc) (GVariant *variant); | ||
144 | 28 | |||
145 | 29 | struct _GsdSettingsMigrateEntry | ||
146 | 30 | { | ||
147 | 31 | const gchar *origin_key; | ||
148 | 32 | const gchar *dest_key; | ||
149 | 33 | GsdSettingsMigrateFunc func; | ||
150 | 34 | }; | ||
151 | 35 | |||
152 | 36 | void gsd_settings_migrate_check (const gchar *origin_schema, | ||
153 | 37 | const gchar *origin_path, | ||
154 | 38 | const gchar *dest_schema, | ||
155 | 39 | const gchar *dest_path, | ||
156 | 40 | GsdSettingsMigrateEntry entries[], | ||
157 | 41 | guint n_entries); | ||
158 | 42 | |||
159 | 43 | #endif /* __GSD_SETTINGS_MIGRATE_H__ */ | ||
160 | 0 | 44 | ||
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 | 60 | #include "gsd-keyboard-manager.h" | 60 | #include "gsd-keyboard-manager.h" |
166 | 61 | #include "gsd-input-helper.h" | 61 | #include "gsd-input-helper.h" |
167 | 62 | #include "gsd-enums.h" | 62 | #include "gsd-enums.h" |
168 | 63 | #include "gsd-settings-migrate.h" | ||
169 | 63 | #include "gsd-xkb-utils.h" | 64 | #include "gsd-xkb-utils.h" |
170 | 64 | 65 | ||
171 | 65 | #ifdef HAVE_FCITX | 66 | #ifdef HAVE_FCITX |
172 | @@ -69,6 +70,7 @@ | |||
173 | 69 | #define GSD_KEYBOARD_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_KEYBOARD_MANAGER, GsdKeyboardManagerPrivate)) | 70 | #define GSD_KEYBOARD_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_KEYBOARD_MANAGER, GsdKeyboardManagerPrivate)) |
174 | 70 | 71 | ||
175 | 71 | #define GSD_KEYBOARD_DIR "org.gnome.settings-daemon.peripherals.keyboard" | 72 | #define GSD_KEYBOARD_DIR "org.gnome.settings-daemon.peripherals.keyboard" |
176 | 73 | #define GSETTINGS_KEYBOARD_SCHEMA "org.gnome.desktop.peripherals.keyboard" | ||
177 | 72 | 74 | ||
178 | 73 | #define KEY_REPEAT "repeat" | 75 | #define KEY_REPEAT "repeat" |
179 | 74 | #define KEY_CLICK "click" | 76 | #define KEY_CLICK "click" |
180 | @@ -113,6 +115,7 @@ | |||
181 | 113 | { | 115 | { |
182 | 114 | guint start_idle_id; | 116 | guint start_idle_id; |
183 | 115 | GSettings *settings; | 117 | GSettings *settings; |
184 | 118 | GSettings *gsettings; | ||
185 | 116 | GSettings *input_sources_settings; | 119 | GSettings *input_sources_settings; |
186 | 117 | GSettings *interface_settings; | 120 | GSettings *interface_settings; |
187 | 118 | GnomeXkbInfo *xkb_info; | 121 | GnomeXkbInfo *xkb_info; |
188 | @@ -1783,7 +1786,7 @@ | |||
189 | 1783 | guint delay; | 1786 | guint delay; |
190 | 1784 | 1787 | ||
191 | 1785 | g_debug ("Applying the repeat settings"); | 1788 | g_debug ("Applying the repeat settings"); |
193 | 1786 | settings = manager->priv->settings; | 1789 | settings = manager->priv->gsettings; |
194 | 1787 | repeat = g_settings_get_boolean (settings, KEY_REPEAT); | 1790 | repeat = g_settings_get_boolean (settings, KEY_REPEAT); |
195 | 1788 | interval = g_settings_get_uint (settings, KEY_INTERVAL); | 1791 | interval = g_settings_get_uint (settings, KEY_INTERVAL); |
196 | 1789 | delay = g_settings_get_uint (settings, KEY_DELAY); | 1792 | delay = g_settings_get_uint (settings, KEY_DELAY); |
197 | @@ -1832,7 +1835,18 @@ | |||
198 | 1832 | apply_numlock (manager); | 1835 | apply_numlock (manager); |
199 | 1833 | } else if (g_strcmp0 (key, KEY_NUMLOCK_STATE) == 0) { | 1836 | } else if (g_strcmp0 (key, KEY_NUMLOCK_STATE) == 0) { |
200 | 1834 | g_debug ("Num-Lock state '%s' changed, will apply at next startup", key); | 1837 | g_debug ("Num-Lock state '%s' changed, will apply at next startup", key); |
202 | 1835 | } else if (g_strcmp0 (key, KEY_REPEAT) == 0 || | 1838 | } else { |
203 | 1839 | g_warning ("Unhandled settings change, key '%s'", key); | ||
204 | 1840 | } | ||
205 | 1841 | |||
206 | 1842 | } | ||
207 | 1843 | |||
208 | 1844 | static void | ||
209 | 1845 | gsettings_changed (GSettings *settings, | ||
210 | 1846 | const char *key, | ||
211 | 1847 | GsdKeyboardManager *manager) | ||
212 | 1848 | { | ||
213 | 1849 | if (g_strcmp0 (key, KEY_REPEAT) == 0 || | ||
214 | 1836 | g_strcmp0 (key, KEY_INTERVAL) == 0 || | 1850 | g_strcmp0 (key, KEY_INTERVAL) == 0 || |
215 | 1837 | g_strcmp0 (key, KEY_DELAY) == 0) { | 1851 | g_strcmp0 (key, KEY_DELAY) == 0) { |
216 | 1838 | g_debug ("Key repeat setting '%s' changed, applying key repeat settings", key); | 1852 | g_debug ("Key repeat setting '%s' changed, applying key repeat settings", key); |
217 | @@ -2390,6 +2404,7 @@ | |||
218 | 2390 | #endif | 2404 | #endif |
219 | 2391 | 2405 | ||
220 | 2392 | manager->priv->settings = g_settings_new (GSD_KEYBOARD_DIR); | 2406 | manager->priv->settings = g_settings_new (GSD_KEYBOARD_DIR); |
221 | 2407 | manager->priv->gsettings = g_settings_new (GSETTINGS_KEYBOARD_SCHEMA); | ||
222 | 2393 | 2408 | ||
223 | 2394 | xkb_init (manager); | 2409 | xkb_init (manager); |
224 | 2395 | 2410 | ||
225 | @@ -2449,6 +2464,9 @@ | |||
226 | 2449 | 2464 | ||
227 | 2450 | g_signal_connect (G_OBJECT (manager->priv->settings), "changed", | 2465 | g_signal_connect (G_OBJECT (manager->priv->settings), "changed", |
228 | 2451 | G_CALLBACK (settings_changed), manager); | 2466 | G_CALLBACK (settings_changed), manager); |
229 | 2467 | g_signal_connect (G_OBJECT (manager->priv->gsettings), "changed", | ||
230 | 2468 | G_CALLBACK (gsettings_changed), manager); | ||
231 | 2469 | |||
232 | 2452 | g_signal_connect (G_OBJECT (manager->priv->input_sources_settings), "change-event", | 2470 | g_signal_connect (G_OBJECT (manager->priv->input_sources_settings), "change-event", |
233 | 2453 | G_CALLBACK (apply_input_sources_settings), manager); | 2471 | G_CALLBACK (apply_input_sources_settings), manager); |
234 | 2454 | 2472 | ||
235 | @@ -2572,12 +2590,29 @@ | |||
236 | 2572 | G_OBJECT_CLASS (gsd_keyboard_manager_parent_class)->finalize (object); | 2590 | G_OBJECT_CLASS (gsd_keyboard_manager_parent_class)->finalize (object); |
237 | 2573 | } | 2591 | } |
238 | 2574 | 2592 | ||
239 | 2593 | static void | ||
240 | 2594 | migrate_keyboard_settings (void) | ||
241 | 2595 | { | ||
242 | 2596 | GsdSettingsMigrateEntry entries[] = { | ||
243 | 2597 | { "repeat", "repeat", NULL }, | ||
244 | 2598 | { "repeat-interval", "repeat-interval", NULL }, | ||
245 | 2599 | { "delay", "delay", NULL } | ||
246 | 2600 | }; | ||
247 | 2601 | |||
248 | 2602 | gsd_settings_migrate_check ("org.gnome.settings-daemon.peripherals.keyboard.deprecated", | ||
249 | 2603 | "/org/gnome/settings-daemon/peripherals/keyboard/", | ||
250 | 2604 | "org.gnome.desktop.peripherals.keyboard", | ||
251 | 2605 | "/org/gnome/desktop/peripherals/keyboard/", | ||
252 | 2606 | entries, G_N_ELEMENTS (entries)); | ||
253 | 2607 | } | ||
254 | 2608 | |||
255 | 2575 | GsdKeyboardManager * | 2609 | GsdKeyboardManager * |
256 | 2576 | gsd_keyboard_manager_new (void) | 2610 | gsd_keyboard_manager_new (void) |
257 | 2577 | { | 2611 | { |
258 | 2578 | if (manager_object != NULL) { | 2612 | if (manager_object != NULL) { |
259 | 2579 | g_object_ref (manager_object); | 2613 | g_object_ref (manager_object); |
260 | 2580 | } else { | 2614 | } else { |
261 | 2615 | migrate_keyboard_settings (); | ||
262 | 2581 | manager_object = g_object_new (GSD_TYPE_KEYBOARD_MANAGER, NULL); | 2616 | manager_object = g_object_new (GSD_TYPE_KEYBOARD_MANAGER, NULL); |
263 | 2582 | g_object_add_weak_pointer (manager_object, | 2617 | g_object_add_weak_pointer (manager_object, |
264 | 2583 | (gpointer *) &manager_object); | 2618 | (gpointer *) &manager_object); |
265 | 2584 | 2619 | ||
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 | 44 | #include <X11/keysym.h> | 44 | #include <X11/keysym.h> |
271 | 45 | #include <X11/Xatom.h> | 45 | #include <X11/Xatom.h> |
272 | 46 | 46 | ||
273 | 47 | #include <gdesktop-enums.h> | ||
274 | 48 | |||
275 | 47 | #include <X11/extensions/XInput.h> | 49 | #include <X11/extensions/XInput.h> |
276 | 48 | #include <X11/extensions/XIproto.h> | 50 | #include <X11/extensions/XIproto.h> |
277 | 49 | 51 | ||
278 | @@ -51,30 +53,28 @@ | |||
279 | 51 | #include "gsd-mouse-manager.h" | 53 | #include "gsd-mouse-manager.h" |
280 | 52 | #include "gsd-input-helper.h" | 54 | #include "gsd-input-helper.h" |
281 | 53 | #include "gsd-enums.h" | 55 | #include "gsd-enums.h" |
282 | 56 | #include "gsd-settings-migrate.h" | ||
283 | 54 | 57 | ||
284 | 55 | #define GSD_MOUSE_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_MOUSE_MANAGER, GsdMouseManagerPrivate)) | 58 | #define GSD_MOUSE_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_MOUSE_MANAGER, GsdMouseManagerPrivate)) |
285 | 56 | 59 | ||
288 | 57 | #define SETTINGS_MOUSE_DIR "org.gnome.settings-daemon.peripherals.mouse" | 60 | #define GSD_SETTINGS_MOUSE_SCHEMA "org.gnome.settings-daemon.peripherals.mouse" |
289 | 58 | #define SETTINGS_TOUCHPAD_DIR "org.gnome.settings-daemon.peripherals.touchpad" | 61 | #define GSETTINGS_MOUSE_SCHEMA "org.gnome.desktop.peripherals.mouse" |
290 | 62 | #define GSETTINGS_TOUCHPAD_SCHEMA "org.gnome.desktop.peripherals.touchpad" | ||
291 | 59 | 63 | ||
292 | 60 | /* Keys for both touchpad and mouse */ | 64 | /* Keys for both touchpad and mouse */ |
293 | 61 | #define KEY_LEFT_HANDED "left-handed" /* a boolean for mouse, an enum for touchpad */ | 65 | #define KEY_LEFT_HANDED "left-handed" /* a boolean for mouse, an enum for touchpad */ |
296 | 62 | #define KEY_MOTION_ACCELERATION "motion-acceleration" | 66 | #define KEY_SPEED "speed" |
295 | 63 | #define KEY_MOTION_THRESHOLD "motion-threshold" | ||
297 | 64 | 67 | ||
298 | 65 | /* Touchpad settings */ | 68 | /* Touchpad settings */ |
299 | 66 | #define KEY_TOUCHPAD_DISABLE_W_TYPING "disable-while-typing" | ||
300 | 67 | #define KEY_PAD_HORIZ_SCROLL "horiz-scroll-enabled" | ||
301 | 68 | #define KEY_SCROLL_METHOD "scroll-method" | 69 | #define KEY_SCROLL_METHOD "scroll-method" |
302 | 69 | #define KEY_TAP_TO_CLICK "tap-to-click" | 70 | #define KEY_TAP_TO_CLICK "tap-to-click" |
304 | 70 | #define KEY_TOUCHPAD_ENABLED "touchpad-enabled" | 71 | #define KEY_SEND_EVENTS "send-events" |
305 | 71 | #define KEY_NATURAL_SCROLL_ENABLED "natural-scroll" | 72 | #define KEY_NATURAL_SCROLL_ENABLED "natural-scroll" |
306 | 72 | 73 | ||
307 | 73 | /* Mouse settings */ | 74 | /* Mouse settings */ |
308 | 74 | #define KEY_LOCATE_POINTER "locate-pointer" | 75 | #define KEY_LOCATE_POINTER "locate-pointer" |
309 | 75 | #define KEY_DWELL_CLICK_ENABLED "dwell-click-enabled" | 76 | #define KEY_DWELL_CLICK_ENABLED "dwell-click-enabled" |
310 | 76 | #define KEY_SECONDARY_CLICK_ENABLED "secondary-click-enabled" | 77 | #define KEY_SECONDARY_CLICK_ENABLED "secondary-click-enabled" |
311 | 77 | #define KEY_MIDDLE_BUTTON_EMULATION "middle-button-enabled" | ||
312 | 78 | 78 | ||
313 | 79 | struct GsdMouseManagerPrivate | 79 | struct GsdMouseManagerPrivate |
314 | 80 | { | 80 | { |
315 | @@ -82,6 +82,7 @@ | |||
316 | 82 | GSettings *touchpad_settings; | 82 | GSettings *touchpad_settings; |
317 | 83 | GSettings *mouse_settings; | 83 | GSettings *mouse_settings; |
318 | 84 | GSettings *mouse_a11y_settings; | 84 | GSettings *mouse_a11y_settings; |
319 | 85 | GSettings *gsd_mouse_settings; | ||
320 | 85 | GdkDeviceManager *device_manager; | 86 | GdkDeviceManager *device_manager; |
321 | 86 | guint device_added_id; | 87 | guint device_added_id; |
322 | 87 | guint device_removed_id; | 88 | guint device_removed_id; |
323 | @@ -408,6 +409,7 @@ | |||
324 | 408 | gfloat motion_acceleration; | 409 | gfloat motion_acceleration; |
325 | 409 | int motion_threshold; | 410 | int motion_threshold; |
326 | 410 | GSettings *settings; | 411 | GSettings *settings; |
327 | 412 | gdouble speed; | ||
328 | 411 | guint i; | 413 | guint i; |
329 | 412 | 414 | ||
330 | 413 | xdevice = open_gdk_device (device); | 415 | xdevice = open_gdk_device (device); |
331 | @@ -421,8 +423,11 @@ | |||
332 | 421 | else | 423 | else |
333 | 422 | settings = manager->priv->mouse_settings; | 424 | settings = manager->priv->mouse_settings; |
334 | 423 | 425 | ||
337 | 424 | /* Calculate acceleration */ | 426 | speed = g_settings_get_double (settings, KEY_SPEED); |
338 | 425 | motion_acceleration = g_settings_get_double (settings, KEY_MOTION_ACCELERATION); | 427 | |
339 | 428 | /* Calculate acceleration and threshold */ | ||
340 | 429 | motion_acceleration = (speed + 1) * 5; /* speed is [-1..1], map to [0..10] */ | ||
341 | 430 | motion_threshold = CLAMP (10 - floor (motion_acceleration), 1, 10); | ||
342 | 426 | 431 | ||
343 | 427 | if (motion_acceleration >= 1.0) { | 432 | if (motion_acceleration >= 1.0) { |
344 | 428 | /* we want to get the acceleration, with a resolution of 0.5 | 433 | /* we want to get the acceleration, with a resolution of 0.5 |
345 | @@ -449,8 +454,6 @@ | |||
346 | 449 | denominator = -1; | 454 | denominator = -1; |
347 | 450 | } | 455 | } |
348 | 451 | 456 | ||
349 | 452 | /* And threshold */ | ||
350 | 453 | motion_threshold = g_settings_get_int (settings, KEY_MOTION_THRESHOLD); | ||
351 | 454 | 457 | ||
352 | 455 | /* Get the list of feedbacks for the device */ | 458 | /* Get the list of feedbacks for the device */ |
353 | 456 | states = XGetFeedbackControl (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xdevice, &num_feedbacks); | 459 | states = XGetFeedbackControl (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xdevice, &num_feedbacks); |
354 | @@ -487,52 +490,6 @@ | |||
355 | 487 | XCloseDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xdevice); | 490 | XCloseDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xdevice); |
356 | 488 | } | 491 | } |
357 | 489 | 492 | ||
358 | 490 | static void | ||
359 | 491 | set_middle_button (GsdMouseManager *manager, | ||
360 | 492 | GdkDevice *device, | ||
361 | 493 | gboolean middle_button) | ||
362 | 494 | { | ||
363 | 495 | Atom prop; | ||
364 | 496 | XDevice *xdevice; | ||
365 | 497 | Atom type; | ||
366 | 498 | int format; | ||
367 | 499 | unsigned long nitems, bytes_after; | ||
368 | 500 | unsigned char *data; | ||
369 | 501 | int rc; | ||
370 | 502 | |||
371 | 503 | prop = XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), | ||
372 | 504 | "Evdev Middle Button Emulation", True); | ||
373 | 505 | |||
374 | 506 | if (!prop) /* no evdev devices */ | ||
375 | 507 | return; | ||
376 | 508 | |||
377 | 509 | xdevice = open_gdk_device (device); | ||
378 | 510 | if (xdevice == NULL) | ||
379 | 511 | return; | ||
380 | 512 | |||
381 | 513 | g_debug ("setting middle button on %s", gdk_device_get_name (device)); | ||
382 | 514 | |||
383 | 515 | gdk_error_trap_push (); | ||
384 | 516 | |||
385 | 517 | rc = XGetDeviceProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), | ||
386 | 518 | xdevice, prop, 0, 1, False, XA_INTEGER, &type, &format, | ||
387 | 519 | &nitems, &bytes_after, &data); | ||
388 | 520 | |||
389 | 521 | if (rc == Success && format == 8 && type == XA_INTEGER && nitems == 1) { | ||
390 | 522 | data[0] = middle_button ? 1 : 0; | ||
391 | 523 | |||
392 | 524 | XChangeDeviceProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), | ||
393 | 525 | xdevice, prop, type, format, PropModeReplace, data, nitems); | ||
394 | 526 | } | ||
395 | 527 | |||
396 | 528 | if (gdk_error_trap_pop ()) | ||
397 | 529 | g_warning ("Error in setting middle button emulation on \"%s\"", gdk_device_get_name (device)); | ||
398 | 530 | |||
399 | 531 | if (rc == Success) | ||
400 | 532 | XFree (data); | ||
401 | 533 | |||
402 | 534 | XCloseDevice (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), xdevice); | ||
403 | 535 | } | ||
404 | 536 | 493 | ||
405 | 537 | /* Ensure that syndaemon dies together with us, to avoid running several of | 494 | /* Ensure that syndaemon dies together with us, to avoid running several of |
406 | 538 | * them */ | 495 | * them */ |
407 | @@ -602,7 +559,6 @@ | |||
408 | 602 | 559 | ||
409 | 603 | if (error) { | 560 | if (error) { |
410 | 604 | g_warning ("Failed to launch syndaemon: %s", error->message); | 561 | g_warning ("Failed to launch syndaemon: %s", error->message); |
411 | 605 | g_settings_set_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_DISABLE_W_TYPING, FALSE); | ||
412 | 606 | g_error_free (error); | 562 | g_error_free (error); |
413 | 607 | } else { | 563 | } else { |
414 | 608 | g_child_watch_add (manager->priv->syndaemon_pid, syndaemon_died, manager); | 564 | g_child_watch_add (manager->priv->syndaemon_pid, syndaemon_died, manager); |
415 | @@ -889,7 +845,7 @@ | |||
416 | 889 | manager->priv->locate_pointer_spawned = (error == NULL); | 845 | manager->priv->locate_pointer_spawned = (error == NULL); |
417 | 890 | 846 | ||
418 | 891 | if (error) { | 847 | if (error) { |
420 | 892 | g_settings_set_boolean (manager->priv->mouse_settings, KEY_LOCATE_POINTER, FALSE); | 848 | g_settings_set_boolean (manager->priv->gsd_mouse_settings, KEY_LOCATE_POINTER, FALSE); |
421 | 893 | g_error_free (error); | 849 | g_error_free (error); |
422 | 894 | } | 850 | } |
423 | 895 | 851 | ||
424 | @@ -963,6 +919,22 @@ | |||
425 | 963 | } | 919 | } |
426 | 964 | } | 920 | } |
427 | 965 | 921 | ||
428 | 922 | static gboolean | ||
429 | 923 | get_touchpad_enabled (GsdMouseManager *manager) | ||
430 | 924 | { | ||
431 | 925 | GDesktopDeviceSendEvents send_events; | ||
432 | 926 | |||
433 | 927 | send_events = g_settings_get_enum (manager->priv->touchpad_settings, KEY_SEND_EVENTS); | ||
434 | 928 | |||
435 | 929 | if (send_events == G_DESKTOP_DEVICE_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE) { | ||
436 | 930 | /* FIXME: mouse_is_present() also finds internal ones... */ | ||
437 | 931 | return (!mouse_is_present () && !trackball_is_present ()); | ||
438 | 932 | |||
439 | 933 | } | ||
440 | 934 | |||
441 | 935 | return send_events == G_DESKTOP_DEVICE_SEND_EVENTS_ENABLED ? TRUE : FALSE; | ||
442 | 936 | } | ||
443 | 937 | |||
444 | 966 | static void | 938 | static void |
445 | 967 | set_mouse_settings (GsdMouseManager *manager, | 939 | set_mouse_settings (GsdMouseManager *manager, |
446 | 968 | GdkDevice *device) | 940 | GdkDevice *device) |
447 | @@ -974,13 +946,12 @@ | |||
448 | 974 | set_left_handed (manager, device, mouse_left_handed, touchpad_left_handed); | 946 | set_left_handed (manager, device, mouse_left_handed, touchpad_left_handed); |
449 | 975 | 947 | ||
450 | 976 | set_motion (manager, device); | 948 | set_motion (manager, device); |
451 | 977 | set_middle_button (manager, device, g_settings_get_boolean (manager->priv->mouse_settings, KEY_MIDDLE_BUTTON_EMULATION)); | ||
452 | 978 | 949 | ||
453 | 979 | set_tap_to_click (device, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TAP_TO_CLICK), touchpad_left_handed); | 950 | set_tap_to_click (device, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TAP_TO_CLICK), touchpad_left_handed); |
454 | 980 | set_scroll_method (manager, device, g_settings_get_enum (manager->priv->touchpad_settings, KEY_SCROLL_METHOD)); | 951 | set_scroll_method (manager, device, g_settings_get_enum (manager->priv->touchpad_settings, KEY_SCROLL_METHOD)); |
456 | 981 | set_horiz_scroll (device, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_PAD_HORIZ_SCROLL)); | 952 | set_horiz_scroll (device, TRUE); |
457 | 982 | set_natural_scroll (manager, device, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_NATURAL_SCROLL_ENABLED)); | 953 | set_natural_scroll (manager, device, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_NATURAL_SCROLL_ENABLED)); |
459 | 983 | if (g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_ENABLED) == FALSE) | 954 | if (!get_touchpad_enabled (manager)) |
460 | 984 | set_touchpad_disabled (device); | 955 | set_touchpad_disabled (device); |
461 | 985 | } | 956 | } |
462 | 986 | 957 | ||
463 | @@ -1075,11 +1046,8 @@ | |||
464 | 1075 | gboolean mouse_left_handed; | 1046 | gboolean mouse_left_handed; |
465 | 1076 | mouse_left_handed = g_settings_get_boolean (settings, KEY_LEFT_HANDED); | 1047 | mouse_left_handed = g_settings_get_boolean (settings, KEY_LEFT_HANDED); |
466 | 1077 | set_left_handed (manager, device, mouse_left_handed, get_touchpad_handedness (manager, mouse_left_handed)); | 1048 | set_left_handed (manager, device, mouse_left_handed, get_touchpad_handedness (manager, mouse_left_handed)); |
469 | 1078 | } else if (g_str_equal (key, KEY_MOTION_ACCELERATION) || | 1049 | } else if (g_str_equal (key, KEY_SPEED)) { |
468 | 1079 | g_str_equal (key, KEY_MOTION_THRESHOLD)) { | ||
470 | 1080 | set_motion (manager, device); | 1050 | set_motion (manager, device); |
471 | 1081 | } else if (g_str_equal (key, KEY_MIDDLE_BUTTON_EMULATION)) { | ||
472 | 1082 | set_middle_button (manager, device, g_settings_get_boolean (settings, KEY_MIDDLE_BUTTON_EMULATION)); | ||
473 | 1083 | } | 1051 | } |
474 | 1084 | } | 1052 | } |
475 | 1085 | g_list_free (devices); | 1053 | g_list_free (devices); |
476 | @@ -1092,11 +1060,6 @@ | |||
477 | 1092 | { | 1060 | { |
478 | 1093 | GList *devices, *l; | 1061 | GList *devices, *l; |
479 | 1094 | 1062 | ||
480 | 1095 | if (g_str_equal (key, KEY_TOUCHPAD_DISABLE_W_TYPING)) { | ||
481 | 1096 | set_disable_w_typing (manager, g_settings_get_boolean (manager->priv->touchpad_settings, key)); | ||
482 | 1097 | return; | ||
483 | 1098 | } | ||
484 | 1099 | |||
485 | 1100 | devices = gdk_device_manager_list_devices (manager->priv->device_manager, GDK_DEVICE_TYPE_SLAVE); | 1063 | devices = gdk_device_manager_list_devices (manager->priv->device_manager, GDK_DEVICE_TYPE_SLAVE); |
486 | 1101 | 1064 | ||
487 | 1102 | for (l = devices; l != NULL; l = l->next) { | 1065 | for (l = devices; l != NULL; l = l->next) { |
488 | @@ -1112,16 +1075,13 @@ | |||
489 | 1112 | get_touchpad_handedness (manager, mouse_left_handed)); | 1075 | get_touchpad_handedness (manager, mouse_left_handed)); |
490 | 1113 | } else if (g_str_equal (key, KEY_SCROLL_METHOD)) { | 1076 | } else if (g_str_equal (key, KEY_SCROLL_METHOD)) { |
491 | 1114 | set_scroll_method (manager, device, g_settings_get_enum (settings, key)); | 1077 | set_scroll_method (manager, device, g_settings_get_enum (settings, key)); |
497 | 1115 | set_horiz_scroll (device, g_settings_get_boolean (settings, KEY_PAD_HORIZ_SCROLL)); | 1078 | set_horiz_scroll (device, TRUE); |
498 | 1116 | } else if (g_str_equal (key, KEY_PAD_HORIZ_SCROLL)) { | 1079 | } else if (g_str_equal (key, KEY_SEND_EVENTS)) { |
499 | 1117 | set_horiz_scroll (device, g_settings_get_boolean (settings, key)); | 1080 | if (!get_touchpad_enabled (manager)) |
495 | 1118 | } else if (g_str_equal (key, KEY_TOUCHPAD_ENABLED)) { | ||
496 | 1119 | if (g_settings_get_boolean (settings, key) == FALSE) | ||
500 | 1120 | set_touchpad_disabled (device); | 1081 | set_touchpad_disabled (device); |
501 | 1121 | else | 1082 | else |
502 | 1122 | set_touchpad_enabled (gdk_x11_device_get_id (device)); | 1083 | set_touchpad_enabled (gdk_x11_device_get_id (device)); |
505 | 1123 | } else if (g_str_equal (key, KEY_MOTION_ACCELERATION) || | 1084 | } else if (g_str_equal (key, KEY_SPEED)) { |
504 | 1124 | g_str_equal (key, KEY_MOTION_THRESHOLD)) { | ||
506 | 1125 | set_motion (manager, device); | 1085 | set_motion (manager, device); |
507 | 1126 | } else if (g_str_equal (key, KEY_LEFT_HANDED)) { | 1086 | } else if (g_str_equal (key, KEY_LEFT_HANDED)) { |
508 | 1127 | gboolean mouse_left_handed; | 1087 | gboolean mouse_left_handed; |
509 | @@ -1133,8 +1093,8 @@ | |||
510 | 1133 | } | 1093 | } |
511 | 1134 | g_list_free (devices); | 1094 | g_list_free (devices); |
512 | 1135 | 1095 | ||
515 | 1136 | if (g_str_equal (key, KEY_TOUCHPAD_ENABLED) && | 1096 | if (g_str_equal (key, KEY_SEND_EVENTS) && |
516 | 1137 | g_settings_get_boolean (settings, key)) { | 1097 | get_touchpad_enabled (manager)) { |
517 | 1138 | devices = get_disabled_devices (manager->priv->device_manager); | 1098 | devices = get_disabled_devices (manager->priv->device_manager); |
518 | 1139 | for (l = devices; l != NULL; l = l->next) { | 1099 | for (l = devices; l != NULL; l = l->next) { |
519 | 1140 | int device_id; | 1100 | int device_id; |
520 | @@ -1150,8 +1110,34 @@ | |||
521 | 1150 | static void | 1110 | static void |
522 | 1151 | ensure_touchpad_active (GsdMouseManager *manager) | 1111 | ensure_touchpad_active (GsdMouseManager *manager) |
523 | 1152 | { | 1112 | { |
526 | 1153 | if (mouse_is_present () == FALSE && touchscreen_is_present () == FALSE && trackball_is_present () == FALSE && touchpad_is_present ()) | 1113 | GList *devices, *l; |
527 | 1154 | g_settings_set_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_ENABLED, TRUE); | 1114 | |
528 | 1115 | if (get_touchpad_enabled (manager)) { | ||
529 | 1116 | devices = get_disabled_devices (manager->priv->device_manager); | ||
530 | 1117 | for (l = devices; l != NULL; l = l->next) { | ||
531 | 1118 | int device_id; | ||
532 | 1119 | |||
533 | 1120 | device_id = GPOINTER_TO_INT (l->data); | ||
534 | 1121 | set_touchpad_enabled (device_id); | ||
535 | 1122 | } | ||
536 | 1123 | g_list_free (devices); | ||
537 | 1124 | } else { | ||
538 | 1125 | devices = gdk_device_manager_list_devices (manager->priv->device_manager, | ||
539 | 1126 | GDK_DEVICE_TYPE_SLAVE); | ||
540 | 1127 | |||
541 | 1128 | for (l = devices; l != NULL; l = l->next) { | ||
542 | 1129 | GdkDevice *device = l->data; | ||
543 | 1130 | |||
544 | 1131 | if (device_is_ignored (manager, device)) | ||
545 | 1132 | continue; | ||
546 | 1133 | if (gdk_device_get_source (device) != GDK_SOURCE_TOUCHPAD) | ||
547 | 1134 | continue; | ||
548 | 1135 | |||
549 | 1136 | set_touchpad_disabled (device); | ||
550 | 1137 | } | ||
551 | 1138 | |||
552 | 1139 | g_list_free (devices); | ||
553 | 1140 | } | ||
554 | 1155 | } | 1141 | } |
555 | 1156 | 1142 | ||
556 | 1157 | static void | 1143 | static void |
557 | @@ -1170,7 +1156,10 @@ | |||
558 | 1170 | } | 1156 | } |
559 | 1171 | 1157 | ||
560 | 1172 | /* If a touchpad was to appear... */ | 1158 | /* If a touchpad was to appear... */ |
562 | 1173 | set_disable_w_typing (manager, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_DISABLE_W_TYPING)); | 1159 | set_disable_w_typing (manager, TRUE); |
563 | 1160 | |||
564 | 1161 | /* If a mouse was to appear... */ | ||
565 | 1162 | ensure_touchpad_active (manager); | ||
566 | 1174 | } | 1163 | } |
567 | 1175 | } | 1164 | } |
568 | 1176 | 1165 | ||
569 | @@ -1191,7 +1180,7 @@ | |||
570 | 1191 | run_custom_command (device, COMMAND_DEVICE_REMOVED); | 1180 | run_custom_command (device, COMMAND_DEVICE_REMOVED); |
571 | 1192 | 1181 | ||
572 | 1193 | /* If a touchpad was to disappear... */ | 1182 | /* If a touchpad was to disappear... */ |
574 | 1194 | set_disable_w_typing (manager, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_DISABLE_W_TYPING)); | 1183 | set_disable_w_typing (manager, TRUE); |
575 | 1195 | 1184 | ||
576 | 1196 | ensure_touchpad_active (manager); | 1185 | ensure_touchpad_active (manager); |
577 | 1197 | } | 1186 | } |
578 | @@ -1227,25 +1216,29 @@ | |||
579 | 1227 | 1216 | ||
580 | 1228 | set_devicepresence_handler (manager); | 1217 | set_devicepresence_handler (manager); |
581 | 1229 | 1218 | ||
585 | 1230 | manager->priv->mouse_settings = g_settings_new (SETTINGS_MOUSE_DIR); | 1219 | manager->priv->gsd_mouse_settings = g_settings_new (GSD_SETTINGS_MOUSE_SCHEMA); |
586 | 1231 | g_signal_connect (manager->priv->mouse_settings, "changed", | 1220 | g_signal_connect (manager->priv->gsd_mouse_settings, "changed", |
587 | 1232 | G_CALLBACK (mouse_callback), manager); | 1221 | G_CALLBACK (mouse_callback), manager); |
588 | 1233 | 1222 | ||
589 | 1234 | manager->priv->mouse_a11y_settings = g_settings_new ("org.gnome.desktop.a11y.mouse"); | 1223 | manager->priv->mouse_a11y_settings = g_settings_new ("org.gnome.desktop.a11y.mouse"); |
590 | 1235 | g_signal_connect (manager->priv->mouse_a11y_settings, "changed", | 1224 | g_signal_connect (manager->priv->mouse_a11y_settings, "changed", |
591 | 1236 | G_CALLBACK (mouse_callback), manager); | 1225 | G_CALLBACK (mouse_callback), manager); |
592 | 1237 | 1226 | ||
594 | 1238 | manager->priv->touchpad_settings = g_settings_new (SETTINGS_TOUCHPAD_DIR); | 1227 | manager->priv->mouse_settings = g_settings_new (GSETTINGS_MOUSE_SCHEMA); |
595 | 1228 | g_signal_connect (manager->priv->mouse_settings, "changed", | ||
596 | 1229 | G_CALLBACK (mouse_callback), manager); | ||
597 | 1230 | |||
598 | 1231 | manager->priv->touchpad_settings = g_settings_new (GSETTINGS_TOUCHPAD_SCHEMA); | ||
599 | 1239 | g_signal_connect (manager->priv->touchpad_settings, "changed", | 1232 | g_signal_connect (manager->priv->touchpad_settings, "changed", |
600 | 1240 | G_CALLBACK (touchpad_callback), manager); | 1233 | G_CALLBACK (touchpad_callback), manager); |
601 | 1241 | 1234 | ||
602 | 1242 | manager->priv->syndaemon_spawned = FALSE; | 1235 | manager->priv->syndaemon_spawned = FALSE; |
603 | 1243 | 1236 | ||
605 | 1244 | set_locate_pointer (manager, g_settings_get_boolean (manager->priv->mouse_settings, KEY_LOCATE_POINTER)); | 1237 | set_locate_pointer (manager, g_settings_get_boolean (manager->priv->gsd_mouse_settings, KEY_LOCATE_POINTER)); |
606 | 1245 | set_mousetweaks_daemon (manager, | 1238 | set_mousetweaks_daemon (manager, |
607 | 1246 | g_settings_get_boolean (manager->priv->mouse_a11y_settings, KEY_DWELL_CLICK_ENABLED), | 1239 | g_settings_get_boolean (manager->priv->mouse_a11y_settings, KEY_DWELL_CLICK_ENABLED), |
608 | 1247 | g_settings_get_boolean (manager->priv->mouse_a11y_settings, KEY_SECONDARY_CLICK_ENABLED)); | 1240 | g_settings_get_boolean (manager->priv->mouse_a11y_settings, KEY_SECONDARY_CLICK_ENABLED)); |
610 | 1248 | set_disable_w_typing (manager, g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_DISABLE_W_TYPING)); | 1241 | set_disable_w_typing (manager, TRUE); |
611 | 1249 | 1242 | ||
612 | 1250 | devices = gdk_device_manager_list_devices (manager->priv->device_manager, GDK_DEVICE_TYPE_SLAVE); | 1243 | devices = gdk_device_manager_list_devices (manager->priv->device_manager, GDK_DEVICE_TYPE_SLAVE); |
613 | 1251 | for (l = devices; l != NULL; l = l->next) { | 1244 | for (l = devices; l != NULL; l = l->next) { |
614 | @@ -1267,7 +1260,7 @@ | |||
615 | 1267 | 1260 | ||
616 | 1268 | ensure_touchpad_active (manager); | 1261 | ensure_touchpad_active (manager); |
617 | 1269 | 1262 | ||
619 | 1270 | if (g_settings_get_boolean (manager->priv->touchpad_settings, KEY_TOUCHPAD_ENABLED)) { | 1263 | if (get_touchpad_enabled (manager)) { |
620 | 1271 | devices = get_disabled_devices (manager->priv->device_manager); | 1264 | devices = get_disabled_devices (manager->priv->device_manager); |
621 | 1272 | for (l = devices; l != NULL; l = l->next) { | 1265 | for (l = devices; l != NULL; l = l->next) { |
622 | 1273 | int device_id; | 1266 | int device_id; |
623 | @@ -1348,12 +1341,81 @@ | |||
624 | 1348 | G_OBJECT_CLASS (gsd_mouse_manager_parent_class)->finalize (object); | 1341 | G_OBJECT_CLASS (gsd_mouse_manager_parent_class)->finalize (object); |
625 | 1349 | } | 1342 | } |
626 | 1350 | 1343 | ||
627 | 1344 | static GVariant * | ||
628 | 1345 | map_speed (GVariant *variant) | ||
629 | 1346 | { | ||
630 | 1347 | gdouble value; | ||
631 | 1348 | |||
632 | 1349 | value = g_variant_get_double (variant); | ||
633 | 1350 | |||
634 | 1351 | /* Remap from [0..10] to [-1..1] */ | ||
635 | 1352 | value = (value / 5) - 1; | ||
636 | 1353 | |||
637 | 1354 | return g_variant_new_double (value); | ||
638 | 1355 | } | ||
639 | 1356 | |||
640 | 1357 | static GVariant * | ||
641 | 1358 | map_send_events (GVariant *variant) | ||
642 | 1359 | { | ||
643 | 1360 | gboolean enabled; | ||
644 | 1361 | |||
645 | 1362 | enabled = g_variant_get_boolean (variant); | ||
646 | 1363 | |||
647 | 1364 | if (enabled) { | ||
648 | 1365 | return g_variant_new_string ("enabled"); | ||
649 | 1366 | } else { | ||
650 | 1367 | return g_variant_new_string ("disabled"); | ||
651 | 1368 | } | ||
652 | 1369 | } | ||
653 | 1370 | |||
654 | 1371 | static void | ||
655 | 1372 | migrate_mouse_settings (void) | ||
656 | 1373 | { | ||
657 | 1374 | GsdSettingsMigrateEntry trackball_entries[] = { | ||
658 | 1375 | { "scroll-wheel-emulation-button", "scroll-wheel-emulation-button", NULL } | ||
659 | 1376 | }; | ||
660 | 1377 | GsdSettingsMigrateEntry mouse_entries[] = { | ||
661 | 1378 | { "left-handed", "left-handed", NULL }, | ||
662 | 1379 | { "motion-acceleration", "speed", map_speed }, | ||
663 | 1380 | { "motion-threshold", NULL, NULL }, | ||
664 | 1381 | { "middle-button-enabled", NULL, NULL }, | ||
665 | 1382 | }; | ||
666 | 1383 | GsdSettingsMigrateEntry touchpad_entries[] = { | ||
667 | 1384 | { "disable-while-typing", NULL, NULL }, | ||
668 | 1385 | { "horiz-scroll-enabled", NULL, NULL }, | ||
669 | 1386 | { "scroll-method", "scroll-method", NULL }, | ||
670 | 1387 | { "tap-to-click", "tap-to-click", NULL }, | ||
671 | 1388 | { "touchpad-enabled", "send-events", map_send_events }, | ||
672 | 1389 | { "left-handed", "left-handed", NULL }, | ||
673 | 1390 | { "motion-acceleration", "speed", map_speed }, | ||
674 | 1391 | { "motion-threshold", NULL, NULL }, | ||
675 | 1392 | { "natural-scroll", "natural-scroll", NULL } | ||
676 | 1393 | }; | ||
677 | 1394 | |||
678 | 1395 | gsd_settings_migrate_check ("org.gnome.settings-daemon.peripherals.trackball.deprecated", | ||
679 | 1396 | "/org/gnome/settings-daemon/peripherals/trackball/", | ||
680 | 1397 | "org.gnome.desktop.peripherals.trackball", | ||
681 | 1398 | "/org/gnome/desktop/peripherals/trackball/", | ||
682 | 1399 | trackball_entries, G_N_ELEMENTS (trackball_entries)); | ||
683 | 1400 | gsd_settings_migrate_check ("org.gnome.settings-daemon.peripherals.mouse.deprecated", | ||
684 | 1401 | "/org/gnome/settings-daemon/peripherals/mouse/", | ||
685 | 1402 | "org.gnome.desktop.peripherals.mouse", | ||
686 | 1403 | "/org/gnome/desktop/peripherals/mouse/", | ||
687 | 1404 | mouse_entries, G_N_ELEMENTS (mouse_entries)); | ||
688 | 1405 | gsd_settings_migrate_check ("org.gnome.settings-daemon.peripherals.touchpad.deprecated", | ||
689 | 1406 | "/org/gnome/settings-daemon/peripherals/touchpad/", | ||
690 | 1407 | "org.gnome.desktop.peripherals.touchpad", | ||
691 | 1408 | "/org/gnome/desktop/peripherals/touchpad/", | ||
692 | 1409 | touchpad_entries, G_N_ELEMENTS (touchpad_entries)); | ||
693 | 1410 | } | ||
694 | 1411 | |||
695 | 1351 | GsdMouseManager * | 1412 | GsdMouseManager * |
696 | 1352 | gsd_mouse_manager_new (void) | 1413 | gsd_mouse_manager_new (void) |
697 | 1353 | { | 1414 | { |
698 | 1354 | if (manager_object != NULL) { | 1415 | if (manager_object != NULL) { |
699 | 1355 | g_object_ref (manager_object); | 1416 | g_object_ref (manager_object); |
700 | 1356 | } else { | 1417 | } else { |
701 | 1418 | migrate_mouse_settings (); | ||
702 | 1357 | manager_object = g_object_new (GSD_TYPE_MOUSE_MANAGER, NULL); | 1419 | manager_object = g_object_new (GSD_TYPE_MOUSE_MANAGER, NULL); |
703 | 1358 | g_object_add_weak_pointer (manager_object, | 1420 | g_object_add_weak_pointer (manager_object, |
704 | 1359 | (gpointer *) &manager_object); | 1421 | (gpointer *) &manager_object); |