[mutter] idle-monitor: Postpone dispatching of idle timeout if not ready



commit 1ca0fdc928511edea57b72bfb798be84b8293b1e
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Tue Apr 16 18:07:31 2019 +0200

    idle-monitor: Postpone dispatching of idle timeout if not ready
    
    If we update the ready time while the source is already in the
    to-dispatch list, changing the ready time doesn't have any effect, and
    the source will still be dispatched. This could cause incorrect idle
    watch firing causing the power management plugin in
    gnome-settings-daemon to sometimes turn off monitors due to it believing
    the user had been idle for some time, while in fact, they just logged
    back in.
    
    Fix this by not actually dispatching the idle timeout if the ready time
    is in the future when actually dispatching.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/543

 src/backends/meta-idle-monitor.c | 7 +++++++
 1 file changed, 7 insertions(+)
---
diff --git a/src/backends/meta-idle-monitor.c b/src/backends/meta-idle-monitor.c
index 6b8d36be9..e83d6c778 100644
--- a/src/backends/meta-idle-monitor.c
+++ b/src/backends/meta-idle-monitor.c
@@ -316,6 +316,13 @@ idle_monitor_dispatch_timeout (GSource     *source,
                                gpointer     user_data)
 {
   MetaIdleMonitorWatch *watch = (MetaIdleMonitorWatch *) user_data;
+  int64_t now;
+  int64_t ready_time;
+
+  now = g_source_get_time (source);
+  ready_time = g_source_get_ready_time (source);
+  if (ready_time > now)
+    return G_SOURCE_CONTINUE;
 
   _meta_idle_monitor_watch_fire (watch);
   g_source_set_ready_time (watch->timeout_source, -1);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]