[polari/wip/fmuellner/nickserv: 3/21] mainWindow: Track last selected room



commit b38331ad606991f7bd3c9a220d0c876ac3de56f3
Author: Florian Müllner <fmuellner gnome org>
Date:   Sun Jul 31 16:12:53 2016 +0200

    mainWindow: Track last selected room
    
    Equally, the tracking of the last selected room is now easier done by
    the window. For now, we still rely on the correct room being restored
    first, but we will soon handle this in the window as well.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=769655

 src/chatroomManager.js |   27 ---------------------------
 src/mainWindow.js      |   22 ++++++++++++++++++++++
 2 files changed, 22 insertions(+), 27 deletions(-)
---
diff --git a/src/chatroomManager.js b/src/chatroomManager.js
index c0151a5..6b7d10e 100644
--- a/src/chatroomManager.js
+++ b/src/chatroomManager.js
@@ -154,16 +154,7 @@ const _ChatroomManager = new Lang.Class({
         this._amIsPrepared = false;
         this._accountsMonitor.prepare(Lang.bind(this, this._onPrepared));
 
-        this._app.connect('prepare-shutdown',
-                          Lang.bind(this, this._onPrepareShutdown));
-        this._app.connect('window-added', (a, w) => {
-            w.connect('notify::active-room',
-                      Lang.bind(this, this._onActiveRoomChanged));
-        });
-
         this._settings = new Gio.Settings({ schema_id: 'org.gnome.Polari' });
-
-        this._lastActiveRoom = null;
     },
 
     _onPrepared: function() {
@@ -458,24 +449,6 @@ const _ChatroomManager = new Lang.Class({
         this.emit('room-removed', room);
     },
 
-    _onPrepareShutdown: function() {
-        if (this._lastActiveRoom) {
-            let serializedChannel = { account: GLib.Variant.new('s', 
this._lastActiveRoom.account.get_object_path()),
-                                      channel: GLib.Variant.new('s', this._lastActiveRoom.channel_name) };
-
-            this._settings.set_value('last-selected-channel', GLib.Variant.new('a{sv}', serializedChannel));
-        } else {
-            this._settings.reset('last-selected-channel');
-        }
-    },
-
-    _onActiveRoomChanged: function(window) {
-        let room = window.active_room;
-
-        if (room && room.type == Tp.HandleType.ROOM)
-            this._lastActiveRoom = room;
-    },
-
     _setActiveRoom: function(room) {
         this._app.active_window.active_room = room;
     },
diff --git a/src/mainWindow.js b/src/mainWindow.js
index 4db610e..84e52fa 100644
--- a/src/mainWindow.js
+++ b/src/mainWindow.js
@@ -124,6 +124,7 @@ const MainWindow = new Lang.Class({
         params.show_menubar = false;
 
         this._room = null;
+        this._lastActiveRoom = null;
 
         this._displayNameChangedId = 0;
         this._topicChangedId = 0;
@@ -170,6 +171,8 @@ const MainWindow = new Lang.Class({
         this._roomManager = ChatroomManager.getDefault();
         this._roomManager.connect('room-added',
                                   Lang.bind(this, this._onRoomAdded));
+        this._roomManager.connect('room-removed',
+                                  Lang.bind(this, this._onRoomRemoved));
 
         this._updateUserListLabel();
 
@@ -228,6 +231,18 @@ const MainWindow = new Lang.Class({
         this._settings.set_boolean ('window-maximized', this._isMaximized);
         this._settings.set_value('window-size',
                                  GLib.Variant.new('ai', this._currentSize));
+
+        let serializedChannel = null;
+        if (this._lastActiveRoom)
+            serializedChannel = new GLib.Variant('a{sv}', {
+                account: new GLib.Variant('s', this._lastActiveRoom.account.object_path),
+                channel: new GLib.Variant('s', this._lastActiveRoom.channel_name)
+            });
+
+        if (serializedChannel)
+            this._settings.set_value('last-selected-channel', serializedChannel);
+        else
+            this._settings.reset('last-selected-channel');
     },
 
     _onAccountsChanged: function(am) {
@@ -270,6 +285,8 @@ const MainWindow = new Lang.Class({
         this._membersChangedId = 0;
         this._channelChangedId = 0;
 
+        if (room && room.type == Tp.HandleType.ROOM)
+            this._lastActiveRoom = room;
         this._room = room;
 
         this._updateTitlebar();
@@ -318,6 +335,11 @@ const MainWindow = new Lang.Class({
         this.active_room = room;
     },
 
+    _onRoomRemoved: function(mgr, room) {
+        if (room == this._lastActiveRoom)
+            this._lastActiveRoom = null;
+    },
+
     showJoinRoomDialog: function() {
         let dialog = new JoinDialog.JoinDialog({ transient_for: this });
         dialog.show();


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