[polari] roomStack: Only keep room widgets in stack as required
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari] roomStack: Only keep room widgets in stack as required
- Date: Wed, 17 Sep 2014 02:50:31 +0000 (UTC)
commit 132994557187d9ac5c80b8e07ace1ddf476eb884
Author: Florian Müllner <fmuellner gnome org>
Date: Tue Mar 4 19:20:25 2014 +0100
roomStack: Only keep room widgets in stack as required
GtkStack tends to get slow when containing too many widgets. Work
around this by only keeping the widgets that are actually visible
in the stack (i.e. two during transitions, one otherwise) and
remove widgets that are hidden.
src/roomStack.js | 22 ++++++++++++++++++++--
1 files changed, 20 insertions(+), 2 deletions(-)
---
diff --git a/src/roomStack.js b/src/roomStack.js
index 78dcbe2..84006cc 100644
--- a/src/roomStack.js
+++ b/src/roomStack.js
@@ -40,7 +40,8 @@ const RoomStack = new Lang.Class({
this._rooms[id] = view;
this._inputSizeGroup.add_widget(view.inputWidget);
- this.widget.add_named(view.widget, id);
+ if (!this.widget.visible_child)
+ this.widget.add(view.widget);
},
_roomAdded: function(roomManager, room) {
@@ -53,9 +54,26 @@ const RoomStack = new Lang.Class({
},
_activeRoomChanged: function(manager, room) {
- this.widget.set_visible_child_name(room ? room.id : 'placeholder');
+ let previous = this.widget.visible_child;
+ let next = this._rooms[room ? room.id : 'placeholder'];
+
+ if (!next.widget.get_parent())
+ this.widget.add(next.widget);
+ this.widget.set_visible_child(next.widget);
this.widget.transition_type = room ? Gtk.StackTransitionType.CROSSFADE
: Gtk.StackTransitionType.NONE;
+
+ if (!previous)
+ return;
+
+ let id = this.widget.connect('notify::transition-running', Lang.bind(this,
+ function() {
+ if (this.widget.transition_running)
+ return;
+ if (previous.get_parent())
+ this.widget.remove(previous);
+ this.widget.disconnect(id);
+ }));
},
_updateSensitivity: function() {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]