From 27ef135f95fde4046ab5e513e1b82cc4849b35d8 Mon Sep 17 00:00:00 2001 From: Michael Weiser Date: Thu, 9 Jan 2020 14:19:40 +0100 Subject: [PATCH 2/2] Fix dbus inhibition Port over necessary routines from mate screensaver and wire them into idle screensaving and locking decisions. Do not inhibit explicit locking e.g. via dbus because it's security relevant and we should do it if requested explicitly. --- src/gs-listener-dbus.c | 12 ++++++++++++ src/gs-listener-dbus.h | 7 +------ src/gs-monitor.c | 10 ++++++++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/gs-listener-dbus.c b/src/gs-listener-dbus.c index 0c15379..1a8f88b 100644 --- a/src/gs-listener-dbus.c +++ b/src/gs-listener-dbus.c @@ -391,6 +391,18 @@ gs_listener_activate_saver (GSListener *listener, return TRUE; } +gboolean +gs_listener_is_inhibited (GSListener *listener) +{ + gboolean inhibited; + + g_return_val_if_fail (GS_IS_LISTENER (listener), FALSE); + + inhibited = listener_ref_entry_is_present (listener, REF_ENTRY_TYPE_INHIBIT); + + return inhibited; +} + static dbus_bool_t listener_property_set_bool (GSListener *listener, guint prop_id, diff --git a/src/gs-listener-dbus.h b/src/gs-listener-dbus.h index 048a404..41266f7 100644 --- a/src/gs-listener-dbus.h +++ b/src/gs-listener-dbus.h @@ -78,12 +78,7 @@ gboolean gs_listener_acquire (GSListener *listener, GError **error); gboolean gs_listener_activate_saver (GSListener *listener, gboolean active); -gboolean gs_listener_set_session_idle (GSListener *listener, - gboolean idle); -void gs_listener_set_activation_enabled (GSListener *listener, - gboolean enabled); -void gs_listener_set_sleep_activation_enabled (GSListener *listener, - gboolean enabled); +gboolean gs_listener_is_inhibited (GSListener *listener); G_END_DECLS diff --git a/src/gs-monitor.c b/src/gs-monitor.c index ffdaa4a..d3b9e4b 100644 --- a/src/gs-monitor.c +++ b/src/gs-monitor.c @@ -87,10 +87,20 @@ static void listener_lock_cb(GSListener* listener, GSMonitor* monitor) { } static void listener_x11_activate_cb(GSListenerX11* listener, GSMonitor* monitor) { + if (gs_listener_is_inhibited(monitor->priv->listener)) { + gs_debug("Idle screen saving inhibited via dbus"); + return; + } + gs_listener_activate_saver(monitor->priv->listener, TRUE); } static void listener_x11_lock_cb(GSListenerX11* listener, GSMonitor* monitor) { + if (gs_listener_is_inhibited(monitor->priv->listener)) { + gs_debug("Idle locking inhibited via dbus"); + return; + } + listener_lock_cb (NULL, monitor); } -- 2.24.1