| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "flutter/shell/platform/linux/fl_settings.h" |
| #include "flutter/shell/platform/linux/fl_gnome_settings.h" |
| #include "flutter/shell/platform/linux/fl_settings_portal.h" |
| |
| G_DEFINE_INTERFACE(FlSettings, fl_settings, G_TYPE_OBJECT) |
| |
| enum { |
| kSignalChanged, |
| kSignalLastSignal, |
| }; |
| |
| static guint signals[kSignalLastSignal]; |
| |
| static void fl_settings_default_init(FlSettingsInterface* iface) { |
| /** |
| * FlSettings::changed: |
| * @settings: an #FlSettings |
| * |
| * This signal is emitted after the settings have been changed. |
| */ |
| signals[kSignalChanged] = |
| g_signal_new("changed", G_TYPE_FROM_INTERFACE(iface), G_SIGNAL_RUN_LAST, |
| 0, NULL, NULL, NULL, G_TYPE_NONE, 0); |
| } |
| |
| FlClockFormat fl_settings_get_clock_format(FlSettings* self) { |
| return FL_SETTINGS_GET_IFACE(self)->get_clock_format(self); |
| } |
| |
| FlColorScheme fl_settings_get_color_scheme(FlSettings* self) { |
| return FL_SETTINGS_GET_IFACE(self)->get_color_scheme(self); |
| } |
| |
| gboolean fl_settings_get_enable_animations(FlSettings* self) { |
| return FL_SETTINGS_GET_IFACE(self)->get_enable_animations(self); |
| } |
| |
| gboolean fl_settings_get_high_contrast(FlSettings* self) { |
| return FL_SETTINGS_GET_IFACE(self)->get_high_contrast(self); |
| } |
| |
| gdouble fl_settings_get_text_scaling_factor(FlSettings* self) { |
| return FL_SETTINGS_GET_IFACE(self)->get_text_scaling_factor(self); |
| } |
| |
| void fl_settings_emit_changed(FlSettings* self) { |
| g_return_if_fail(FL_IS_SETTINGS(self)); |
| g_signal_emit(self, signals[kSignalChanged], 0); |
| } |
| |
| FlSettings* fl_settings_new() { |
| g_autoptr(FlSettingsPortal) portal = fl_settings_portal_new(); |
| |
| g_autoptr(GError) error = nullptr; |
| if (!fl_settings_portal_start(portal, &error)) { |
| g_debug("XDG desktop portal settings unavailable: %s", error->message); |
| return fl_gnome_settings_new(); |
| } |
| |
| return FL_SETTINGS(g_object_ref(portal)); |
| } |