monitor-config: Allow loading from a system file

This commit is contained in:
Jasper St. Pierre 2015-04-27 16:18:26 -07:00
parent d62c595e51
commit 0f8e387dc0

View File

@ -82,7 +82,8 @@ struct _MetaMonitorConfig {
gboolean current_is_for_laptop_lid; gboolean current_is_for_laptop_lid;
MetaConfiguration *previous; MetaConfiguration *previous;
GFile *file; GFile *user_file;
GFile *system_file;
GCancellable *save_cancellable; GCancellable *save_cancellable;
UpClient *up_client; UpClient *up_client;
@ -238,6 +239,7 @@ meta_monitor_config_init (MetaMonitorConfig *self)
{ {
const char *filename; const char *filename;
char *path; char *path;
const char * const *system_dirs;
self->configs = g_hash_table_new_full (config_hash, config_equal, NULL, (GDestroyNotify) config_unref); 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"; filename = "monitors.xml";
path = g_build_filename (g_get_user_config_dir (), filename, NULL); 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); 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->up_client = up_client_new ();
self->lid_is_closed = up_client_get_lid_is_closed (self->up_client); 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, .text = handle_text,
}; };
static void static gboolean
meta_monitor_config_load (MetaMonitorConfig *self) load_config_file (MetaMonitorConfig *self, GFile *file)
{ {
char *contents; char *contents;
gsize size; gsize size;
@ -736,14 +746,12 @@ meta_monitor_config_load (MetaMonitorConfig *self)
*/ */
error = NULL; 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 (!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); g_error_free (error);
return; return FALSE;
} }
memset (&parser, 0, sizeof (ConfigParser)); memset (&parser, 0, sizeof (ConfigParser));
@ -772,6 +780,17 @@ meta_monitor_config_load (MetaMonitorConfig *self)
g_markup_parse_context_free (context); g_markup_parse_context_free (context);
g_free (contents); 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 * MetaMonitorConfig *
@ -1622,7 +1641,7 @@ meta_monitor_config_save (MetaMonitorConfig *self)
closure->config = g_object_ref (self); closure->config = g_object_ref (self);
closure->buffer = buffer; closure->buffer = buffer;
g_file_replace_contents_async (self->file, g_file_replace_contents_async (self->user_file,
buffer->str, buffer->len, buffer->str, buffer->len,
NULL, /* etag */ NULL, /* etag */
TRUE, TRUE,