[polari] roomList: Keep track of roomRow objects
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari] roomList: Keep track of roomRow objects
- Date: Thu, 8 Aug 2013 13:14:59 +0000 (UTC)
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]