[gnome-shell] telepathyClient: Keep source alive while channel is open



commit a0868bac6bd09be733f918907f5f8cb66a571a31
Author: Florian Müllner <fmuellner gnome org>
Date:   Fri Apr 10 13:19:23 2015 +0200

    telepathyClient: Keep source alive while channel is open
    
    Sources are destroyed with their last notification. This is usually the
    correct behavior, however in case of chat sources, the corresponding
    telepathy channel might still be open, and any further messages that
    should trigger a notification are lost because chat sources are only
    created when telepathy's channel dispatcher notifies us about a channel
    (via ObserveChannels).
    Loosing messages like this is unexpected, so keep chat sources around
    even without notifications while the channel is open.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=747636

 js/ui/components/telepathyClient.js |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)
---
diff --git a/js/ui/components/telepathyClient.js b/js/ui/components/telepathyClient.js
index 061b813..3aa06e7 100644
--- a/js/ui/components/telepathyClient.js
+++ b/js/ui/components/telepathyClient.js
@@ -158,14 +158,6 @@ const TelepathyClient = new Lang.Class({
         this._chatSources[channel.get_object_path()] = source;
         source.connect('destroy', Lang.bind(this,
                        function() {
-                           if (this._tpClient.is_handling_channel(channel)) {
-                               // The chat box has been destroyed so it can't
-                               // handle the channel any more.
-                               channel.close_async(function(src, result) {
-                                   channel.close_finish(result);
-                               });
-                           }
-
                            delete this._chatSources[channel.get_object_path()];
                        }));
     },
@@ -474,6 +466,18 @@ const ChatSource = new Lang.Class({
     },
 
     destroy: function(reason) {
+        if (this._client.is_handling_channel(this._channel)) {
+            // The chat box has been destroyed so it can't
+            // handle the channel any more.
+            this._channel.close_async(function(channel, result) {
+                channel.close_finish(result);
+            });
+        }
+
+        // Keep source alive while the channel is open
+        if (reason != MessageTray.NotificationDestroyedReason.SOURCE_CLOSED)
+            return;
+
         if (this._destroyed)
             return;
 


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