[gnome-settings-daemon/wip/hadess/force-screensaver-power-saver] power: Screensave faster if power saver mode is on




commit 6a1df15984c82add8a4e43b754d679f101e1105d
Author: Bastien Nocera <hadess hadess net>
Date:   Wed Jul 28 16:40:24 2021 +0200

    power: Screensave faster if power saver mode is on
    
    As done on other platforms, aggressively turn the screensaver on after a
    short period when the user has selected to enter power saver mode.
    
    This behaviour is already the one we use to force the screensaver to
    come on when battery is low, so the behaviour will only change for
    desktop machines and laptops where energy conservation is wanted.
    
    Idle inhibitions are obviously still respected.
    
    Prior art:
    https://support.apple.com/en-us/HT205234

 plugins/power/gsd-power-manager.c | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)
---
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index 1f125a6f..cf6f5a57 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -192,6 +192,7 @@ struct _GsdPowerManager
         /* Power Profiles */
         GDBusProxy              *power_profiles_proxy;
         guint32                  power_saver_cookie;
+        gboolean                 power_saver_enabled;
 
         /* Sound */
         guint32                  critical_alert_timeout_id;
@@ -1903,7 +1904,8 @@ idle_configure (GsdPowerManager *manager)
                 /* Don't dim when the screen lock is active */
         } else if (!on_battery) {
                 /* Don't dim when charging */
-        } else if (manager->battery_is_low) {
+        } else if (manager->battery_is_low ||
+                   manager->power_saver_enabled) {
                 /* Aggressively blank when battery is low */
                 timeout_dim = SCREENSAVER_TIMEOUT_BLANK;
         } else {
@@ -2165,6 +2167,30 @@ power_profiles_proxy_signal_cb (GDBusProxy  *proxy,
         manager->power_saver_cookie = 0;
 }
 
+static void
+power_profiles_proxy_properties_changed_cb (GDBusProxy *proxy,
+                                            GVariant   *changed_properties,
+                                            GStrv       invalidated_properties,
+                                            gpointer    user_data)
+{
+        GsdPowerManager *manager = user_data;
+        g_autoptr(GVariant) v = NULL;
+        const char *active_profile;
+        gboolean power_saver_enabled;
+
+        if (!changed_properties)
+                return;
+        v = g_dbus_proxy_get_cached_property (proxy, "ActiveProfile");
+        if (!v)
+                return;
+        active_profile = g_variant_get_string (v, NULL);
+        power_saver_enabled = g_strcmp0 (active_profile, "power-saver") == 0;
+        if (power_saver_enabled != manager->power_saver_enabled) {
+                manager->power_saver_enabled = power_saver_enabled;
+                idle_configure (manager);
+        }
+}
+
 static void
 power_profiles_proxy_ready_cb (GObject             *source_object,
                               GAsyncResult        *res,
@@ -2179,6 +2205,9 @@ power_profiles_proxy_ready_cb (GObject             *source_object,
                 return;
         }
 
+        g_signal_connect (manager->power_profiles_proxy, "g-properties-changed",
+                          G_CALLBACK (power_profiles_proxy_properties_changed_cb),
+                          manager);
         g_signal_connect (manager->power_profiles_proxy, "g-signal",
                           G_CALLBACK (power_profiles_proxy_signal_cb),
                           manager);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]