diff options
Diffstat (limited to 'plugins/xsettings/msd-xsettings-manager.c')
| -rw-r--r-- | plugins/xsettings/msd-xsettings-manager.c | 88 |
1 files changed, 50 insertions, 38 deletions
diff --git a/plugins/xsettings/msd-xsettings-manager.c b/plugins/xsettings/msd-xsettings-manager.c index c8199da..86ff376 100644 --- a/plugins/xsettings/msd-xsettings-manager.c +++ b/plugins/xsettings/msd-xsettings-manager.c @@ -56,6 +56,10 @@ #define SCALING_FACTOR_QT_KEY "window-scaling-factor-qt-sync" #define FONT_RENDER_SCHEMA "org.mate.font-rendering" + +#define XSETTINGS_PLUGIN_SCHEMA "org.mate.SettingsDaemon.plugins.xsettings" +#define XSETTINGS_OVERRIDE_KEY "overrides" + #define FONT_ANTIALIASING_KEY "antialiasing" #define FONT_HINTING_KEY "hinting" #define FONT_RGBA_ORDER_KEY "rgba-order" @@ -106,6 +110,7 @@ struct MateXSettingsManagerPrivate XSettingsManager **managers; GHashTable *gsettings; GSettings *gsettings_font; + GSettings *plugin_settings; fontconfig_monitor_handle_t *fontconfig_handle; gint window_scale; }; @@ -549,44 +554,6 @@ scale_change_workarounds (MateXSettingsManager *manager, int new_scale, int unsc g_clear_error (&error); } } - } else { - /* Restart marco */ - /* FIXME: The ideal scenario would be for marco to respect window scaling and thus - * resize itself. Currently this is not happening, so msd restarts it when the window - * scaling factor changes so that it's visually correct. */ - wm_common_update_window(); - gchar *wm = wm_common_get_current_window_manager (); - if (g_strcmp0 (wm, WM_COMMON_MARCO) == 0) { - gchar *marco[3] = {"marco", "--replace", NULL}; - if (!g_spawn_async (NULL, marco, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error)) { - g_warning ("There was a problem restarting marco: %s", error->message); - g_clear_error (&error); - } - } - g_free (wm); - - /* Restart mate-panel */ - /* FIXME: The ideal scenario would be for mate-panel to respect window scaling and thus - * resize itself. Currently this is not happening, so msd restarts it when the window - * scaling factor changes so that it's visually correct. */ - gchar *mate_panel[3] = {"killall", "mate-panel", NULL}; - if (!g_spawn_async (NULL, mate_panel, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error)) { - g_warning ("There was a problem restarting mate-panel: %s", error->message); - g_clear_error (&error); - } - - /* Toggle icons on desktop to fix size */ - /* FIXME: The ideal scenario would be for caja to respect window scaling and thus - * resize itself. Currently this is not happening, so msd restarts it when the window - * scaling factor changes so that it's visually correct. */ - GSettings *desktop_settings; - desktop_settings = g_settings_new ("org.mate.background"); - if (g_settings_get_boolean (desktop_settings, "show-desktop-icons")) { - /* Delay the toggle to allow enough time for the desktop to redraw */ - g_timeout_add_seconds (1, delayed_toggle_bg_draw, GBOOLEAN_TO_POINTER (FALSE)); - g_timeout_add_seconds (2, delayed_toggle_bg_draw, GBOOLEAN_TO_POINTER (TRUE)); - } - g_object_unref (desktop_settings); } /* Store new scale value */ @@ -744,6 +711,34 @@ xft_callback (GSettings *gsettings G_GNUC_UNUSED, } static void +override_callback (GSettings *settings, + const gchar *key, + MateXSettingsManager *manager) +{ + GVariant *value; + int i; + + value = g_settings_get_value (settings, XSETTINGS_OVERRIDE_KEY); + + for (i = 0; manager->priv->managers [i]; i++) { + xsettings_manager_set_overrides (manager->priv->managers [i], value); + xsettings_manager_notify (manager->priv->managers [i]); + } + + g_variant_unref (value); +} + +static void +plugin_callback (GSettings *settings, + const char *key, + MateXSettingsManager *manager) +{ + if (g_str_equal (key, XSETTINGS_OVERRIDE_KEY)) { + override_callback (settings, key, manager); + } +} + +static void fontconfig_callback (fontconfig_monitor_handle_t *handle, MateXSettingsManager *manager) { @@ -972,6 +967,10 @@ mate_xsettings_manager_start (MateXSettingsManager *manager, g_signal_connect (manager->priv->gsettings_font, "changed", G_CALLBACK (xft_callback), manager); update_xft_settings (manager); + /* Plugin settings (overrides) */ + manager->priv->plugin_settings = g_settings_new (XSETTINGS_PLUGIN_SCHEMA); + g_signal_connect (manager->priv->plugin_settings, "changed", G_CALLBACK (plugin_callback), manager); + start_fontconfig_monitor (manager); for (i = 0; manager->priv->managers [i]; i++) @@ -983,6 +982,14 @@ mate_xsettings_manager_start (MateXSettingsManager *manager, xsettings_manager_notify (manager->priv->managers [i]); } + /* Load initial overrides */ + GVariant *overrides = g_settings_get_value (manager->priv->plugin_settings, XSETTINGS_OVERRIDE_KEY); + for (i = 0; manager->priv->managers [i]; i++) { + xsettings_manager_set_overrides (manager->priv->managers [i], overrides); + xsettings_manager_notify (manager->priv->managers [i]); + } + g_variant_unref (overrides); + mate_settings_profile_end (NULL); return TRUE; @@ -1014,6 +1021,11 @@ mate_xsettings_manager_stop (MateXSettingsManager *manager) p->gsettings_font = NULL; } + if (p->plugin_settings != NULL) { + g_object_unref (p->plugin_settings); + p->plugin_settings = NULL; + } + stop_fontconfig_monitor (manager); } |
