[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