From 5030d59fcc29e59aea7d5e2d3f425ce1ededa56d Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Wed, 5 Sep 2012 18:59:50 +0200 Subject: [PATCH] messageTray: Focusing the text entry should force chats to stay open https://bugzilla.gnome.org/show_bug.cgi?id=682236 --- js/ui/components/telepathyClient.js | 8 ++++++++ js/ui/messageTray.js | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/js/ui/components/telepathyClient.js b/js/ui/components/telepathyClient.js index a6abeb193..d0137ac57 100644 --- a/js/ui/components/telepathyClient.js +++ b/js/ui/components/telepathyClient.js @@ -756,6 +756,14 @@ const ChatNotification = new Lang.Class({ this._responseEntry.clutter_text.connect('text-changed', Lang.bind(this, this._onEntryChanged)); this.setActionArea(this._responseEntry); + this._responseEntry.clutter_text.connect('key-focus-in', Lang.bind(this, function() { + this.focused = true; + })); + this._responseEntry.clutter_text.connect('key-focus-out', Lang.bind(this, function() { + this.focused = false; + this.emit('unfocused'); + })); + this._oldMaxScrollAdjustment = 0; this._createScrollArea(); this._lastGroup = null; diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 42ce76a5d..614842e51 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -318,6 +318,7 @@ const Notification = new Lang.Class({ // 'transient' is a reserved keyword in JS, so we have to use an alternate variable name this.isTransient = false; this.expanded = false; + this.focused = false; this.showWhenLocked = false; this.acknowledged = false; this._destroyed = false; @@ -1913,6 +1914,7 @@ const MessageTray = new Lang.Class({ let notificationExpanded = this._notification && this._notification.expanded; let notificationExpired = this._notificationTimeoutId == 0 && !(this._notification && this._notification.urgency == Urgency.CRITICAL) && + !(this._notification && this._notification.focused) && !this._pointerInTray && !this._locked && !(this._pointerInKeyboard && notificationExpanded); @@ -2125,6 +2127,9 @@ const MessageTray = new Lang.Class({ Lang.bind(this, this._onIdleMonitorWatch)); this._notificationClickedId = this._notification.connect('done-displaying', Lang.bind(this, this._escapeTray)); + this._notification.connect('unfocused', Lang.bind(this, function() { + this._updateState(); + })); this._notificationBin.child = this._notification.actor; this._notificationWidget.opacity = 0;