[Xfce4-commits] [apps/xfce4-screensaver] 13/17: Fix screensaver and locking activation on idle

noreply at xfce.org noreply at xfce.org
Sat Mar 9 22:23:48 CET 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 333db9f20d57016da6a84a3be9994186fe9f0966
Author: Alexander Butenko <a.butenka at gmail.com>
Date:   Mon Feb 11 12:02:06 2019 -0400

    Fix screensaver and locking activation on idle
---
 src/gs-listener-x11.c | 132 ++++++--------------------------------------------
 src/gs-listener-x11.h |   6 +--
 src/gs-manager.c      |  21 +++-----
 src/gs-monitor.c      |   2 +-
 4 files changed, 25 insertions(+), 136 deletions(-)

diff --git a/src/gs-listener-x11.c b/src/gs-listener-x11.c
index 1653cec..816a57e 100644
--- a/src/gs-listener-x11.c
+++ b/src/gs-listener-x11.c
@@ -32,9 +32,7 @@
 #include <gtk/gtk.h>
 #include <gtk/gtkx.h>
 
-#ifdef HAVE_MIT_SAVER_EXTENSION
 #include <X11/extensions/scrnsaver.h>
-#endif
 
 #include "gs-listener-x11.h"
 #include "gs-marshal.h"
@@ -44,16 +42,9 @@ 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,
-                                                     guint               timeout);
-
 struct GSListenerX11Private {
-#ifdef HAVE_MIT_SAVER_EXTENSION
     int scrnsaver_event_base;
-#endif
-
-    gint     lock_timeout;
-    guint    lock_timer_id;
+    gint     timeout;
     gboolean idle_activation_enabled;
     gboolean saver_enabled;
 };
@@ -97,87 +88,6 @@ gs_listener_x11_class_init (GSListenerX11Class *klass) {
                       0);
 }
 
-static gboolean
-get_x11_idle_info (guint *idle_time,
-                   gint  *state) {
-    Display *display = gdk_x11_display_get_xdisplay(gdk_display_get_default());
-    static XScreenSaverInfo *mit_info = NULL;
-
-    mit_info = XScreenSaverAllocInfo();
-    XScreenSaverQueryInfo(display, GDK_ROOT_WINDOW(), mit_info);
-    *idle_time = mit_info->idle / 1000;  // seconds
-    *state = mit_info->state;
-
-    return TRUE;
-}
-
-static gboolean
-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,
-             idle_time,
-             listener->priv->idle_activation_enabled ? "Enabled" : "Disabled",
-             state == ScreenSaverDisabled ? "Disabled" : "Enabled",
-             state == ScreenSaverOn ? "Locked" : "Unlocked");
-
-    if (listener->priv->idle_activation_enabled &&
-            idle_time >= listener->priv->lock_timeout &&
-            state != ScreenSaverDisabled) {
-        if (state == ScreenSaverOn)
-            g_signal_emit(listener, signals[LOCK], 0);
-        else
-            g_signal_emit(listener, signals[ACTIVATE], 0);
-    } else {
-        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);
-                } else {
-                    reset_lock_timer(listener, 30);
-                }
-                return FALSE;
-                break;
-
-            case ScreenSaverDisabled:
-                // Disabled, do nothing
-                break;
-
-            case ScreenSaverOn:
-                // lock now!
-                g_signal_emit(listener, signals[LOCK], 0);
-                break;
-        }
-    }
-
-    return TRUE;
-}
-
-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;
-    }
-}
-
-static void
-reset_lock_timer(GSListenerX11 *listener,
-                 guint          timeout) {
-    remove_lock_timer(listener);
-
-    listener->priv->lock_timer_id = g_timeout_add_seconds(timeout,
-                                                          (GSourceFunc)lock_timer,
-                                                          listener);
-}
-
 static GdkFilterReturn
 xroot_filter (GdkXEvent *xevent,
               GdkEvent  *event,
@@ -190,30 +100,23 @@ xroot_filter (GdkXEvent *xevent,
 
     listener = GS_LISTENER_X11 (data);
 
+    if (!listener->priv->idle_activation_enabled)
+        return GDK_FILTER_CONTINUE;
+
     ev = xevent;
 
     switch (ev->xany.type) {
     default:
         /* extension events */
-#ifdef HAVE_MIT_SAVER_EXTENSION
         if (ev->xany.type == (listener->priv->scrnsaver_event_base + ScreenSaverNotify)) {
             XScreenSaverNotifyEvent *xssne = (XScreenSaverNotifyEvent *) ev;
             switch (xssne->state) {
-                case ScreenSaverOff:
-                case ScreenSaverDisabled:
-                    // Reset the lock timer
-                    gs_debug("ScreenSaver timer reset");
-                    reset_lock_timer(listener, listener->priv->lock_timeout);
-                    break;
-
                 case ScreenSaverOn:
-                    // lock now!
-                    gs_debug("ScreenSaver on");
-                    g_signal_emit (listener, signals[LOCK], 0);
+                    gs_debug("Activating screensaver on ScreenSaverOn");
+                    g_signal_emit (listener, signals[ACTIVATE], 0);
                     break;
             }
         }
-#endif
         break;
     }
 
@@ -226,10 +129,8 @@ gs_listener_x11_acquire (GSListenerX11 *listener) {
     GdkDisplay *display;
     GdkScreen *screen;
     GdkWindow *window;
-#ifdef HAVE_MIT_SAVER_EXTENSION
     int scrnsaver_error_base;
     unsigned long events;
-#endif
 
     g_return_val_if_fail (listener != NULL, FALSE);
 
@@ -237,7 +138,6 @@ gs_listener_x11_acquire (GSListenerX11 *listener) {
     screen = gdk_display_get_default_screen (display);
     window = gdk_screen_get_root_window (screen);
 
-#ifdef HAVE_MIT_SAVER_EXTENSION
     gdk_x11_display_error_trap_push (display);
     if (XScreenSaverQueryExtension (GDK_DISPLAY_XDISPLAY (display),
                                     &listener->priv->scrnsaver_event_base,
@@ -250,7 +150,6 @@ gs_listener_x11_acquire (GSListenerX11 *listener) {
     }
 
     gdk_x11_display_error_trap_pop_ignored (display);
-#endif
 
     gdk_window_add_filter (NULL, (GdkFilterFunc)xroot_filter, listener);
 
@@ -258,15 +157,14 @@ gs_listener_x11_acquire (GSListenerX11 *listener) {
 }
 
 void
-gs_listener_x11_set_lock_after (GSListenerX11 *listener,
-                                gint           lock_after) {
-    gint timeout = lock_after * 60;
-
-    if (listener->priv->lock_timeout != timeout) {
-        gs_debug("Lock timeout updated to %i minutes", lock_after);
-        listener->priv->lock_timeout = lock_after * 60;
-        reset_lock_timer(listener, listener->priv->lock_timeout);
-    }
+gs_listener_x11_set_timeout (GSListenerX11 *listener,
+                             gint           timeout) {
+    Display *display = gdk_x11_display_get_xdisplay(gdk_display_get_default());
+
+    /* set X server timeouts and disable screen blanking */
+    XSetScreenSaver(display, timeout * 60, timeout * 60, 0,0);
+    listener->priv->timeout = timeout * 60;
+    gs_debug("Screensaver timeout updated to %i minutes", timeout);
 }
 
 void
@@ -284,8 +182,6 @@ gs_listener_x11_set_activation_enabled (GSListenerX11 *listener,
 static void
 gs_listener_x11_init (GSListenerX11 *listener) {
     listener->priv = gs_listener_x11_get_instance_private (listener);
-
-    listener->priv->lock_timeout = 300;
 }
 
 static void
diff --git a/src/gs-listener-x11.h b/src/gs-listener-x11.h
index c7575f9..f4e1076 100644
--- a/src/gs-listener-x11.h
+++ b/src/gs-listener-x11.h
@@ -52,13 +52,13 @@ 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_lock_after            (GSListenerX11 *listener,
-                                                                     gint           lock_after);
+void
+                          gs_listener_x11_set_timeout               (GSListenerX11 *listener,
+                                                                     gint           timeout);
 void                      gs_listener_x11_set_saver_enabled         (GSListenerX11 *listener,
                                                                      gboolean       enabled);
 void                      gs_listener_x11_set_activation_enabled    (GSListenerX11 *listener,
                                                                      gboolean       enabled);
-
 G_END_DECLS
 
 #endif /* SRC_GS_LISTENER_X11_H_ */
diff --git a/src/gs-manager.c b/src/gs-manager.c
index d151fa9..0f8a5ac 100644
--- a/src/gs-manager.c
+++ b/src/gs-manager.c
@@ -487,20 +487,6 @@ gs_manager_set_lock_enabled (GSManager *manager,
 }
 
 void
-gs_manager_get_lock_with_saver_enabled (GSManager *manager,
-                             gboolean  *lock_with_saver_enabled) {
-    if (lock_with_saver_enabled != NULL) {
-        *lock_with_saver_enabled = FALSE;
-    }
-
-    g_return_if_fail (GS_IS_MANAGER (manager));
-
-    if (lock_with_saver_enabled != NULL) {
-        *lock_with_saver_enabled = manager->priv->lock_with_saver_enabled;
-    }
-}
-
-void
 gs_manager_set_lock_with_saver_enabled (GSManager *manager,
                              gboolean   lock_with_saver_enabled) {
     g_return_if_fail (GS_IS_MANAGER (manager));
@@ -560,6 +546,7 @@ activate_lock_timeout (GSManager *manager) {
     if (manager->priv->lock_enabled &&
             manager->priv->lock_with_saver_enabled)
     {
+        gs_debug ("Locking screen after idling timeout");
         gs_manager_set_lock_active (manager, TRUE);
     }
 
@@ -579,6 +566,12 @@ remove_lock_timer (GSManager *manager) {
 static void
 add_lock_timer (GSManager *manager,
                 glong      timeout) {
+    if (!manager->priv->lock_enabled)
+        return;
+    if (!manager->priv->lock_with_saver_enabled)
+        return;
+
+    gs_debug ("Scheduling screen lock after screensaver is idling for %i sec", timeout / 1000);
     manager->priv->lock_timeout_id = g_timeout_add (timeout,
                                                     (GSourceFunc)activate_lock_timeout,
                                                     manager);
diff --git a/src/gs-monitor.c b/src/gs-monitor.c
index b600278..e94fe3d 100644
--- a/src/gs-monitor.c
+++ b/src/gs-monitor.c
@@ -219,7 +219,7 @@ static void _gs_monitor_update_from_prefs(GSMonitor* monitor, GSPrefs* prefs) {
     /* 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_timeout(monitor->priv->listener_x11, monitor->priv->prefs->timeout);
     gs_listener_x11_set_saver_enabled(monitor->priv->listener_x11, monitor->priv->prefs->saver_enabled);
 }
 

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


More information about the Xfce4-commits mailing list