monitor-config: Allow loading from a system file
This commit is contained in:
parent
d62c595e51
commit
0f8e387dc0
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user