[Xfce4-commits] [apps/xfce4-screensaver] 01/01: Fix confusion between saver and lock timeouts

noreply at xfce.org noreply at xfce.org
Wed Jul 3 05:31:15 CEST 2019


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 2d8e1cb7b2d7fac67c0618b8980677f32ec4e5b7
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Tue Jul 2 23:31:09 2019 -0400

    Fix confusion between saver and lock timeouts
---
 src/gs-listener-x11.c | 89 +++++++++++++++++++++++++++++++++------------------
 src/gs-listener-x11.h |  3 +-
 src/gs-manager.c      |  4 +--
 src/gs-prefs.c        |  2 +-
 4 files changed, 61 insertions(+), 37 deletions(-)

diff --git a/src/gs-listener-x11.c b/src/gs-listener-x11.c
index 0223989..3a26ff2 100644
--- a/src/gs-listener-x11.c
+++ b/src/gs-listener-x11.c
@@ -43,13 +43,14 @@ static void         gs_listener_x11_class_init      (GSListenerX11Class *klass);
 static void         gs_listener_x11_init            (GSListenerX11      *listener);
 static void         gs_listener_x11_finalize        (GObject            *object);
 
-static void         reset_lock_timer                (GSListenerX11      *listener,
+static void         reset_timer                     (GSListenerX11      *listener,
                                                      guint               timeout);
 
 struct GSListenerX11Private {
     int scrnsaver_event_base;
+    gint     timeout;
     gint     lock_timeout;
-    guint    lock_timer_id;
+    guint    timer_id;
     GSPrefs *prefs;
 };
 
@@ -108,24 +109,35 @@ get_x11_idle_info (guint *idle_time,
 
 static gboolean
 lock_timer (GSListenerX11 *listener) {
-    guint idle_time;
-    gint  state;
+    guint    idle_time;
+    guint    lock_time = 0;
+    gint     state;
+    gboolean lock_state;
 
     if (!listener->priv->prefs->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,
+    if (idle_time > listener->priv->timeout) {
+        lock_time = idle_time - listener->priv->timeout;
+    }
+    lock_state = (state == ScreenSaverOn &&
+                  listener->priv->prefs->lock_with_saver_enabled &&
+                  lock_time >= listener->priv->lock_timeout);
+
+    gs_debug("Idle: %is, Saver: %s, Saver Timeout: %is, Lock: %s, Lock Timeout: %is, Lock Timer: %is, Lock Status: %s",
              idle_time,
              listener->priv->prefs->idle_activation_enabled ? "Enabled" : "Disabled",
-             state == ScreenSaverDisabled ? "Disabled" : "Enabled",
-             state == ScreenSaverOn ? "Locked" : "Unlocked");
+             listener->priv->timeout,
+             listener->priv->prefs->lock_with_saver_enabled ? "Enabled" : "Disabled",
+             listener->priv->lock_timeout,
+             lock_time,
+             lock_state ? "Locked" : "Unlocked");
 
     if (listener->priv->prefs->idle_activation_enabled &&
-            idle_time >= listener->priv->lock_timeout &&
+            idle_time >= listener->priv->timeout &&
             state != ScreenSaverDisabled) {
-        if (state == ScreenSaverOn)
+        if (lock_state)
             g_signal_emit(listener, signals[LOCK], 0);
         else
             g_signal_emit(listener, signals[ACTIVATE], 0);
@@ -133,10 +145,10 @@ lock_timer (GSListenerX11 *listener) {
         switch (state) {
             case ScreenSaverOff:
                 // Reset the lock timer
-                if (idle_time < listener->priv->lock_timeout) {
-                    reset_lock_timer(listener, listener->priv->lock_timeout - idle_time);
+                if (idle_time < listener->priv->timeout) {
+                    reset_timer(listener, listener->priv->timeout - idle_time);
                 } else {
-                    reset_lock_timer(listener, 30);
+                    reset_timer(listener, 30);
                 }
                 return FALSE;
                 break;
@@ -147,7 +159,8 @@ lock_timer (GSListenerX11 *listener) {
 
             case ScreenSaverOn:
                 // lock now!
-                g_signal_emit(listener, signals[LOCK], 0);
+                if (lock_state)
+                    g_signal_emit(listener, signals[LOCK], 0);
                 break;
         }
     }
@@ -157,20 +170,20 @@ lock_timer (GSListenerX11 *listener) {
 
 static void
 remove_lock_timer(GSListenerX11 *listener) {
-    if (listener->priv->lock_timer_id != 0) {
-        g_source_remove(listener->priv->lock_timer_id);
-        listener->priv->lock_timer_id = 0;
+    if (listener->priv->timer_id != 0) {
+        g_source_remove(listener->priv->timer_id);
+        listener->priv->timer_id = 0;
     }
 }
 
 static void
-reset_lock_timer(GSListenerX11 *listener,
-                 guint          timeout) {
+reset_timer(GSListenerX11 *listener,
+            guint          timeout) {
     remove_lock_timer(listener);
 
-    listener->priv->lock_timer_id = g_timeout_add_seconds(timeout,
-                                                          (GSourceFunc)lock_timer,
-                                                          listener);
+    listener->priv->timer_id = g_timeout_add_seconds(timeout,
+                                                     (GSourceFunc)lock_timer,
+                                                     listener);
 }
 
 static GdkFilterReturn
@@ -200,7 +213,7 @@ xroot_filter (GdkXEvent *xevent,
                 case ScreenSaverDisabled:
                     // Reset the lock timer
                     gs_debug("ScreenSaver timer reset");
-                    reset_lock_timer(listener, listener->priv->lock_timeout);
+                    reset_timer(listener, listener->priv->timeout);
                     break;
 
                 case ScreenSaverOn:
@@ -248,18 +261,30 @@ gs_listener_x11_acquire (GSListenerX11 *listener) {
     return TRUE;
 }
 
-void
-gs_listener_x11_set_timeout (GSListenerX11 *listener) {
+static void
+gs_listener_x11_set_timeouts (GSListenerX11 *listener) {
     Display *display = gdk_x11_display_get_xdisplay(gdk_display_get_default());
-    gint     lock_timeout = listener->priv->prefs->timeout * 60;
+    gint     timeout = listener->priv->prefs->timeout * 60;
+    gint     lock_timeout = listener->priv->prefs->lock_timeout * 60;
+    gboolean trigger_reset_timer = FALSE;
 
     /* set X server timeouts and disable screen blanking */
-    XSetScreenSaver(display, lock_timeout, lock_timeout, 0, 0);
+    XSetScreenSaver(display, timeout, timeout, 0, 0);
+
+    if (listener->priv->timeout != timeout) {
+        listener->priv->timeout = timeout;
+        gs_debug("Saver timeout updated to %i seconds", timeout);
+        trigger_reset_timer = TRUE;
+    }
 
     if (listener->priv->lock_timeout != lock_timeout) {
         listener->priv->lock_timeout = lock_timeout;
-        reset_lock_timer(listener, lock_timeout);
         gs_debug("Lock timeout updated to %i seconds", lock_timeout);
+        trigger_reset_timer = TRUE;
+    }
+
+    if (trigger_reset_timer) {
+        reset_timer(listener, timeout);
     }
 }
 
@@ -267,11 +292,11 @@ static void
 gs_listener_x11_init (GSListenerX11 *listener) {
     listener->priv = gs_listener_x11_get_instance_private (listener);
 
-    listener->priv->lock_timeout = 0;
+    listener->priv->timeout = 0;
 
     listener->priv->prefs = gs_prefs_new();
-    gs_listener_x11_set_timeout (listener);
-    g_signal_connect_swapped(listener->priv->prefs, "changed", G_CALLBACK(gs_listener_x11_set_timeout), listener);
+    gs_listener_x11_set_timeouts (listener);
+    g_signal_connect_swapped(listener->priv->prefs, "changed", G_CALLBACK(gs_listener_x11_set_timeouts), listener);
 }
 
 static void
@@ -286,7 +311,7 @@ gs_listener_x11_finalize (GObject *object) {
     g_return_if_fail (listener->priv != NULL);
 
     gdk_window_remove_filter (NULL, (GdkFilterFunc)xroot_filter, NULL);
-    g_signal_handlers_disconnect_by_func(listener->priv->prefs, gs_listener_x11_set_timeout, listener);
+    g_signal_handlers_disconnect_by_func(listener->priv->prefs, gs_listener_x11_set_timeouts, listener);
 
     G_OBJECT_CLASS (gs_listener_x11_parent_class)->finalize (object);
 }
diff --git a/src/gs-listener-x11.h b/src/gs-listener-x11.h
index bb0db15..d697258 100644
--- a/src/gs-listener-x11.h
+++ b/src/gs-listener-x11.h
@@ -52,8 +52,7 @@ GType                     gs_listener_x11_get_type                  (void);
 
 GSListenerX11            *gs_listener_x11_new                       (void);
 gboolean                  gs_listener_x11_acquire                   (GSListenerX11 *listener);
-void
-                          gs_listener_x11_set_timeout               (GSListenerX11 *listener);
+
 G_END_DECLS
 
 #endif /* SRC_GS_LISTENER_X11_H_ */
diff --git a/src/gs-manager.c b/src/gs-manager.c
index f9773f9..c11b85c 100644
--- a/src/gs-manager.c
+++ b/src/gs-manager.c
@@ -365,8 +365,8 @@ add_lock_timer (GSManager *manager,
     if (locked)
         return;
 
-    gs_debug ("Scheduling screen lock after screensaver is idling for %i sec", timeout / 1000);
-    manager->priv->lock_timeout_id = g_timeout_add (timeout,
+    gs_debug ("Scheduling screen lock after screensaver is idling for %i sec", timeout);
+    manager->priv->lock_timeout_id = g_timeout_add (timeout * 60000,
                                                     (GSourceFunc)activate_lock_timeout,
                                                     manager);
 }
diff --git a/src/gs-prefs.c b/src/gs-prefs.c
index cad833a..9fa408f 100644
--- a/src/gs-prefs.c
+++ b/src/gs-prefs.c
@@ -127,7 +127,7 @@ _gs_prefs_set_lock_timeout (GSPrefs *prefs,
     if (value > 480)
         value = 480;
 
-    prefs->lock_timeout = value * 60000;
+    prefs->lock_timeout = value;
 }
 
 static void

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


More information about the Xfce4-commits mailing list