[Xfce4-commits] [apps/xfce4-screensaver] 01/01: Enable global screensaver switch

noreply at xfce.org noreply at xfce.org
Tue Nov 20 02:16:03 CET 2018


This is an automated email from the git hooks/post-receive script.

b   l   u   e   s   a   b   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfce4-screensaver.

commit 841924bca121363f073cfc98f522a54af5a64f75
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Mon Nov 19 20:15:57 2018 -0500

    Enable global screensaver switch
---
 src/gs-listener-x11.c                | 10 ++++++
 src/gs-listener-x11.h                |  2 ++
 src/gs-manager.c                     | 28 ++++++++++++++++-
 src/gs-manager.h                     |  4 +++
 src/gs-monitor.c                     |  2 ++
 src/gs-prefs.c                       | 17 ++++++++++
 src/gs-prefs.h                       |  8 +++++
 src/xfce4-screensaver-preferences.c  | 60 ++++++++++++++++++++++++++++++++++++
 src/xfce4-screensaver-preferences.ui |  3 +-
 9 files changed, 131 insertions(+), 3 deletions(-)

diff --git a/src/gs-listener-x11.c b/src/gs-listener-x11.c
index f3d55aa..0fa269e 100644
--- a/src/gs-listener-x11.c
+++ b/src/gs-listener-x11.c
@@ -55,6 +55,7 @@ struct GSListenerX11Private {
     gint     lock_timeout;
     guint    lock_timer_id;
     gboolean idle_activation_enabled;
+    gboolean saver_enabled;
 };
 
 enum {
@@ -115,6 +116,9 @@ lock_timer (GSListenerX11 *listener) {
     guint idle_time;
     gint  state;
 
+    if (!listener->priv->saver_enabled)
+        return TRUE;
+
     get_x11_idle_info (&idle_time, &state);
     gs_debug("Lock Timeout: %is, Idle: %is, Idle Activation: %s, Screensaver: %s, Lock State: %s",
              listener->priv->lock_timeout,
@@ -262,6 +266,12 @@ gs_listener_x11_set_lock_after (GSListenerX11 *listener,
 }
 
 void
+gs_listener_x11_set_saver_enabled (GSListenerX11 *listener,
+                                   gboolean       enabled) {
+    listener->priv->saver_enabled = enabled;
+}
+
+void
 gs_listener_x11_set_activation_enabled (GSListenerX11 *listener,
                                         gboolean       enabled) {
     listener->priv->idle_activation_enabled = enabled;
diff --git a/src/gs-listener-x11.h b/src/gs-listener-x11.h
index 136427f..c7575f9 100644
--- a/src/gs-listener-x11.h
+++ b/src/gs-listener-x11.h
@@ -54,6 +54,8 @@ GSListenerX11            *gs_listener_x11_new                       (void);
 gboolean                  gs_listener_x11_acquire                   (GSListenerX11 *listener);
 void                      gs_listener_x11_set_lock_after            (GSListenerX11 *listener,
                                                                      gint           lock_after);
+void                      gs_listener_x11_set_saver_enabled         (GSListenerX11 *listener,
+                                                                     gboolean       enabled);
 void                      gs_listener_x11_set_activation_enabled    (GSListenerX11 *listener,
                                                                      gboolean       enabled);
 
diff --git a/src/gs-manager.c b/src/gs-manager.c
index c8b52e3..65e0b27 100644
--- a/src/gs-manager.c
+++ b/src/gs-manager.c
@@ -55,6 +55,7 @@ struct GSManagerPrivate {
     glong           cycle_timeout;
     glong           logout_timeout;
 
+    guint           saver_enabled : 1;
     guint           lock_enabled : 1;
     guint           lock_with_saver_enabled : 1;
     guint           logout_enabled : 1;
@@ -136,7 +137,8 @@ select_theme (GSManager *manager) {
     g_return_val_if_fail (manager != NULL, NULL);
     g_return_val_if_fail (GS_IS_MANAGER (manager), NULL);
 
-    if (manager->priv->saver_mode == GS_MODE_BLANK_ONLY) {
+    if (!manager->priv->saver_enabled ||
+            manager->priv->saver_mode == GS_MODE_BLANK_ONLY) {
         return NULL;
     }
 
@@ -435,6 +437,30 @@ gs_manager_set_saver_active (GSManager *manager,
 }
 
 void
+gs_manager_get_saver_enabled (GSManager *manager,
+                              gboolean  *saver_enabled) {
+    if (saver_enabled != NULL) {
+        *saver_enabled = FALSE;
+    }
+
+    g_return_if_fail (GS_IS_MANAGER (manager));
+
+    if (saver_enabled != NULL) {
+        *saver_enabled = manager->priv->saver_enabled;
+    }
+}
+
+void
+gs_manager_set_saver_enabled (GSManager *manager,
+                              gboolean   saver_enabled) {
+    g_return_if_fail (GS_IS_MANAGER (manager));
+
+    if (manager->priv->saver_enabled != saver_enabled) {
+        manager->priv->saver_enabled = saver_enabled;
+    }
+}
+
+void
 gs_manager_get_lock_enabled (GSManager *manager,
                              gboolean  *lock_enabled) {
     if (lock_enabled != NULL) {
diff --git a/src/gs-manager.h b/src/gs-manager.h
index 9e68644..0d04386 100644
--- a/src/gs-manager.h
+++ b/src/gs-manager.h
@@ -76,6 +76,10 @@ void        gs_manager_set_keyboard_command    (GSManager   *manager,
                                                 const char  *command);
 void        gs_manager_set_status_message      (GSManager   *manager,
                                                 const char  *message);
+void        gs_manager_get_saver_enabled       (GSManager   *manager,
+                                                gboolean    *saver_enabled);
+void        gs_manager_set_saver_enabled       (GSManager   *manager,
+                                                gboolean     saver_enabled);
 void        gs_manager_get_lock_enabled        (GSManager   *manager,
                                                 gboolean    *lock_enabled);
 void        gs_manager_set_lock_enabled        (GSManager   *manager,
diff --git a/src/gs-monitor.c b/src/gs-monitor.c
index ab2f09e..ae52f20 100644
--- a/src/gs-monitor.c
+++ b/src/gs-monitor.c
@@ -212,12 +212,14 @@ static void _gs_monitor_update_from_prefs(GSMonitor* monitor, GSPrefs* prefs) {
     gs_manager_set_keyboard_command(monitor->priv->manager, monitor->priv->prefs->keyboard_command);
     gs_manager_set_cycle_timeout(monitor->priv->manager, monitor->priv->prefs->cycle);
     gs_manager_set_mode(monitor->priv->manager, monitor->priv->prefs->mode);
+    gs_manager_set_saver_enabled(monitor->priv->manager, monitor->priv->prefs->saver_enabled);
     gs_manager_set_themes(monitor->priv->manager, monitor->priv->prefs->themes);
 
     /* enable activation when allowed */
     gs_listener_set_activation_enabled(monitor->priv->listener, monitor->priv->prefs->idle_activation_enabled);
     gs_listener_x11_set_activation_enabled(monitor->priv->listener_x11, monitor->priv->prefs->idle_activation_enabled);
     gs_listener_x11_set_lock_after(monitor->priv->listener_x11, monitor->priv->prefs->timeout);
+    gs_listener_x11_set_saver_enabled(monitor->priv->listener_x11, monitor->priv->prefs->saver_enabled);
 }
 
 static void disconnect_listener_signals(GSMonitor* monitor) {
diff --git a/src/gs-prefs.c b/src/gs-prefs.c
index ed5c105..ab3a2ae 100644
--- a/src/gs-prefs.c
+++ b/src/gs-prefs.c
@@ -173,6 +173,12 @@ _gs_prefs_set_idle_activation_enabled (GSPrefs  *prefs,
 }
 
 static void
+_gs_prefs_set_saver_enabled (GSPrefs  *prefs,
+                            gboolean  value) {
+    prefs->saver_enabled = value;
+}
+
+static void
 _gs_prefs_set_lock_enabled (GSPrefs  *prefs,
                             gboolean  value) {
     prefs->lock_enabled = value;
@@ -262,6 +268,11 @@ gs_prefs_load_from_settings (GSPrefs *prefs) {
     _gs_prefs_set_idle_activation_enabled (prefs, bvalue);
 
     bvalue = xfconf_channel_get_bool (prefs->priv->channel,
+                                      KEY_SAVER_ENABLED,
+                                      DEFAULT_KEY_SAVER_ENABLED);
+    _gs_prefs_set_saver_enabled (prefs, bvalue);
+
+    bvalue = xfconf_channel_get_bool (prefs->priv->channel,
                                       KEY_LOCK_ENABLED,
                                       DEFAULT_KEY_LOCK_ENABLED);
     _gs_prefs_set_lock_enabled (prefs, bvalue);
@@ -370,6 +381,11 @@ key_changed_cb (XfconfChannel *channel,
 
         enabled = xfconf_channel_get_bool (channel, property, DEFAULT_KEY_IDLE_ACTIVATION_ENABLED);
         _gs_prefs_set_idle_activation_enabled (prefs, enabled);
+    } else if (strcmp (property, KEY_SAVER_ENABLED) == 0) {
+        gboolean enabled;
+
+        enabled = xfconf_channel_get_bool (channel, property, DEFAULT_KEY_SAVER_ENABLED);
+        _gs_prefs_set_saver_enabled (prefs, enabled);
     } else if (strcmp (property, KEY_LOCK_ENABLED) == 0) {
         gboolean enabled;
 
@@ -436,6 +452,7 @@ gs_prefs_init (GSPrefs *prefs) {
                       G_CALLBACK (key_changed_cb),
                       prefs);
 
+    prefs->saver_enabled           = TRUE;
     prefs->lock_enabled            = TRUE;
     prefs->idle_activation_enabled = TRUE;
     prefs->lock_with_saver_enabled = TRUE;
diff --git a/src/gs-prefs.h b/src/gs-prefs.h
index 863b6e9..da9686f 100644
--- a/src/gs-prefs.h
+++ b/src/gs-prefs.h
@@ -38,6 +38,13 @@ G_BEGIN_DECLS
 #define SETTINGS_XFCONF_CHANNEL "xfce4-screensaver"
 
 /**
+ * Enable screensaver
+ * Set this to TRUE to globally enable screensavers.
+ */
+#define KEY_SAVER_ENABLED "/saver/enabled"
+#define DEFAULT_KEY_SAVER_ENABLED TRUE
+
+/**
  * Screensaver theme selection mode
  * The selection mode used by screensaver. May be "blank-only" to enable the screensaver
  * without using any theme on activation, "single" to enable screensaver using only one
@@ -170,6 +177,7 @@ typedef struct
 
     GSPrefsPrivate  *priv;
 
+    guint            saver_enabled : 1; /* global saver switch */
     guint            lock_enabled : 1; /* global lock switch */
 
     guint            idle_activation_enabled : 1; /* whether to activate when idle */
diff --git a/src/xfce4-screensaver-preferences.c b/src/xfce4-screensaver-preferences.c
index 5e44472..386feed 100644
--- a/src/xfce4-screensaver-preferences.c
+++ b/src/xfce4-screensaver-preferences.c
@@ -318,6 +318,27 @@ config_set_idle_activation_enabled (gboolean enabled) {
 }
 
 static gboolean
+config_get_saver_enabled (gboolean *is_writable) {
+    gboolean lock;
+
+    if (is_writable) {
+        *is_writable = !xfconf_channel_is_property_locked (screensaver_channel,
+                                                           KEY_SAVER_ENABLED);
+    }
+
+    lock = xfconf_channel_get_bool (screensaver_channel,
+                                    KEY_SAVER_ENABLED,
+                                    DEFAULT_KEY_SAVER_ENABLED);
+
+    return lock;
+}
+
+static void
+config_set_saver_enabled (gboolean lock) {
+    xfconf_channel_set_bool (screensaver_channel, KEY_SAVER_ENABLED, lock);
+}
+
+static gboolean
 config_get_lock_enabled (gboolean *is_writable) {
     gboolean lock;
 
@@ -1088,6 +1109,16 @@ drag_data_received_cb (GtkWidget        *widget,
 }
 
 static void
+saver_toggled_cb (GtkSwitch *widget, gpointer user_data) {
+    gboolean writable;
+
+    config_set_saver_enabled (gtk_switch_get_active (widget));
+
+    writable = gtk_switch_get_active (widget);
+    gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (builder, "saver_grid")), writable);
+}
+
+static void
 lock_toggled_cb (GtkSwitch *widget, gpointer user_data) {
     gboolean writable;
 
@@ -1159,6 +1190,23 @@ keyboard_toggled_cb (GtkSwitch *widget, gpointer user_data) {
 }
 
 static void
+ui_set_saver_enabled (gboolean enabled) {
+    GtkWidget *widget;
+    gboolean   active;
+    gboolean   writable;
+
+    widget = GTK_WIDGET (gtk_builder_get_object (builder, "saver_enabled"));
+
+    active = gtk_switch_get_active (GTK_SWITCH (widget));
+    if (active != enabled) {
+        gtk_switch_set_active (GTK_SWITCH (widget), enabled);
+    }
+
+    writable = enabled;
+    gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (builder, "saver_grid")), writable);
+}
+
+static void
 ui_set_lock_enabled (gboolean enabled) {
     GtkWidget *widget;
     gboolean   active;
@@ -1351,6 +1399,10 @@ key_changed_cb (XfconfChannel *channel, const gchar *key, gpointer data) {
         gboolean enabled;
         enabled = xfconf_channel_get_bool (channel, key, DEFAULT_KEY_IDLE_ACTIVATION_ENABLED);
         ui_set_idle_activation_enabled (enabled);
+    } else if (strcmp (key, KEY_SAVER_ENABLED) == 0) {
+        gboolean enabled;
+        enabled = xfconf_channel_get_bool (channel, key, DEFAULT_KEY_SAVER_ENABLED);
+        ui_set_saver_enabled (enabled);
     } else if (strcmp (key, KEY_LOCK_ENABLED) == 0) {
         gboolean enabled;
         enabled = xfconf_channel_get_bool (channel, key, DEFAULT_KEY_LOCK_ENABLED);
@@ -1860,6 +1912,14 @@ configure_capplet (void) {
     g_signal_connect (widget, "notify::active",
                       G_CALLBACK (idle_activation_toggled_cb), NULL);
 
+    /* Saver enabled */
+    widget = GTK_WIDGET (gtk_builder_get_object (builder, "saver_enabled"));
+    enabled = config_get_saver_enabled (&is_writable);
+    ui_set_saver_enabled (enabled);
+    set_widget_writable (widget, is_writable);
+    g_signal_connect (widget, "notify::active",
+                      G_CALLBACK (saver_toggled_cb), NULL);
+
     /* Lock enabled */
     widget = GTK_WIDGET (gtk_builder_get_object (builder, "lock_enabled"));
     enabled = config_get_lock_enabled (&is_writable);
diff --git a/src/xfce4-screensaver-preferences.ui b/src/xfce4-screensaver-preferences.ui
index 80c32c0..d4eccfd 100644
--- a/src/xfce4-screensaver-preferences.ui
+++ b/src/xfce4-screensaver-preferences.ui
@@ -550,9 +550,8 @@ Simon Steinbeiß
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkSwitch" id="saver_enable">
+                          <object class="GtkSwitch" id="saver_enabled">
                             <property name="visible">True</property>
-                            <property name="sensitive">False</property>
                             <property name="can_focus">True</property>
                             <property name="halign">end</property>
                             <property name="valign">center</property>

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list