diff options
Diffstat (limited to 'settings-daemon.c')
-rw-r--r-- | settings-daemon.c | 87 |
1 files changed, 39 insertions, 48 deletions
diff --git a/settings-daemon.c b/settings-daemon.c index 7f99d31..6e7830b 100644 --- a/settings-daemon.c +++ b/settings-daemon.c @@ -64,7 +64,7 @@ struct _TranslationEntry }; #ifdef HAVE_XFT2 -static void sd_settings_update_xft (GConfClient *client); +static void sd_settings_update_xft (void); static void xft_callback (GConfEntry *entry); #endif /* HAVE_XFT2 */ @@ -129,6 +129,23 @@ translate_string_string_toolbar (const TranslationEntry *trans, tmp); } +/** + * The top-level GConf paths to catch all changes for. Keep this in sync with + * translations, below. The more specific the paths, the better. + */ +static const char* toplevels[] = { + "/desktop/gnome", + "/apps/matchbox/general", +#ifdef HAVE_XFT2 + FONT_RENDER_DIR +#endif +}; + +/** + * The list of translations from GConf keys to XSettings keys, with type + * information and a mapping function. + */ +/* TODO: include the Xft settings here for neatness */ static const TranslationEntry translations [] = { { "/desktop/gnome/peripherals/mouse/double_click", "Net/DoubleClickTime", GCONF_VALUE_INT, translate_int_int }, @@ -269,7 +286,7 @@ xsettings_callback (GConfEntry *entry) static void xft_callback (GConfEntry *entry) { - sd_settings_update_xft (gconf_client); + sd_settings_update_xft (); } typedef struct @@ -519,11 +536,11 @@ sd_xft_settings_set_xresources (SdXftSettings *settings) * X resources */ static void -sd_settings_update_xft (GConfClient *client) +sd_settings_update_xft (void) { SdXftSettings settings; - sd_xft_settings_get (client, &settings); + sd_xft_settings_get (gconf_client, &settings); sd_xft_settings_set_xsettings (&settings); sd_xft_settings_set_xresources (&settings); @@ -531,7 +548,7 @@ sd_settings_update_xft (GConfClient *client) #endif /* HAVE_XFT2 */ static void -sd_settings_xsettings_load (GConfClient *client) +sd_settings_xsettings_load (void) { int i; @@ -542,7 +559,7 @@ sd_settings_xsettings_load (GConfClient *client) GError *err; err = NULL; - val = gconf_client_get (client, + val = gconf_client_get (gconf_client, translations[i].gconf_key, &err); @@ -563,7 +580,7 @@ sd_settings_xsettings_load (GConfClient *client) } #ifdef HAVE_XFT2 - sd_settings_update_xft (client); + sd_settings_update_xft (); #endif /* HAVE_XFT */ for (i = 0; managers [i]; i++) @@ -662,8 +679,8 @@ main(int argc, char **argv) loop = g_main_loop_new(NULL, FALSE); display = gdk_display_get_default (); - n_screens = gdk_display_get_n_screens (display); - + n_screens = gdk_display_get_n_screens (display); + managers = g_new (XSettingsManager *, n_screens + 1); for (i = 0; i < n_screens; i++) @@ -694,45 +711,19 @@ main(int argc, char **argv) if (gconf_client != NULL) { - sd_settings_xsettings_load (gconf_client); - - gconf_client_add_dir(gconf_client, - "/desktop/gnome", - /* GCONF_CLIENT_PRELOAD_NONE */ - GCONF_CLIENT_PRELOAD_RECURSIVE, - NULL); - - gconf_client_notify_add(gconf_client, - "/desktop/gnome", - gconf_key_changed_callback, - NULL , /* UserData */ - NULL, - NULL); - - gconf_client_add_dir(gconf_client, - "/apps/matchbox", - /* GCONF_CLIENT_PRELOAD_NONE */ - GCONF_CLIENT_PRELOAD_RECURSIVE, - NULL); - - gconf_client_notify_add(gconf_client, - "/apps/matchbox", - gconf_key_changed_callback, - NULL , /* UserData */ - NULL, - NULL); - - gconf_client_add_dir(gconf_client, - FONT_RENDER_DIR, - GCONF_CLIENT_PRELOAD_RECURSIVE, - NULL); - - gconf_client_notify_add(gconf_client, - FONT_RENDER_DIR, - gconf_key_changed_callback, - NULL , /* UserData */ - NULL, - NULL); + for (i = 0; i < G_N_ELEMENTS (toplevels); i++) { + gconf_client_add_dir(gconf_client, + toplevels[i], + GCONF_CLIENT_PRELOAD_RECURSIVE, + NULL); + + gconf_client_notify_add(gconf_client, toplevels[i], + gconf_key_changed_callback, + NULL, NULL, NULL); + } + + sd_settings_xsettings_load (); + } else g_error ("Failed to initialise gconf client"); |