diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 1ce114e6d..eabf6a7d5 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -1508,7 +1508,7 @@ const MessageTray = new Lang.Class({ this._idleMonitorWatchId = 0; this._backFromAway = false; - this.idleMonitor = new Shell.IdleMonitor(); + this.idleMonitor = Shell.IdleMonitor.get(); // To simplify the summary item animation code, we pretend // that there's an invisible SummaryItem to the left of the diff --git a/src/shell-idle-monitor.c b/src/shell-idle-monitor.c index 22581d100..592f4772c 100644 --- a/src/shell-idle-monitor.c +++ b/src/shell-idle-monitor.c @@ -316,15 +316,21 @@ shell_idle_monitor_init (ShellIdleMonitor *monitor) monitor->priv->counter = None; } +/** + * shell_idle_monitor_get: + * + * Returns: (transfer none): the global #ShellIdleMonitor. + */ ShellIdleMonitor * -shell_idle_monitor_new (void) +shell_idle_monitor_get (void) { - GObject *idle_monitor; + static ShellIdleMonitor *idle_monitor; - idle_monitor = g_object_new (SHELL_TYPE_IDLE_MONITOR, - NULL); + if (G_UNLIKELY (idle_monitor == NULL)) + idle_monitor = g_object_new (SHELL_TYPE_IDLE_MONITOR, + NULL); - return SHELL_IDLE_MONITOR (idle_monitor); + return idle_monitor; } static gboolean diff --git a/src/shell-idle-monitor.h b/src/shell-idle-monitor.h index 1086d9216..2fcd0820b 100644 --- a/src/shell-idle-monitor.h +++ b/src/shell-idle-monitor.h @@ -56,7 +56,7 @@ typedef void (*ShellIdleMonitorWatchFunc) (ShellIdleMonitor *monitor, GType shell_idle_monitor_get_type (void); -ShellIdleMonitor * shell_idle_monitor_new (void); +ShellIdleMonitor * shell_idle_monitor_get (void); guint shell_idle_monitor_add_watch (ShellIdleMonitor *monitor, guint interval,