diff options
Diffstat (limited to 'src/backends/meta-monitor-config.c')
-rw-r--r-- | src/backends/meta-monitor-config.c | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/src/backends/meta-monitor-config.c b/src/backends/meta-monitor-config.c index 835caa4d..6cc42fd1 100644 --- a/src/backends/meta-monitor-config.c +++ b/src/backends/meta-monitor-config.c @@ -82,7 +82,8 @@ struct _MetaMonitorConfig { gboolean current_is_for_laptop_lid; MetaConfiguration *previous; - GFile *file; + GFile *user_file; + GFile *system_file; GCancellable *save_cancellable; UpClient *up_client; @@ -238,6 +239,7 @@ meta_monitor_config_init (MetaMonitorConfig *self) { const char *filename; char *path; + const char * const *system_dirs; self->configs = g_hash_table_new_full (config_hash, config_equal, NULL, (GDestroyNotify) config_unref); @@ -246,9 +248,17 @@ meta_monitor_config_init (MetaMonitorConfig *self) filename = "monitors.xml"; path = g_build_filename (g_get_user_config_dir (), filename, NULL); - self->file = g_file_new_for_path (path); + self->user_file = g_file_new_for_path (path); g_free (path); + for (system_dirs = g_get_system_config_dirs (); !self->system_file && *system_dirs; system_dirs++) + { + path = g_build_filename (*system_dirs, filename, NULL); + if (g_file_test (path, G_FILE_TEST_EXISTS)) + self->system_file = g_file_new_for_path (path); + g_free (path); + } + self->up_client = up_client_new (); self->lid_is_closed = up_client_get_lid_is_closed (self->up_client); @@ -717,8 +727,8 @@ static const GMarkupParser config_parser = { .text = handle_text, }; -static void -meta_monitor_config_load (MetaMonitorConfig *self) +static gboolean +load_config_file (MetaMonitorConfig *self, GFile *file) { char *contents; gsize size; @@ -736,14 +746,12 @@ meta_monitor_config_load (MetaMonitorConfig *self) */ error = NULL; - ok = g_file_load_contents (self->file, NULL, &contents, &size, NULL, &error); + ok = g_file_load_contents (file, NULL, &contents, &size, NULL, &error); if (!ok) { - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) - meta_warning ("Failed to load stored monitor configuration: %s\n", error->message); g_error_free (error); - return; + return FALSE; } memset (&parser, 0, sizeof (ConfigParser)); @@ -772,6 +780,17 @@ meta_monitor_config_load (MetaMonitorConfig *self) g_markup_parse_context_free (context); g_free (contents); + + return ok; +} + +static void +meta_monitor_config_load (MetaMonitorConfig *self) +{ + if (self->user_file && load_config_file (self, self->user_file)) + return; + if (self->system_file && load_config_file (self, self->system_file)) + return; } MetaMonitorConfig * @@ -1622,7 +1641,7 @@ meta_monitor_config_save (MetaMonitorConfig *self) closure->config = g_object_ref (self); closure->buffer = buffer; - g_file_replace_contents_async (self->file, + g_file_replace_contents_async (self->user_file, buffer->str, buffer->len, NULL, /* etag */ TRUE, |