[gnome-shell] messageTray: Correct idleness



commit 8f7192062219e69e53cfb3b63f854c16ce89e370
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Fri Aug 10 18:54:33 2012 -0300

    messageTray: Correct idleness
    
    If the user is already active when the notification pops up, we
    won't get an idle watcher because there's no transition from
    active to idle or vice versa. Correct this by initializing the
    state correctly from XSync.

 js/ui/messageTray.js     |    8 +++++---
 src/shell-idle-monitor.c |   11 +++++++++++
 src/shell-idle-monitor.h |    2 ++
 3 files changed, 18 insertions(+), 3 deletions(-)
---
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index 5ba0830..8b420a6 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -39,6 +39,8 @@ const NOTIFICATION_ICON_SIZE = 24;
 // range from the point where it left the tray.
 const MOUSE_LEFT_ACTOR_THRESHOLD = 20;
 
+const IDLE_TIME = 1000;
+
 const State = {
     HIDDEN:  0,
     SHOWING: 1,
@@ -1979,9 +1981,9 @@ const MessageTray = new Lang.Class({
 
     _showNotification: function(notification) {
         this._notification = notification;
-        this._userActiveWhileNotificationShown = false;
-        this._idleMonitorWatchId = this.idleMonitor.add_watch(1000,
-                                                                  Lang.bind(this, this._onIdleMonitorWatch));
+        this._userActiveWhileNotificationShown = this.idleMonitor.get_idletime() <= IDLE_TIME;
+        this._idleMonitorWatchId = this.idleMonitor.add_watch(IDLE_TIME,
+                                                              Lang.bind(this, this._onIdleMonitorWatch));
         this._notificationClickedId = this._notification.connect('done-displaying',
                                                                  Lang.bind(this, this._escapeTray));
         this._notificationBin.child = this._notification.actor;
diff --git a/src/shell-idle-monitor.c b/src/shell-idle-monitor.c
index 592f477..5bdb6ba 100644
--- a/src/shell-idle-monitor.c
+++ b/src/shell-idle-monitor.c
@@ -416,3 +416,14 @@ shell_idle_monitor_remove_watch (ShellIdleMonitor *monitor,
         g_hash_table_remove (monitor->priv->watches,
                              GUINT_TO_POINTER (id));
 }
+
+gint64
+shell_idle_monitor_get_idletime (ShellIdleMonitor *monitor)
+{
+        XSyncValue value;
+
+        if (!XSyncQueryCounter (monitor->priv->display, monitor->priv->counter, &value))
+                return FALSE;
+
+        return _xsyncvalue_to_int64 (value);
+}
diff --git a/src/shell-idle-monitor.h b/src/shell-idle-monitor.h
index 2fcd082..6a62082 100644
--- a/src/shell-idle-monitor.h
+++ b/src/shell-idle-monitor.h
@@ -67,6 +67,8 @@ guint              shell_idle_monitor_add_watch    (ShellIdleMonitor         *mo
 void               shell_idle_monitor_remove_watch (ShellIdleMonitor         *monitor,
                                                     guint                     id);
 
+gint64             shell_idle_monitor_get_idletime (ShellIdleMonitor         *monitor);
+
 G_END_DECLS
 
 #endif /* __SHELL_IDLE_MONITOR_H */



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