Merge lp:~3v1n0/unity-control-center/grouped-compiz-gsettings-support into lp:unity-control-center
- grouped-compiz-gsettings-support
- Merge into trunk
Proposed by
Marco Trevisan (Treviño)
Status: | Merged |
---|---|
Approved by: | Sebastien Bacher |
Approved revision: | no longer in the source branch. |
Merged at revision: | 12886 |
Proposed branch: | lp:~3v1n0/unity-control-center/grouped-compiz-gsettings-support |
Merge into: | lp:unity-control-center |
Diff against target: |
708 lines (+364/-83) 1 file modified
panels/appearance/cc-appearance-panel.c (+364/-83) |
To merge this branch: | bzr merge lp:~3v1n0/unity-control-center/grouped-compiz-gsettings-support |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Sebastien Bacher | Approve | ||
Review via email: mp+326310@code.launchpad.net |
Commit message
Appearance: create GroupedGSettings class to manage group of gsettings sharing the schema
Settings might have the same schema, but different path. With this class we manage them
all at once. In this case we use this to correctly read the setting values depending on
the compiz profile we're actually using.
Description of the change
To post a comment you must log in.
- 12908. By Marco Trevisan (Treviño)
-
Appearance: code cleanup
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'panels/appearance/cc-appearance-panel.c' |
2 | --- panels/appearance/cc-appearance-panel.c 2016-07-05 14:26:25 +0000 |
3 | +++ panels/appearance/cc-appearance-panel.c 2017-06-27 16:08:20 +0000 |
4 | @@ -5,15 +5,15 @@ |
5 | * it under the terms of the GNU General Public License as published by |
6 | * the Free Software Foundation, either version 2 of the License, or |
7 | * (at your option) any later version. |
8 | - * |
9 | + * |
10 | * This program is distributed in the hope that it will be useful, |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | * GNU General Public License for more details. |
14 | - * |
15 | + * |
16 | * You should have received a copy of the GNU General Public License |
17 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
18 | - * |
19 | + * |
20 | * Author: Thomas Wood <thomas.wood@intel.com> |
21 | * |
22 | */ |
23 | @@ -55,6 +55,10 @@ |
24 | #define APPEARANCE_PANEL_PRIVATE(o) \ |
25 | (G_TYPE_INSTANCE_GET_PRIVATE ((o), CC_TYPE_APPEARANCE_PANEL, CcAppearancePanelPrivate)) |
26 | |
27 | +typedef struct _GroupedGSettings GroupedGSettings; |
28 | +typedef struct _GroupedGSettingsClass GroupedGSettingsClass; |
29 | +typedef struct _GroupedGSettingsPrivate GroupedGSettingsPrivate; |
30 | + |
31 | struct _CcAppearancePanelPrivate |
32 | { |
33 | GtkBuilder *builder; |
34 | @@ -70,11 +74,15 @@ |
35 | GSettings *settings; |
36 | GSettings *interface_settings; |
37 | GSettings *wm_theme_settings; |
38 | - GSettings *unity_settings; |
39 | - GSettings *compizcore_settings; |
40 | GSettings *unity_own_settings; |
41 | GSettings *unity_launcher_settings; |
42 | |
43 | + GroupedGSettings *unity_compiz_gs; |
44 | + GroupedGSettings *compizcore_compiz_gs; |
45 | + GSettings *compiz_settings; |
46 | + GSettings *compizcore_settings; |
47 | + GSettings *unity_settings; |
48 | + |
49 | GnomeDesktopThumbnailFactory *thumb_factory; |
50 | |
51 | CcAppearanceItem *current_background; |
52 | @@ -98,7 +106,13 @@ |
53 | #endif |
54 | }; |
55 | |
56 | -#define UNITY_GSETTINGS_SCHEMA "org.compiz.unityshell" |
57 | +#define COMPIZ_GSETTINGS_SCHEMA "org.compiz" |
58 | +#define COMPIZ_CURRENT_PROFILE_KEY "current-profile" |
59 | + |
60 | +#define UNITY_NORMAL_PROFILE "unity" |
61 | +#define UNITY_LOWGFX_PROFILE "unity-lowgfx" |
62 | + |
63 | +#define UNITY_GSETTINGS_SCHEMA COMPIZ_GSETTINGS_SCHEMA ".unityshell" |
64 | #define UNITY_PROFILE_PATH "/org/compiz/profiles/%s/plugins/" |
65 | #define UNITY_GSETTINGS_PATH UNITY_PROFILE_PATH"unityshell/" |
66 | #define UNITY_ICONSIZE_KEY "icon-size" |
67 | @@ -107,7 +121,7 @@ |
68 | #define UNITY_LAUNCHERREVEAL_KEY "reveal-trigger" |
69 | #define CANONICAL_DESKTOP_INTERFACE "com.canonical.desktop.interface" |
70 | |
71 | -#define COMPIZCORE_GSETTINGS_SCHEMA "org.compiz.core" |
72 | +#define COMPIZCORE_GSETTINGS_SCHEMA COMPIZ_GSETTINGS_SCHEMA ".core" |
73 | #define COMPIZCORE_GSETTINGS_PATH UNITY_PROFILE_PATH"core/" |
74 | #define COMPIZCORE_HSIZE_KEY "hsize" |
75 | #define COMPIZCORE_VSIZE_KEY "vsize" |
76 | @@ -211,12 +225,30 @@ |
77 | priv->wm_theme_settings = NULL; |
78 | } |
79 | |
80 | + if (priv->unity_compiz_gs) |
81 | + { |
82 | + g_object_unref (priv->unity_compiz_gs); |
83 | + priv->unity_compiz_gs = NULL; |
84 | + } |
85 | + |
86 | + if (priv->compizcore_compiz_gs) |
87 | + { |
88 | + g_object_unref (priv->compizcore_compiz_gs); |
89 | + priv->compizcore_compiz_gs = NULL; |
90 | + } |
91 | + |
92 | if (priv->unity_settings) |
93 | { |
94 | g_object_unref (priv->unity_settings); |
95 | priv->unity_settings = NULL; |
96 | } |
97 | |
98 | + if (priv->compiz_settings) |
99 | + { |
100 | + g_object_unref (priv->compiz_settings); |
101 | + priv->compiz_settings = NULL; |
102 | + } |
103 | + |
104 | if (priv->compizcore_settings) |
105 | { |
106 | g_object_unref (priv->compizcore_settings); |
107 | @@ -291,6 +323,239 @@ |
108 | { |
109 | } |
110 | |
111 | +/* Implementation of GroupedGSettings a class to manage multiple gsettings |
112 | + * who share schema but with different paths |
113 | + */ |
114 | +#define IS_GSETTINGS_GROUPED(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \ |
115 | + grouped_gsettings_get_type ())) |
116 | + |
117 | +GType grouped_gsettings_get_type (void) G_GNUC_CONST; |
118 | + |
119 | +struct _GroupedGSettings { |
120 | + GObject parent_instance; |
121 | + GroupedGSettingsPrivate *priv; |
122 | +}; |
123 | + |
124 | +struct _GroupedGSettingsClass { |
125 | + GObjectClass parent_class; |
126 | +}; |
127 | + |
128 | +struct _GroupedGSettingsPrivate |
129 | +{ |
130 | + GList *settings_list; |
131 | + GSettings *default_gs; |
132 | + GSettings **remote_gs; |
133 | +}; |
134 | + |
135 | +G_DEFINE_TYPE (GroupedGSettings, grouped_gsettings, G_TYPE_OBJECT) |
136 | + |
137 | +static void |
138 | +grouped_gsettings_dispose (GObject *object) |
139 | +{ |
140 | + GroupedGSettings *self = (GroupedGSettings *) object; |
141 | + |
142 | + if (self->priv->settings_list) |
143 | + { |
144 | + g_list_free_full (self->priv->settings_list, g_object_unref); |
145 | + self->priv->settings_list = NULL; |
146 | + } |
147 | + |
148 | + if (G_OBJECT_CLASS (grouped_gsettings_parent_class)) |
149 | + G_OBJECT_CLASS (grouped_gsettings_parent_class)->dispose (object); |
150 | +} |
151 | + |
152 | +static void |
153 | +grouped_gsettings_class_init (GroupedGSettingsClass *klass) |
154 | +{ |
155 | + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); |
156 | + |
157 | + g_type_class_add_private (klass, sizeof (GroupedGSettingsPrivate)); |
158 | + |
159 | + gobject_class->dispose = grouped_gsettings_dispose; |
160 | + |
161 | + g_signal_new ("changed", G_TYPE_FROM_CLASS (klass), |
162 | + G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, 0, |
163 | + NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, |
164 | + 1, G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE); |
165 | +} |
166 | + |
167 | +static void |
168 | +grouped_gsettings_init (GroupedGSettings *self) |
169 | +{ |
170 | + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, grouped_gsettings_get_type (), |
171 | + GroupedGSettingsPrivate); |
172 | +} |
173 | + |
174 | +static void |
175 | +on_default_settings_changed (GSettings *settings, |
176 | + gchar *key, |
177 | + GroupedGSettings *self) |
178 | +{ |
179 | + gchar *signal = g_strdup_printf ("changed::%s", key); |
180 | + g_signal_emit_by_name (self, signal, key); |
181 | + g_free (signal); |
182 | +} |
183 | + |
184 | +static GSettings * |
185 | +grouped_gsettings_peek_default (GroupedGSettings *self) |
186 | +{ |
187 | + g_return_val_if_fail (IS_GSETTINGS_GROUPED (self), NULL); |
188 | + return self->priv->default_gs; |
189 | +} |
190 | + |
191 | +static void |
192 | +grouped_gsettings_set_default_profile (GroupedGSettings *self, |
193 | + const gchar *profile) |
194 | +{ |
195 | + GList *l; |
196 | + GroupedGSettingsPrivate *priv; |
197 | + |
198 | + g_return_if_fail (IS_GSETTINGS_GROUPED (self)); |
199 | + g_return_if_fail (profile); |
200 | + |
201 | + priv = self->priv; |
202 | + |
203 | + for (l = priv->settings_list; l; l = l->next) |
204 | + { |
205 | + GSettings *settings; |
206 | + const gchar *settings_profile; |
207 | + |
208 | + settings = l->data; |
209 | + settings_profile = g_object_get_data (G_OBJECT (settings), "profile"); |
210 | + |
211 | + if (g_strcmp0 (settings_profile, profile) == 0) |
212 | + { |
213 | + if (priv->default_gs == settings) |
214 | + { |
215 | + return; |
216 | + } |
217 | + |
218 | + if (priv->default_gs) |
219 | + { |
220 | + g_signal_handlers_block_by_func (priv->default_gs, |
221 | + on_default_settings_changed, self); |
222 | + } |
223 | + |
224 | + priv->default_gs = settings; |
225 | + g_signal_handlers_unblock_by_func (settings, |
226 | + on_default_settings_changed, self); |
227 | + |
228 | + if (priv->remote_gs) |
229 | + { |
230 | + if (G_IS_SETTINGS (*priv->remote_gs)) |
231 | + g_object_unref (*priv->remote_gs); |
232 | + |
233 | + *priv->remote_gs = g_object_ref (settings); |
234 | + } |
235 | + |
236 | + return; |
237 | + } |
238 | + } |
239 | +} |
240 | + |
241 | +static void |
242 | +grouped_gsettings_reset (GroupedGSettings *self, const gchar *key) |
243 | +{ |
244 | + g_return_if_fail (IS_GSETTINGS_GROUPED (self)); |
245 | + g_list_foreach (self->priv->settings_list, |
246 | + (GFunc) g_settings_reset, (gpointer) key); |
247 | +} |
248 | + |
249 | +static void |
250 | +grouped_gsettings_set_value (GroupedGSettings *self, |
251 | + const gchar *key, |
252 | + GVariant *value) |
253 | +{ |
254 | + GList *l; |
255 | + g_return_if_fail (IS_GSETTINGS_GROUPED (self)); |
256 | + |
257 | + for (l = self->priv->settings_list; l; l = l->next) |
258 | + g_settings_set_value (G_SETTINGS (l->data), key, value); |
259 | +} |
260 | + |
261 | +static GSettings * |
262 | +grouped_gsettings_add (GroupedGSettings *self, |
263 | + GSettingsSchema *settings_schema, |
264 | + const gchar *settings_path, |
265 | + const gchar *profile, |
266 | + GSettings **remote_settings) |
267 | +{ |
268 | + GSettings *settings; |
269 | + |
270 | + g_return_val_if_fail (IS_GSETTINGS_GROUPED (self), NULL); |
271 | + |
272 | + settings = g_settings_new_full (settings_schema, /*backend*/ NULL, settings_path); |
273 | + self->priv->settings_list = g_list_prepend (self->priv->settings_list, settings); |
274 | + self->priv->remote_gs = remote_settings; |
275 | + |
276 | + g_signal_connect (settings, "changed", G_CALLBACK (on_default_settings_changed), self); |
277 | + g_signal_handlers_block_by_func (settings, on_default_settings_changed, self); |
278 | + |
279 | + if (!profile) |
280 | + { |
281 | + profile = settings_path; |
282 | + } |
283 | + |
284 | + g_object_set_data_full (G_OBJECT (settings), "profile", |
285 | + (gpointer) g_strdup (profile), g_free); |
286 | + |
287 | + if (!self->priv->default_gs) |
288 | + { |
289 | + grouped_gsettings_set_default_profile (self, profile); |
290 | + } |
291 | + |
292 | + return settings; |
293 | +} |
294 | + |
295 | + |
296 | +static GSettings * |
297 | +compiz_grouped_gsettings_add (GroupedGSettings *self, |
298 | + GSettingsSchema *settings_schema, |
299 | + const gchar *settings_base_path, |
300 | + const gchar *compiz_profile, |
301 | + GSettings **remote_settings) |
302 | +{ |
303 | + GSettings *settings; |
304 | + gchar *settings_path; |
305 | + |
306 | + compiz_profile = compiz_profile ? compiz_profile : UNITY_NORMAL_PROFILE; |
307 | + settings_path = g_strdup_printf (settings_base_path, compiz_profile); |
308 | + settings = grouped_gsettings_add (self, settings_schema, settings_path, |
309 | + compiz_profile, remote_settings); |
310 | + g_free (settings_path); |
311 | + |
312 | + return settings; |
313 | +} |
314 | + |
315 | +GroupedGSettings * |
316 | +compiz_grouped_gsettings_new (GSettingsSchema *settings_schema, |
317 | + GSettings *compiz_settings, |
318 | + const gchar *settings_base_path, |
319 | + GSettings **remote_settings) |
320 | +{ |
321 | + GroupedGSettings *ggs; |
322 | + GSettings *settings; |
323 | + gchar *compiz_profile; |
324 | + |
325 | + g_return_val_if_fail (settings_base_path, NULL); |
326 | + |
327 | + ggs = g_object_new (grouped_gsettings_get_type (), NULL); |
328 | + compiz_profile = g_settings_get_string (compiz_settings, |
329 | + COMPIZ_CURRENT_PROFILE_KEY); |
330 | + |
331 | + compiz_grouped_gsettings_add (ggs, settings_schema, settings_base_path, |
332 | + UNITY_NORMAL_PROFILE, remote_settings); |
333 | + compiz_grouped_gsettings_add (ggs, settings_schema, settings_base_path, |
334 | + UNITY_LOWGFX_PROFILE, remote_settings); |
335 | + |
336 | + grouped_gsettings_set_default_profile (ggs, compiz_profile); |
337 | + g_free (compiz_profile); |
338 | + |
339 | + return ggs; |
340 | +} |
341 | + |
342 | +/* GroupedGSettings definition end */ |
343 | + |
344 | static void |
345 | source_update_edit_box (CcAppearancePanelPrivate *priv, |
346 | gboolean initial) |
347 | @@ -1387,11 +1652,11 @@ |
348 | } |
349 | |
350 | static void |
351 | -ext_iconsize_changed_callback (GSettings* settings, |
352 | - guint key, |
353 | +ext_iconsize_changed_callback (GroupedGSettings* compiz_gs, |
354 | + gchar *key, |
355 | gpointer user_data) |
356 | { |
357 | - iconsize_widget_refresh (GTK_ADJUSTMENT (user_data), settings); |
358 | + iconsize_widget_refresh (GTK_ADJUSTMENT (user_data), grouped_gsettings_peek_default (compiz_gs)); |
359 | } |
360 | |
361 | static gchar * |
362 | @@ -1401,9 +1666,9 @@ |
363 | } |
364 | |
365 | static void |
366 | -on_iconsize_changed (GtkAdjustment *adj, GSettings *unity_settings) |
367 | +on_iconsize_changed (GtkAdjustment *adj, CcAppearancePanel *self) |
368 | { |
369 | - g_settings_set_int (unity_settings, UNITY_ICONSIZE_KEY, (gint)gtk_adjustment_get_value (adj) * 2); |
370 | + grouped_gsettings_set_value (self->priv->unity_compiz_gs, UNITY_ICONSIZE_KEY, g_variant_new_int32 ((gint) gtk_adjustment_get_value (adj) * 2)); |
371 | } |
372 | |
373 | static void |
374 | @@ -1459,8 +1724,8 @@ |
375 | } |
376 | |
377 | static void |
378 | -ext_hidelauncher_changed_callback (GSettings* settings, |
379 | - guint key, |
380 | +ext_hidelauncher_changed_callback (GroupedGSettings* compiz_gs, |
381 | + gchar *key, |
382 | gpointer user_data) |
383 | { |
384 | hidelauncher_widget_refresh (CC_APPEARANCE_PANEL (user_data)); |
385 | @@ -1485,7 +1750,7 @@ |
386 | } |
387 | |
388 | /* 3d */ |
389 | - g_settings_set_int (self->priv->unity_settings, UNITY_LAUNCHERHIDE_KEY, value); |
390 | + grouped_gsettings_set_value (self->priv->unity_compiz_gs, UNITY_LAUNCHERHIDE_KEY, g_variant_new_int32 (value)); |
391 | hidelauncher_set_sensitivity_reveal (self, (value != -1)); |
392 | } |
393 | |
394 | @@ -1507,8 +1772,8 @@ |
395 | } |
396 | |
397 | static void |
398 | -ext_reveallauncher_changed_callback (GSettings* settings, |
399 | - guint key, |
400 | +ext_reveallauncher_changed_callback (GroupedGSettings* compiz_gs, |
401 | + gchar *key, |
402 | gpointer user_data) |
403 | { |
404 | reveallauncher_widget_refresh (CC_APPEARANCE_PANEL (user_data)); |
405 | @@ -1526,7 +1791,7 @@ |
406 | if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (WID ("unity_reveal_spot_left")))) |
407 | reveal_spot = 0; |
408 | |
409 | - g_settings_set_int (priv->unity_settings, UNITY_LAUNCHERREVEAL_KEY, reveal_spot); |
410 | + grouped_gsettings_set_value (priv->unity_compiz_gs, UNITY_LAUNCHERREVEAL_KEY, g_variant_new_int32 (reveal_spot)); |
411 | reveallauncher_widget_refresh (self); |
412 | } |
413 | |
414 | @@ -1538,11 +1803,11 @@ |
415 | } |
416 | |
417 | static void |
418 | -ext_launchersensitivity_changed_callback (GSettings* settings, |
419 | - guint key, |
420 | +ext_launchersensitivity_changed_callback (GroupedGSettings* compiz_gs, |
421 | + gchar *key, |
422 | gpointer user_data) |
423 | { |
424 | - launcher_sensitivity_widget_refresh (GTK_ADJUSTMENT (user_data), settings); |
425 | + launcher_sensitivity_widget_refresh (GTK_ADJUSTMENT (user_data), grouped_gsettings_peek_default (compiz_gs)); |
426 | } |
427 | |
428 | static void |
429 | @@ -1552,7 +1817,7 @@ |
430 | CcAppearancePanelPrivate *priv = self->priv; |
431 | gdouble value = gtk_adjustment_get_value (adj); |
432 | |
433 | - g_settings_set_double (priv->unity_settings, UNITY_LAUNCHERSENSITIVITY_KEY, value); |
434 | + grouped_gsettings_set_value (priv->unity_compiz_gs, UNITY_LAUNCHERSENSITIVITY_KEY, g_variant_new_double (value)); |
435 | } |
436 | |
437 | gboolean |
438 | @@ -1577,12 +1842,12 @@ |
439 | } |
440 | |
441 | static void |
442 | -ext_enableworkspaces_changed_callback (GSettings* settings, |
443 | - guint key, |
444 | +ext_enableworkspaces_changed_callback (GroupedGSettings* compiz_gs, |
445 | + gchar *key, |
446 | gpointer user_data) |
447 | { |
448 | g_idle_add((GSourceFunc) enable_workspaces_widget_refresh, user_data); |
449 | -} |
450 | +} |
451 | |
452 | static void |
453 | on_enable_workspaces_changed (GtkToggleButton *button, gpointer user_data) |
454 | @@ -1597,8 +1862,8 @@ |
455 | hsize = vsize = 2; |
456 | } |
457 | |
458 | - g_settings_set_int (priv->compizcore_settings, COMPIZCORE_HSIZE_KEY, hsize); |
459 | - g_settings_set_int (priv->compizcore_settings, COMPIZCORE_VSIZE_KEY, hsize); |
460 | + grouped_gsettings_set_value (priv->compizcore_compiz_gs, COMPIZCORE_HSIZE_KEY, g_variant_new_int32 (hsize)); |
461 | + grouped_gsettings_set_value (priv->compizcore_compiz_gs, COMPIZCORE_VSIZE_KEY, g_variant_new_int32 (hsize)); |
462 | } |
463 | |
464 | static void |
465 | @@ -1625,8 +1890,8 @@ |
466 | } |
467 | |
468 | static void |
469 | -ext_enableshowdesktop_changed_callback (GSettings* settings, |
470 | - guint key, |
471 | +ext_enableshowdesktop_changed_callback (GroupedGSettings* compiz_gs, |
472 | + gchar *key, |
473 | gpointer user_data) |
474 | { |
475 | enable_showdesktop_widget_refresh (user_data); |
476 | @@ -1691,19 +1956,15 @@ |
477 | if (!self->priv->unity_own_settings) |
478 | return FALSE; |
479 | |
480 | - gchar** unity_keys; |
481 | - gchar** key; |
482 | - |
483 | - unity_keys = g_settings_list_keys (self->priv->unity_own_settings); |
484 | - |
485 | - for (key = unity_keys; *key; ++key) |
486 | - { |
487 | - if (g_strcmp0 (*key, key_name) == 0) |
488 | - return TRUE; |
489 | - } |
490 | - |
491 | - g_strfreev (unity_keys); |
492 | - return FALSE; |
493 | + GSettingsSchema *unity_schema; |
494 | + gboolean has_key; |
495 | + |
496 | + g_object_get (self->priv->unity_own_settings, |
497 | + "settings-schema", &unity_schema, NULL); |
498 | + has_key = g_settings_schema_has_key (unity_schema, key_name); |
499 | + g_settings_schema_unref (unity_schema); |
500 | + |
501 | + return has_key; |
502 | } |
503 | |
504 | static void |
505 | @@ -1728,8 +1989,8 @@ |
506 | } |
507 | |
508 | static void |
509 | -ext_menulocation_changed_callback (GSettings* settings, |
510 | - guint key, |
511 | +ext_menulocation_changed_callback (GroupedGSettings* compiz_gs, |
512 | + gchar *key, |
513 | gpointer user_data) |
514 | { |
515 | menulocation_widget_refresh (CC_APPEARANCE_PANEL (user_data)); |
516 | @@ -1768,9 +2029,9 @@ |
517 | } |
518 | |
519 | static void |
520 | -ext_menuvisibility_changed_callback (GSettings* settings, |
521 | - guint key, |
522 | - gpointer user_data) |
523 | +ext_menuvisibility_changed_callback (GroupedGSettings* compiz_gs, |
524 | + gchar *key, |
525 | + gpointer user_data) |
526 | { |
527 | menuvisibility_widget_refresh (CC_APPEARANCE_PANEL (user_data)); |
528 | } |
529 | @@ -1787,17 +2048,41 @@ |
530 | } |
531 | |
532 | static void |
533 | +ext_compiz_profile_changed_callback (GSettings* compiz_settings, |
534 | + gchar *key, |
535 | + gpointer user_data) |
536 | +{ |
537 | + CcAppearancePanel *self = user_data; |
538 | + gchar *compiz_profile; |
539 | + gboolean low_enabled; |
540 | + |
541 | + compiz_profile = g_settings_get_string (compiz_settings, COMPIZ_CURRENT_PROFILE_KEY); |
542 | + |
543 | + if (g_strcmp0 (compiz_profile, UNITY_NORMAL_PROFILE) != 0 && |
544 | + g_strcmp0 (compiz_profile, UNITY_LOWGFX_PROFILE) != 0) |
545 | + { |
546 | + g_free (compiz_profile); |
547 | + return; |
548 | + } |
549 | + |
550 | + grouped_gsettings_set_default_profile (self->priv->unity_compiz_gs, compiz_profile); |
551 | + grouped_gsettings_set_default_profile (self->priv->compizcore_compiz_gs, compiz_profile); |
552 | + |
553 | + g_free (compiz_profile); |
554 | +} |
555 | + |
556 | +static void |
557 | on_restore_defaults_page2_clicked (GtkButton *button, gpointer user_data) |
558 | { |
559 | CcAppearancePanel *self = CC_APPEARANCE_PANEL (user_data); |
560 | CcAppearancePanelPrivate *priv = self->priv; |
561 | |
562 | /* reset defaut for the profile and get the default */ |
563 | - g_settings_reset (priv->unity_settings, UNITY_LAUNCHERHIDE_KEY); |
564 | - g_settings_reset (priv->unity_settings, UNITY_LAUNCHERSENSITIVITY_KEY); |
565 | - g_settings_reset (priv->unity_settings, UNITY_LAUNCHERREVEAL_KEY); |
566 | - g_settings_reset (priv->compizcore_settings, COMPIZCORE_HSIZE_KEY); |
567 | - g_settings_reset (priv->compizcore_settings, COMPIZCORE_VSIZE_KEY); |
568 | + grouped_gsettings_reset (priv->unity_compiz_gs, UNITY_LAUNCHERHIDE_KEY); |
569 | + grouped_gsettings_reset (priv->unity_compiz_gs, UNITY_LAUNCHERSENSITIVITY_KEY); |
570 | + grouped_gsettings_reset (priv->unity_compiz_gs, UNITY_LAUNCHERREVEAL_KEY); |
571 | + grouped_gsettings_reset (priv->compizcore_compiz_gs, COMPIZCORE_HSIZE_KEY); |
572 | + grouped_gsettings_reset (priv->compizcore_compiz_gs, COMPIZCORE_VSIZE_KEY); |
573 | |
574 | if (unity_own_setting_exists (self, UNITY_INTEGRATED_MENUS_KEY)) |
575 | g_settings_reset (priv->unity_own_settings, UNITY_INTEGRATED_MENUS_KEY); |
576 | @@ -1847,20 +2132,6 @@ |
577 | } |
578 | |
579 | /* </hacks> */ |
580 | - |
581 | -static gchar * |
582 | -compiz_profile_gsettings_path (const gchar *path) |
583 | -{ |
584 | - const gchar *profile = "unity"; |
585 | - |
586 | - if (g_strcmp0 (g_getenv ("COMPIZ_CONFIG_PROFILE"), "ubuntu-lowgfx") == 0) |
587 | - { |
588 | - profile = "unity-lowgfx"; |
589 | - } |
590 | - |
591 | - return g_strdup_printf (path, profile); |
592 | -} |
593 | - |
594 | static void |
595 | setup_unity_settings (CcAppearancePanel *self) |
596 | { |
597 | @@ -1871,59 +2142,69 @@ |
598 | GtkScale* launcher_sensitivity_scale; |
599 | GSettingsSchema *schema; |
600 | GSettingsSchemaSource* source; |
601 | - gchar *settings_path; |
602 | |
603 | source = g_settings_schema_source_get_default (); |
604 | schema = g_settings_schema_source_lookup (source, UNITY_OWN_GSETTINGS_SCHEMA, TRUE); |
605 | if (schema) |
606 | { |
607 | - priv->unity_own_settings = g_settings_new (UNITY_OWN_GSETTINGS_SCHEMA); |
608 | + priv->unity_own_settings = g_settings_new_full (schema, /*backend*/ NULL, /*path*/ NULL); |
609 | + g_settings_schema_unref (schema); |
610 | + } |
611 | + schema = g_settings_schema_source_lookup (source, COMPIZ_GSETTINGS_SCHEMA, TRUE); |
612 | + if (schema) |
613 | + { |
614 | + priv->compiz_settings = g_settings_new_full (schema, /*backend*/ NULL, /*path*/ NULL); |
615 | g_settings_schema_unref (schema); |
616 | } |
617 | schema = g_settings_schema_source_lookup (source, UNITY_LAUNCHER_GSETTINGS_SCHEMA, TRUE); |
618 | if (schema) |
619 | { |
620 | - priv->unity_launcher_settings = g_settings_new (UNITY_LAUNCHER_GSETTINGS_SCHEMA); |
621 | + priv->unity_launcher_settings = g_settings_new_full (schema, /*backend*/ NULL, /*path*/ NULL); |
622 | g_settings_schema_unref (schema); |
623 | } |
624 | schema = g_settings_schema_source_lookup (source, UNITY_GSETTINGS_SCHEMA, TRUE); |
625 | if (schema) |
626 | { |
627 | - settings_path = compiz_profile_gsettings_path (UNITY_GSETTINGS_PATH); |
628 | - priv->unity_settings = g_settings_new_with_path (UNITY_GSETTINGS_SCHEMA, settings_path); |
629 | + priv->unity_compiz_gs = compiz_grouped_gsettings_new (schema, |
630 | + priv->compiz_settings, |
631 | + UNITY_GSETTINGS_PATH, |
632 | + &priv->unity_settings); |
633 | g_settings_schema_unref (schema); |
634 | - g_free (settings_path); |
635 | } |
636 | schema = g_settings_schema_source_lookup (source, COMPIZCORE_GSETTINGS_SCHEMA, TRUE); |
637 | if (schema) |
638 | { |
639 | - settings_path = compiz_profile_gsettings_path (COMPIZCORE_GSETTINGS_PATH); |
640 | - priv->compizcore_settings = g_settings_new_with_path (COMPIZCORE_GSETTINGS_SCHEMA, settings_path); |
641 | + priv->compizcore_compiz_gs = compiz_grouped_gsettings_new (schema, |
642 | + priv->compiz_settings, |
643 | + COMPIZCORE_GSETTINGS_PATH, |
644 | + &priv->compizcore_settings); |
645 | g_settings_schema_unref (schema); |
646 | - g_free (settings_path); |
647 | } |
648 | |
649 | - if (!priv->unity_settings || !priv->compizcore_settings || !priv->unity_own_settings || !priv->unity_launcher_settings) |
650 | + if (!priv->unity_compiz_gs || !priv->compizcore_compiz_gs || !priv->unity_own_settings || !priv->unity_launcher_settings) |
651 | return; |
652 | |
653 | + g_signal_connect (priv->compiz_settings, "changed::" COMPIZ_CURRENT_PROFILE_KEY, |
654 | + G_CALLBACK (ext_compiz_profile_changed_callback), self); |
655 | + |
656 | /* Icon size change - we halve the sizes so we can only get even values*/ |
657 | iconsize_adj = gtk_adjustment_new (DEFAULT_ICONSIZE / 2, MIN_ICONSIZE / 2, MAX_ICONSIZE / 2, 1, 4, 0); |
658 | iconsize_scale = GTK_SCALE (WID ("unity-iconsize-scale")); |
659 | gtk_range_set_adjustment (GTK_RANGE (iconsize_scale), iconsize_adj); |
660 | gtk_scale_add_mark (iconsize_scale, DEFAULT_ICONSIZE / 2, GTK_POS_BOTTOM, NULL); |
661 | - g_signal_connect (priv->unity_settings, "changed::" UNITY_ICONSIZE_KEY, |
662 | + g_signal_connect (priv->unity_compiz_gs, "changed::" UNITY_ICONSIZE_KEY, |
663 | G_CALLBACK (ext_iconsize_changed_callback), iconsize_adj); |
664 | |
665 | g_signal_connect (G_OBJECT (iconsize_scale), "format-value", |
666 | G_CALLBACK (on_iconsize_format_value), NULL); |
667 | g_signal_connect (iconsize_adj, "value_changed", |
668 | - G_CALLBACK (on_iconsize_changed), priv->unity_settings); |
669 | + G_CALLBACK (on_iconsize_changed), self); |
670 | g_signal_connect (G_OBJECT (iconsize_scale), "scroll-event", |
671 | G_CALLBACK (on_scale_scroll_event), NULL); |
672 | iconsize_widget_refresh (iconsize_adj, priv->unity_settings); |
673 | |
674 | /* Reveal spot setting */ |
675 | - g_signal_connect (priv->unity_settings, "changed::" UNITY_LAUNCHERREVEAL_KEY, |
676 | + g_signal_connect (priv->unity_compiz_gs, "changed::" UNITY_LAUNCHERREVEAL_KEY, |
677 | G_CALLBACK (ext_reveallauncher_changed_callback), self); |
678 | g_signal_connect (WID ("unity_reveal_spot_topleft"), "toggled", |
679 | G_CALLBACK (on_reveallauncher_changed), self); |
680 | @@ -1936,7 +2217,7 @@ |
681 | launcher_sensitivity_scale = GTK_SCALE (WID ("unity-launcher-sensitivity")); |
682 | gtk_range_set_adjustment (GTK_RANGE (launcher_sensitivity_scale), launcher_sensitivity_adj); |
683 | gtk_scale_add_mark (launcher_sensitivity_scale, 2, GTK_POS_BOTTOM, NULL); |
684 | - g_signal_connect (priv->unity_settings, "changed::" UNITY_LAUNCHERSENSITIVITY_KEY, |
685 | + g_signal_connect (priv->unity_compiz_gs, "changed::" UNITY_LAUNCHERSENSITIVITY_KEY, |
686 | G_CALLBACK (ext_launchersensitivity_changed_callback), launcher_sensitivity_adj); |
687 | g_signal_connect (launcher_sensitivity_adj, "value_changed", |
688 | G_CALLBACK (on_launchersensitivity_changed), self); |
689 | @@ -1945,16 +2226,16 @@ |
690 | launcher_sensitivity_widget_refresh (launcher_sensitivity_adj, priv->unity_settings); |
691 | |
692 | /* Autohide launcher setting */ |
693 | - g_signal_connect (priv->unity_settings, "changed::" UNITY_LAUNCHERHIDE_KEY, |
694 | + g_signal_connect (priv->unity_compiz_gs, "changed::" UNITY_LAUNCHERHIDE_KEY, |
695 | G_CALLBACK (ext_hidelauncher_changed_callback), self); |
696 | g_signal_connect (WID ("unity_launcher_autohide"), "notify::active", |
697 | G_CALLBACK (on_hidelauncher_changed), self); |
698 | hidelauncher_widget_refresh (self); |
699 | |
700 | /* Enabling workspaces */ |
701 | - g_signal_connect (priv->compizcore_settings, "changed::" COMPIZCORE_HSIZE_KEY, |
702 | + g_signal_connect (priv->compizcore_compiz_gs, "changed::" COMPIZCORE_HSIZE_KEY, |
703 | G_CALLBACK (ext_enableworkspaces_changed_callback), self); |
704 | - g_signal_connect (priv->compizcore_settings, "changed::" COMPIZCORE_VSIZE_KEY, |
705 | + g_signal_connect (priv->compizcore_compiz_gs, "changed::" COMPIZCORE_VSIZE_KEY, |
706 | G_CALLBACK (ext_enableworkspaces_changed_callback), self); |
707 | g_signal_connect (WID ("check_enable_workspaces"), "toggled", |
708 | G_CALLBACK (on_enable_workspaces_changed), self); |
looks good, thanks