summaryrefslogtreecommitdiff
path: root/plugins/xsettings/msd-xsettings-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/xsettings/msd-xsettings-manager.c')
-rw-r--r--plugins/xsettings/msd-xsettings-manager.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/plugins/xsettings/msd-xsettings-manager.c b/plugins/xsettings/msd-xsettings-manager.c
index c8199da..ad9bf82 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;
};
@@ -744,6 +749,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 +1005,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 +1020,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 +1059,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);
}