|
9 | 9 | static constexpr char kDesktopInterfaceSchema[] = "org.gnome.desktop.interface";
|
10 | 10 | static constexpr char kDesktopTextScalingFactorKey[] = "text-scaling-factor";
|
11 | 11 | static constexpr char kDesktopClockFormatKey[] = "clock-format";
|
| 12 | +static constexpr char kDesktopColorSchemeKey[] = "color-scheme"; |
12 | 13 | static constexpr char kDesktopGtkThemeKey[] = "gtk-theme";
|
13 | 14 |
|
14 | 15 | static constexpr char kClockFormat12Hour[] = "12h";
|
@@ -53,17 +54,32 @@ static FlClockFormat fl_gnome_settings_get_clock_format(FlSettings* settings) {
|
53 | 54 | return clock_format;
|
54 | 55 | }
|
55 | 56 |
|
| 57 | +static bool has_color_scheme(GSettings* settings) { |
| 58 | + g_autoptr(GSettingsSchema) schema = nullptr; |
| 59 | + g_object_get(settings, "settings-schema", &schema, nullptr); |
| 60 | + return g_settings_schema_has_key(schema, kDesktopColorSchemeKey); |
| 61 | +} |
| 62 | + |
56 | 63 | static FlColorScheme fl_gnome_settings_get_color_scheme(FlSettings* settings) {
|
57 | 64 | FlGnomeSettings* self = FL_GNOME_SETTINGS(settings);
|
58 | 65 |
|
59 | 66 | FlColorScheme color_scheme = FL_COLOR_SCHEME_LIGHT;
|
60 | 67 |
|
61 | 68 | if (self->interface_settings != nullptr) {
|
62 |
| - // check whether org.gnome.desktop.interface.gtk-theme ends with "-dark" |
63 |
| - g_autofree gchar* value = |
64 |
| - g_settings_get_string(self->interface_settings, kDesktopGtkThemeKey); |
65 |
| - if (g_str_has_suffix(value, kGtkThemeDarkSuffix)) { |
66 |
| - color_scheme = FL_COLOR_SCHEME_DARK; |
| 69 | + if (has_color_scheme(self->interface_settings)) { |
| 70 | + // org.gnome.desktop.interface.color-scheme in GNOME 42 and later |
| 71 | + g_autofree gchar* value = g_settings_get_string(self->interface_settings, |
| 72 | + kDesktopColorSchemeKey); |
| 73 | + if (g_strcmp0(value, kColorSchemePreferDark) == 0) { |
| 74 | + color_scheme = FL_COLOR_SCHEME_DARK; |
| 75 | + } |
| 76 | + } else { |
| 77 | + // check whether org.gnome.desktop.interface.gtk-theme ends with "-dark" |
| 78 | + g_autofree gchar* value = |
| 79 | + g_settings_get_string(self->interface_settings, kDesktopGtkThemeKey); |
| 80 | + if (g_str_has_suffix(value, kGtkThemeDarkSuffix)) { |
| 81 | + color_scheme = FL_COLOR_SCHEME_DARK; |
| 82 | + } |
67 | 83 | }
|
68 | 84 | }
|
69 | 85 | return color_scheme;
|
@@ -128,9 +144,11 @@ FlSettings* fl_gnome_settings_new(GSettings* interface_settings) {
|
128 | 144 | g_signal_connect_object(self->interface_settings, "changed::clock-format",
|
129 | 145 | G_CALLBACK(fl_settings_emit_changed), self,
|
130 | 146 | G_CONNECT_SWAPPED);
|
131 |
| - g_signal_connect_object(self->interface_settings, "changed::gtk-theme", |
132 |
| - G_CALLBACK(fl_settings_emit_changed), self, |
133 |
| - G_CONNECT_SWAPPED); |
| 147 | + g_signal_connect_object( |
| 148 | + self->interface_settings, |
| 149 | + has_color_scheme(self->interface_settings) ? "changed::color-scheme" |
| 150 | + : "changed::gtk-theme", |
| 151 | + G_CALLBACK(fl_settings_emit_changed), self, G_CONNECT_SWAPPED); |
134 | 152 | g_signal_connect_object(
|
135 | 153 | self->interface_settings, "changed::text-scaling-factor",
|
136 | 154 | G_CALLBACK(fl_settings_emit_changed), self, G_CONNECT_SWAPPED);
|
|
0 commit comments