[polari] roomList: Keep track of roomRow objects



commit 786aa5b9c4b653cadcf36b176d47ed548152d946
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu Aug 8 00:52:42 2013 +0200

    roomList: Keep track of roomRow objects
    
    Iterating over the list of GtkRows isn't really a big hit on performance,
    but not doing it does look quite a bit nicer ...

 src/roomList.js |   22 ++++++++++++----------
 1 files changed, 12 insertions(+), 10 deletions(-)
---
diff --git a/src/roomList.js b/src/roomList.js
index a00c05a..f7c2970 100644
--- a/src/roomList.js
+++ b/src/roomList.js
@@ -86,6 +86,8 @@ const RoomList = new Lang.Class({
         this.widget.set_header_func(Lang.bind(this, this._updateHeader));
         this.widget.set_sort_func(Lang.bind(this, this._sort));
 
+        this._roomRows = {};
+
         this.widget.connect('row-selected',
                             Lang.bind(this, this._onRowSelected));
 
@@ -122,14 +124,6 @@ const RoomList = new Lang.Class({
             }));
     },
 
-    _getRowByRoom: function(room) {
-        let rows = this.widget.get_children();
-        for (let i = 0; i < rows.length; i++)
-            if (rows[i].room.id == room.id)
-                return rows[i];
-        return null;
-    },
-
     _moveSelection: function(movement, count) {
         let toplevel = this.widget.get_toplevel();
         let focus = toplevel.get_focus();
@@ -147,6 +141,12 @@ const RoomList = new Lang.Class({
     _roomAdded: function(roomManager, room) {
         let roomRow = new RoomRow(room);
         this.widget.add(roomRow.widget);
+        this._roomRows[room.id] = roomRow;
+
+        roomRow.widget.connect('destroy', Lang.bind(this,
+            function(w) {
+                delete this._roomRows[w.room.id];
+            }));
     },
 
     _roomRemoved: function(roomManager, room) {
@@ -161,15 +161,17 @@ const RoomList = new Lang.Class({
             this._moveSelection(Gtk.MovementStep.DISPLAY_LINES, count);
         }
         this.widget.remove(row);
+        delete this._roomRows[room.id];
     },
 
     _activeRoomChanged: function(roomManager, room) {
         if (!room)
             return;
-        let row = this._getRowByRoom(room);
-        if (!row)
+        let roomRow = this._roomRows[room.id];
+        if (!roomRow)
             return;
 
+        let row = roomRow.widget;
         row.can_focus = false;
         this.widget.select_row(row);
         row.can_focus = true;


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