Skip to content

Commit 49174d5

Browse files
authored
Merge pull request #1146 from ittner/fix-color-scheme-support-across-des
Fix color scheme support across desktop environments
2 parents 4f6ab31 + 76eff98 commit 49174d5

File tree

2 files changed

+43
-10
lines changed

2 files changed

+43
-10
lines changed

src/conf.c

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,19 +81,24 @@ conf_get_dark_theme (void)
8181
if (fdo_settings) {
8282
gint scheme;
8383

84-
conf_get_int_value_from_schema (fdo_settings, "color-scheme", &scheme);
85-
debug1 (DEBUG_CONF, "FDO reports color-schema code '%d'", scheme);
86-
if (1 == scheme)
87-
dark = FALSE;
88-
if (0 == scheme && 2 == scheme)
89-
dark = TRUE;
84+
if (conf_schema_has_key (fdo_settings, "color-scheme")) {
85+
conf_get_int_value_from_schema (fdo_settings, "color-scheme", &scheme);
86+
debug1 (DEBUG_CONF, "FDO reports color-schema code '%d'", scheme);
87+
if (1 == scheme)
88+
dark = FALSE;
89+
if (0 == scheme || 2 == scheme)
90+
dark = TRUE;
91+
}
9092
} else {
9193
gchar *scheme = NULL;
9294

93-
conf_get_str_value_from_schema (desktop_settings, "color-scheme", &scheme);
94-
if (scheme) {
95-
debug1 (DEBUG_CONF, "GNOME reports color-schema '%s'", scheme);
96-
dark = g_str_equal (scheme, "prefer-dark");
95+
if (conf_schema_has_key (desktop_settings, "color-scheme")) {
96+
conf_get_str_value_from_schema (desktop_settings, "color-scheme", &scheme);
97+
if (scheme) {
98+
debug1 (DEBUG_CONF, "GNOME reports color-schema '%s'", scheme);
99+
dark = g_str_equal (scheme, "prefer-dark");
100+
g_free (scheme);
101+
}
97102
}
98103
}
99104

@@ -225,6 +230,23 @@ conf_get_toolbar_style(void)
225230
return style;
226231
}
227232

233+
gboolean
234+
conf_schema_has_key (GSettings *gsettings, const gchar *key)
235+
{
236+
g_assert (gsettings != NULL);
237+
g_assert (key != NULL);
238+
239+
GSettingsSchema *schema = NULL;
240+
gboolean has_key = FALSE;
241+
242+
g_object_get (gsettings, "settings-schema", &schema, NULL);
243+
if (schema) {
244+
has_key = g_settings_schema_has_key (schema, key);
245+
g_settings_schema_unref (schema);
246+
}
247+
return has_key;
248+
}
249+
228250
gboolean
229251
conf_get_bool_value_from_schema (GSettings *gsettings, const gchar *key, gboolean *value)
230252
{

src/conf.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,17 @@ void conf_deinit (void);
9595
#define conf_get_strv_value(key, value) conf_get_strv_value_from_schema (NULL, key, value)
9696
#define conf_get_int_value(key, value) conf_get_int_value_from_schema (NULL, key, value)
9797

98+
99+
/**
100+
* Returns true if the key is defined in the schema for the given gsettings.
101+
*
102+
* @param gsettings gsettings schema to use
103+
* @param key the configuration key
104+
*
105+
* @returns TRUE if the configuration key is defined
106+
*/
107+
gboolean conf_schema_has_key (GSettings *gsettings, const gchar *key);
108+
98109
/**
99110
* Retrieves the value of the given boolean configuration key.
100111
*

0 commit comments

Comments
 (0)