From 216ea5edada1d3ad43a7018345e568fda24667a1 Mon Sep 17 00:00:00 2001 From: Leo Date: Wed, 31 Jan 2024 09:15:22 +0900 Subject: [PATCH] Expose prefer dark schedule settings (#85) --- ...mentary.SettingsDaemon.AccountsService.xml | 20 +++++++++-- src/AccountsService.vala | 18 ++++++---- src/Backends/InterfaceSettings.vala | 34 +++++++++++++++++++ src/Backends/NightLightSettings.vala | 18 ---------- 4 files changed, 63 insertions(+), 27 deletions(-) diff --git a/data/io.elementary.SettingsDaemon.AccountsService.xml b/data/io.elementary.SettingsDaemon.AccountsService.xml index a224057a..9bf2b681 100644 --- a/data/io.elementary.SettingsDaemon.AccountsService.xml +++ b/data/io.elementary.SettingsDaemon.AccountsService.xml @@ -132,14 +132,28 @@ - - + + + + - + + + + + + + + + + + + + diff --git a/src/AccountsService.vala b/src/AccountsService.vala index 73c37836..7e06e06b 100644 --- a/src/AccountsService.vala +++ b/src/AccountsService.vala @@ -20,6 +20,11 @@ [DBus (name = "io.elementary.SettingsDaemon.AccountsService")] public interface SettingsDaemon.AccountsService : Object { + public struct Coordinates { + public double latitude; + public double longitude; + } + /* Keyboard */ public struct KeyboardLayout { public string backend; @@ -64,14 +69,15 @@ public interface SettingsDaemon.AccountsService : Object { public abstract string monospace_font_name { owned get; set; } public abstract bool orientation_lock { get; set; } - /* Night Light */ - public struct Coordinates { - public double latitude; - public double longitude; - } + /* Prefer Dark Schedule (part of interface settings)*/ + /* Last coordinates are reused for Night Light settings */ + public abstract Coordinates last_coordinates { get; set; } + public abstract int prefer_dark_schedule { get; set; } + public abstract double prefer_dark_schedule_from { get; set; } + public abstract double prefer_dark_schedule_to { get; set; } + /* Night Light */ public abstract bool night_light_enabled { get; set; } - public abstract Coordinates night_light_last_coordinates { get; set; } public abstract bool night_light_schedule_automatic { get; set; } public abstract double night_light_schedule_from { get; set; } public abstract double night_light_schedule_to { get; set; } diff --git a/src/Backends/InterfaceSettings.vala b/src/Backends/InterfaceSettings.vala index e658f3ba..a2e06444 100644 --- a/src/Backends/InterfaceSettings.vala +++ b/src/Backends/InterfaceSettings.vala @@ -33,13 +33,18 @@ public class SettingsDaemon.Backends.InterfaceSettings : GLib.Object { private const string FONT_NAME = "font-name"; private const string MONOSPACE_FONT_NAME = "monospace-font-name"; + private const string LAST_COORDINATES = "last-coordinates"; private const string ORIENTATION_LOCK = "orientation-lock"; + private const string PREFER_DARK_SCHEDULE = "prefer-dark-schedule"; + private const string PREFER_DARK_SCHEDULE_FROM = "prefer-dark-schedule-from"; + private const string PREFER_DARK_SCHEDULE_TO = "prefer-dark-schedule-to"; public unowned AccountsService accounts_service { get; construct; } public unowned DisplayManager.AccountsService display_manager_accounts_service { get; construct; } private GLib.Settings interface_settings; private GLib.Settings background_settings; + private GLib.Settings settings_daemon_settings; private GLib.Settings touchscreen_settings; public InterfaceSettings (AccountsService accounts_service, DisplayManager.AccountsService display_manager_accounts_service) { @@ -52,6 +57,7 @@ public class SettingsDaemon.Backends.InterfaceSettings : GLib.Object { construct { interface_settings = new GLib.Settings ("org.gnome.desktop.interface"); background_settings = new GLib.Settings ("org.gnome.desktop.background"); + settings_daemon_settings = new GLib.Settings ("io.elementary.settings-daemon.prefers-color-scheme"); touchscreen_settings = new GLib.Settings ("org.gnome.settings-daemon.peripherals.touchscreen"); sync_gsettings_to_accountsservice (); @@ -82,6 +88,15 @@ public class SettingsDaemon.Backends.InterfaceSettings : GLib.Object { } }); + settings_daemon_settings.changed.connect ((key) => { + if (key == LAST_COORDINATES || + key == PREFER_DARK_SCHEDULE || + key == PREFER_DARK_SCHEDULE_FROM || + key == PREFER_DARK_SCHEDULE_TO) { + sync_gsettings_to_accountsservice (); + } + }); + touchscreen_settings.changed.connect (sync_gsettings_to_accountsservice); } @@ -100,6 +115,25 @@ public class SettingsDaemon.Backends.InterfaceSettings : GLib.Object { accounts_service.font_name = interface_settings.get_string (FONT_NAME); accounts_service.monospace_font_name = interface_settings.get_string (MONOSPACE_FONT_NAME); + var last_coordinates_value = settings_daemon_settings.get_value (LAST_COORDINATES); + if (last_coordinates_value.is_of_type (GLib.VariantType.TUPLE)) { + double latitude; + double longitude; + + last_coordinates_value.@get ("(dd)", out latitude, out longitude); + + accounts_service.last_coordinates = AccountsService.Coordinates () { + latitude = latitude, + longitude = longitude + }; + } else { + warning ("Unknown prefer dark coordinates type, unable to save to AccountsService"); + } + + accounts_service.prefer_dark_schedule = settings_daemon_settings.get_enum (PREFER_DARK_SCHEDULE); + accounts_service.prefer_dark_schedule_from = settings_daemon_settings.get_double (PREFER_DARK_SCHEDULE_FROM); + accounts_service.prefer_dark_schedule_to = settings_daemon_settings.get_double (PREFER_DARK_SCHEDULE_TO); + accounts_service.orientation_lock = touchscreen_settings.get_boolean (ORIENTATION_LOCK); } diff --git a/src/Backends/NightLightSettings.vala b/src/Backends/NightLightSettings.vala index b3d30d71..0110fd7a 100644 --- a/src/Backends/NightLightSettings.vala +++ b/src/Backends/NightLightSettings.vala @@ -6,7 +6,6 @@ public class SettingsDaemon.Backends.NightLightSettings : GLib.Object { private const string NIGHT_LIGHT_SCHEMA = "org.gnome.settings-daemon.plugins.color"; private const string NIGHT_LIGHT_ENABLED = "night-light-enabled"; - private const string NIGHT_LIGHT_LAST_COORDINATES = "night-light-last-coordinates"; private const string NIGHT_LIGHT_SCHEDULE_AUTOMATIC = "night-light-schedule-automatic"; private const string NIGHT_LIGHT_SCHEDULE_FROM = "night-light-schedule-from"; private const string NIGHT_LIGHT_SCHEDULE_TO = "night-light-schedule-to"; @@ -33,7 +32,6 @@ night_light_settings.changed.connect ((key) => { if (key == NIGHT_LIGHT_ENABLED || - key == NIGHT_LIGHT_LAST_COORDINATES || key == NIGHT_LIGHT_SCHEDULE_AUTOMATIC || key == NIGHT_LIGHT_SCHEDULE_FROM || key == NIGHT_LIGHT_SCHEDULE_TO || @@ -45,22 +43,6 @@ private void sync_gsettings_to_accountsservice () { accounts_service.night_light_enabled = night_light_settings.get_boolean (NIGHT_LIGHT_ENABLED); - - var last_coordinates_value = night_light_settings.get_value (NIGHT_LIGHT_LAST_COORDINATES); - if (last_coordinates_value.is_of_type (GLib.VariantType.TUPLE)) { - double latitude; - double longitude; - - last_coordinates_value.@get ("(dd)", out latitude, out longitude); - - accounts_service.night_light_last_coordinates = AccountsService.Coordinates () { - latitude = latitude, - longitude = longitude - }; - } else { - warning ("Unknown night light coordinates type, unable to save to AccountsService"); - } - accounts_service.night_light_schedule_automatic = night_light_settings.get_boolean (NIGHT_LIGHT_SCHEDULE_AUTOMATIC); accounts_service.night_light_schedule_from = night_light_settings.get_double (NIGHT_LIGHT_SCHEDULE_FROM); accounts_service.night_light_schedule_to = night_light_settings.get_double (NIGHT_LIGHT_SCHEDULE_TO);