10
10
static constexpr char kDesktopInterfaceSchema [] = " org.gnome.desktop.interface" ;
11
11
static constexpr char kDesktopTextScalingFactorKey [] = " text-scaling-factor" ;
12
12
static constexpr char kDesktopClockFormatKey [] = " clock-format" ;
13
+ static constexpr char kDesktopColorSchemeKey [] = " color-scheme" ;
13
14
static constexpr char kDesktopGtkThemeKey [] = " gtk-theme" ;
14
15
15
16
static constexpr char kClockFormat12Hour [] = " 12h" ;
17
+ static constexpr char kColorSchemePreferDark [] = " prefer-dark" ;
16
18
static constexpr char kGtkThemeDarkSuffix [] = " -dark" ;
17
19
18
20
struct _FlGnomeSettings {
@@ -46,17 +48,32 @@ static FlClockFormat fl_gnome_settings_get_clock_format(FlSettings* settings) {
46
48
return clock_format;
47
49
}
48
50
51
+ static bool has_setting (GSettings* settings, const gchar* key) {
52
+ g_autoptr (GSettingsSchema) schema = nullptr ;
53
+ g_object_get (settings, " settings-schema" , &schema, nullptr );
54
+ return g_settings_schema_has_key (schema, key);
55
+ }
56
+
49
57
static FlColorScheme fl_gnome_settings_get_color_scheme (FlSettings* settings) {
50
58
FlGnomeSettings* self = FL_GNOME_SETTINGS (settings);
51
59
52
60
FlColorScheme color_scheme = FL_COLOR_SCHEME_LIGHT;
53
61
54
62
if (self->interface_settings != nullptr ) {
55
- // check whether org.gnome.desktop.interface.gtk-theme ends with "-dark"
56
- g_autofree gchar* value =
57
- g_settings_get_string (self->interface_settings , kDesktopGtkThemeKey );
58
- if (g_str_has_suffix (value, kGtkThemeDarkSuffix )) {
59
- color_scheme = FL_COLOR_SCHEME_DARK;
63
+ if (has_setting (self->interface_settings , kDesktopColorSchemeKey )) {
64
+ // org.gnome.desktop.interface.color-scheme in GNOME 42 and later
65
+ g_autofree gchar* value = g_settings_get_string (self->interface_settings ,
66
+ kDesktopColorSchemeKey );
67
+ if (g_strcmp0 (value, kColorSchemePreferDark ) == 0 ) {
68
+ color_scheme = FL_COLOR_SCHEME_DARK;
69
+ }
70
+ } else {
71
+ // check whether org.gnome.desktop.interface.gtk-theme ends with "-dark"
72
+ g_autofree gchar* value =
73
+ g_settings_get_string (self->interface_settings , kDesktopGtkThemeKey );
74
+ if (g_str_has_suffix (value, kGtkThemeDarkSuffix )) {
75
+ color_scheme = FL_COLOR_SCHEME_DARK;
76
+ }
60
77
}
61
78
}
62
79
return color_scheme;
@@ -80,9 +97,11 @@ static void fl_gnome_settings_set_interface_settings(FlGnomeSettings* self,
80
97
g_signal_connect_object (settings, " changed::clock-format" ,
81
98
G_CALLBACK (fl_settings_emit_changed), self,
82
99
G_CONNECT_SWAPPED);
83
- g_signal_connect_object (settings, " changed::gtk-theme" ,
84
- G_CALLBACK (fl_settings_emit_changed), self,
85
- G_CONNECT_SWAPPED);
100
+ g_signal_connect_object (
101
+ settings,
102
+ has_setting (settings, kDesktopColorSchemeKey ) ? " changed::color-scheme"
103
+ : " changed::gtk-theme" ,
104
+ G_CALLBACK (fl_settings_emit_changed), self, G_CONNECT_SWAPPED);
86
105
g_signal_connect_object (settings, " changed::text-scaling-factor" ,
87
106
G_CALLBACK (fl_settings_emit_changed), self,
88
107
G_CONNECT_SWAPPED);
0 commit comments