1 /* -*- Mode: C; indent-tabs-mode: f; c-basic-offset: 4; tab-width: 4 -*- */
2
3 /* nemo-global-preferences.c - Nemo specific preference keys and
4 functions.
5
6 Copyright (C) 1999, 2000, 2001 Eazel, Inc.
7
8 The Gnome Library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public License as
10 published by the Free Software Foundation; either version 2 of the
11 License, or (at your option) any later version.
12
13 The Gnome Library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details.
17
18 You should have received a copy of the GNU Library General Public
19 License along with the Gnome Library; see the file COPYING.LIB. If not,
20 write to the Free Software Foundation, Inc., 51 Franklin Street - Suite 500,
21 Boston, MA 02110-1335, USA.
22
23 Authors: Ramiro Estrugo <ramiro@eazel.com>
24 */
25
26 #include <config.h>
27 #include "nemo-global-preferences.h"
28
29 #include "nemo-file-utilities.h"
30 #include "nemo-file.h"
31 #include <eel/eel-glib-extensions.h>
32 #include <eel/eel-gtk-extensions.h>
33 #include <eel/eel-stock-dialogs.h>
34 #include <eel/eel-string.h>
35 #include <eel/eel-debug.h>
36 #include <glib/gi18n.h>
37 #include <gio/gdesktopappinfo.h>
38
39 GSettings *nemo_preferences;
40 GSettings *nemo_icon_view_preferences;
41 GSettings *nemo_list_view_preferences;
42 GSettings *nemo_compact_view_preferences;
43 GSettings *nemo_desktop_preferences;
44 GSettings *nemo_tree_sidebar_preferences;
45 GSettings *nemo_window_state;
46 GSettings *nemo_plugin_preferences;
47 GSettings *nemo_menu_config_preferences;
48 GSettings *gnome_lockdown_preferences;
49 GSettings *gnome_background_preferences;
50 GSettings *gnome_media_handling_preferences;
51 GSettings *gnome_terminal_preferences;
52 GSettings *cinnamon_privacy_preferences;
53 GSettings *cinnamon_interface_preferences;
54
55 GTimeZone *prefs_current_timezone;
56 gboolean prefs_current_24h_time_format;
57 NemoDateFormat prefs_current_date_format;
58
59 GTimer *nemo_startup_timer;
60
61 static gboolean ignore_view_metadata = FALSE;
62 static gboolean inherit_folder_view_preference = FALSE;
63 static gboolean inherit_show_thumbnails_preference = FALSE;
64 static int size_prefixes_preference = 0;
65
66 static gchar **file_roller_mimetypes = NULL;
67
68
69 GFileMonitor *tz_mon;
70
71 /*
72 * Public functions
73 */
74 char *
nemo_global_preferences_get_default_folder_viewer_preference_as_iid(void)75 nemo_global_preferences_get_default_folder_viewer_preference_as_iid (void)
76 {
77 int preference_value;
78 const char *viewer_iid;
79
80 preference_value =
81 g_settings_get_enum (nemo_preferences, NEMO_PREFERENCES_DEFAULT_FOLDER_VIEWER);
82
83 if (preference_value == NEMO_DEFAULT_FOLDER_VIEWER_LIST_VIEW) {
84 viewer_iid = NEMO_LIST_VIEW_IID;
85 } else if (preference_value == NEMO_DEFAULT_FOLDER_VIEWER_COMPACT_VIEW) {
86 viewer_iid = NEMO_COMPACT_VIEW_IID;
87 } else {
88 viewer_iid = NEMO_ICON_VIEW_IID;
89 }
90
91 return g_strdup (viewer_iid);
92 }
93
94 gboolean
nemo_global_preferences_get_inherit_folder_viewer_preference(void)95 nemo_global_preferences_get_inherit_folder_viewer_preference (void)
96 {
97 return inherit_folder_view_preference;
98 }
99
100 gboolean
nemo_global_preferences_get_ignore_view_metadata(void)101 nemo_global_preferences_get_ignore_view_metadata (void)
102 {
103 return ignore_view_metadata;
104 }
105
106 gboolean
nemo_global_preferences_get_inherit_show_thumbnails_preference(void)107 nemo_global_preferences_get_inherit_show_thumbnails_preference (void)
108 {
109 return inherit_show_thumbnails_preference;
110 }
111
112 int
nemo_global_preferences_get_size_prefix_preference(void)113 nemo_global_preferences_get_size_prefix_preference (void)
114 {
115 switch (size_prefixes_preference) {
116 case 0: // base-10
117 return G_FORMAT_SIZE_DEFAULT;
118 case 1: // base-10 full
119 return G_FORMAT_SIZE_DEFAULT | G_FORMAT_SIZE_LONG_FORMAT;
120 case 2: // base-2
121 return G_FORMAT_SIZE_DEFAULT | G_FORMAT_SIZE_IEC_UNITS;
122 case 3: // base-2 full
123 return G_FORMAT_SIZE_DEFAULT | G_FORMAT_SIZE_IEC_UNITS | G_FORMAT_SIZE_LONG_FORMAT;
124 }
125
126 return 0;
127 }
128
129 char *
nemo_global_preferences_get_desktop_iid(void)130 nemo_global_preferences_get_desktop_iid (void)
131 {
132 gboolean use_grid;
133 const char *viewer_iid;
134
135 use_grid = g_settings_get_boolean (nemo_desktop_preferences, NEMO_PREFERENCES_USE_DESKTOP_GRID);
136
137 if (use_grid) {
138 viewer_iid = NEMO_DESKTOP_ICON_GRID_VIEW_IID;
139 } else {
140 viewer_iid = NEMO_DESKTOP_ICON_VIEW_IID;
141 }
142
143 return g_strdup (viewer_iid);
144 }
145
146 gint
nemo_global_preferences_get_tooltip_flags(void)147 nemo_global_preferences_get_tooltip_flags (void)
148 {
149 NemoFileTooltipFlags flags = NEMO_FILE_TOOLTIP_FLAGS_NONE;
150
151 if (g_settings_get_boolean (nemo_preferences, NEMO_PREFERENCES_TOOLTIP_FILE_TYPE))
152 flags |= NEMO_FILE_TOOLTIP_FLAGS_FILE_TYPE;
153 if (g_settings_get_boolean (nemo_preferences, NEMO_PREFERENCES_TOOLTIP_MOD_DATE))
154 flags |= NEMO_FILE_TOOLTIP_FLAGS_MOD_DATE;
155 if (g_settings_get_boolean (nemo_preferences, NEMO_PREFERENCES_TOOLTIP_ACCESS_DATE))
156 flags |= NEMO_FILE_TOOLTIP_FLAGS_ACCESS_DATE;
157 if (g_settings_get_boolean (nemo_preferences, NEMO_PREFERENCES_TOOLTIP_FULL_PATH))
158 flags |= NEMO_FILE_TOOLTIP_FLAGS_PATH;
159 if (g_settings_get_boolean (nemo_preferences, NEMO_PREFERENCES_TOOLTIP_CREATED_DATE))
160 flags |= NEMO_FILE_TOOLTIP_FLAGS_CREATED_DATE;
161 return flags;
162 }
163
164 gboolean
nemo_global_preferences_should_load_plugin(const gchar * name,const gchar * key)165 nemo_global_preferences_should_load_plugin (const gchar *name, const gchar *key)
166 {
167 gchar **disabled_list = g_settings_get_strv (nemo_plugin_preferences, key);
168
169 gboolean ret = TRUE;
170 guint i = 0;
171
172 for (i = 0; i < g_strv_length (disabled_list); i++) {
173 if (g_strcmp0 (disabled_list[i], name) == 0)
174 ret = FALSE;
175 }
176
177 g_strfreev (disabled_list);
178 return ret;
179 }
180
181 static void
boolean_changed_cb(GSettings * settings,gchar * key,gboolean * user_data)182 boolean_changed_cb (GSettings *settings,
183 gchar *key,
184 gboolean *user_data)
185 {
186 *user_data = g_settings_get_boolean (settings, key);
187 }
188
189 static void
enum_changed_cb(GSettings * settings,gchar * key,int * user_data)190 enum_changed_cb (GSettings *settings,
191 gchar *key,
192 int *user_data)
193 {
194 *user_data = g_settings_get_enum (settings, key);
195 }
196
197 static void
setup_cached_pref_keys(void)198 setup_cached_pref_keys (void)
199 {
200 g_signal_connect (nemo_preferences,
201 "changed::" NEMO_PREFERENCES_IGNORE_VIEW_METADATA,
202 G_CALLBACK (boolean_changed_cb), &ignore_view_metadata);
203
204 boolean_changed_cb (nemo_preferences, NEMO_PREFERENCES_IGNORE_VIEW_METADATA, &ignore_view_metadata);
205
206 g_signal_connect (nemo_preferences,
207 "changed::" NEMO_PREFERENCES_INHERIT_FOLDER_VIEWER,
208 G_CALLBACK (boolean_changed_cb), &inherit_folder_view_preference);
209
210 boolean_changed_cb (nemo_preferences, NEMO_PREFERENCES_INHERIT_FOLDER_VIEWER, &inherit_folder_view_preference);
211
212 g_signal_connect (nemo_preferences,
213 "changed::" NEMO_PREFERENCES_INHERIT_SHOW_THUMBNAILS,
214 G_CALLBACK (boolean_changed_cb), &inherit_show_thumbnails_preference);
215
216 boolean_changed_cb (nemo_preferences, NEMO_PREFERENCES_INHERIT_SHOW_THUMBNAILS, &inherit_show_thumbnails_preference);
217
218 g_signal_connect (nemo_preferences,
219 "changed::" NEMO_PREFERENCES_SIZE_PREFIXES,
220 G_CALLBACK (enum_changed_cb), &size_prefixes_preference);
221
222 enum_changed_cb (nemo_preferences, NEMO_PREFERENCES_SIZE_PREFIXES, &size_prefixes_preference);
223 }
224
225
226 gchar **
nemo_global_preferences_get_fileroller_mimetypes(void)227 nemo_global_preferences_get_fileroller_mimetypes (void)
228 {
229 static gsize once_init = 0;
230
231 if (g_once_init_enter (&once_init)) {
232 if (nemo_is_file_roller_installed ()) {
233 GAppInfo *app_info;
234 gchar ***results;
235 gchar **result;
236 gint i;
237
238 results = g_desktop_app_info_search ("file-roller");
239
240 if (results != NULL && results[0] != NULL) {
241 const gchar *best;
242
243 best = results[0][0];
244
245 app_info = G_APP_INFO (g_desktop_app_info_new (best));
246
247 if (app_info) {
248 file_roller_mimetypes = g_strdupv ((gchar **) g_app_info_get_supported_types (app_info));
249 g_object_unref (app_info);
250 }
251
252 if (app_info == NULL) {
253 g_warning ("Unable to retrieve list of file-roller mimetypes");
254 }
255
256 i = 0;
257 result = results[i];
258
259 while (result != NULL) {
260 g_strfreev (result);
261 result = results[++i];
262 }
263
264 g_free (results);
265 }
266 }
267
268 g_once_init_leave (&once_init, 1);
269 }
270
271 return file_roller_mimetypes;
272 }
273
274 static void
on_time_data_changed(gpointer user_data)275 on_time_data_changed (gpointer user_data)
276 {
277 prefs_current_date_format = g_settings_get_enum (nemo_preferences, NEMO_PREFERENCES_DATE_FORMAT);
278 prefs_current_24h_time_format = g_settings_get_boolean (cinnamon_interface_preferences, "clock-use-24h");
279
280 if (prefs_current_timezone != NULL) {
281 g_time_zone_unref (prefs_current_timezone);
282 }
283
284 prefs_current_timezone = g_time_zone_new_local ();
285 }
286
287 static void
setup_cached_time_data(void)288 setup_cached_time_data (void)
289 {
290 GFile *tz;
291
292 prefs_current_timezone = NULL;
293
294 g_signal_connect_swapped (nemo_preferences,
295 "changed::" NEMO_PREFERENCES_DATE_FORMAT,
296 G_CALLBACK (on_time_data_changed), NULL);
297
298 g_signal_connect_swapped (cinnamon_interface_preferences,
299 "changed::clock-use-24h",
300 G_CALLBACK (on_time_data_changed), NULL);
301
302
303 tz = g_file_new_for_path ("/etc/localtime");
304
305 tz_mon = g_file_monitor_file (tz, 0, NULL, NULL);
306 g_object_unref (tz);
307
308 g_signal_connect_swapped (tz_mon,
309 "changed",
310 G_CALLBACK (on_time_data_changed), NULL);
311
312 on_time_data_changed (NULL);
313 }
314
315 void
nemo_global_preferences_init(void)316 nemo_global_preferences_init (void)
317 {
318 static gboolean initialized = FALSE;
319
320 if (initialized) {
321 return;
322 }
323
324 initialized = TRUE;
325
326 nemo_preferences = g_settings_new("org.nemo.preferences");
327 nemo_window_state = g_settings_new("org.nemo.window-state");
328 nemo_icon_view_preferences = g_settings_new("org.nemo.icon-view");
329 nemo_list_view_preferences = g_settings_new("org.nemo.list-view");
330 nemo_compact_view_preferences = g_settings_new("org.nemo.compact-view");
331 nemo_desktop_preferences = g_settings_new("org.nemo.desktop");
332 nemo_tree_sidebar_preferences = g_settings_new("org.nemo.sidebar-panels.tree");
333 nemo_plugin_preferences = g_settings_new("org.nemo.plugins");
334 nemo_menu_config_preferences = g_settings_new("org.nemo.preferences.menu-config");
335 gnome_lockdown_preferences = g_settings_new("org.cinnamon.desktop.lockdown");
336 gnome_background_preferences = g_settings_new("org.cinnamon.desktop.background");
337 gnome_media_handling_preferences = g_settings_new("org.cinnamon.desktop.media-handling");
338 gnome_terminal_preferences = g_settings_new("org.cinnamon.desktop.default-applications.terminal");
339 cinnamon_privacy_preferences = g_settings_new("org.cinnamon.desktop.privacy");
340 cinnamon_interface_preferences = g_settings_new ("org.cinnamon.desktop.interface");
341
342 setup_cached_pref_keys ();
343 setup_cached_time_data ();
344
345 eel_debug_call_at_shutdown (nemo_global_preferences_finalize);
346 }
347
348 void
nemo_global_preferences_finalize(void)349 nemo_global_preferences_finalize (void)
350 {
351 g_strfreev (file_roller_mimetypes);
352 g_object_unref (tz_mon);
353
354 g_object_unref (nemo_preferences);
355 g_object_unref (nemo_window_state);
356 g_object_unref (nemo_icon_view_preferences);
357 g_object_unref (nemo_list_view_preferences);
358 g_object_unref (nemo_compact_view_preferences);
359 g_object_unref (nemo_desktop_preferences);
360 g_object_unref (nemo_tree_sidebar_preferences);
361 g_object_unref (nemo_plugin_preferences);
362 g_object_unref (nemo_menu_config_preferences);
363 g_object_unref (gnome_lockdown_preferences);
364 g_object_unref (gnome_background_preferences);
365 g_object_unref (gnome_media_handling_preferences);
366 g_object_unref (gnome_terminal_preferences);
367 g_object_unref (cinnamon_privacy_preferences);
368 g_object_unref (cinnamon_interface_preferences);
369 }
370