Lazy generate occupant menu list

This commit is contained in:
fiaxh 2020-07-22 18:40:33 +02:00
parent b104be4842
commit a8f127b32e

View file

@ -11,7 +11,7 @@ public class View : Popover {
private Conversation conversation; private Conversation conversation;
private Stack stack = new Stack() { vhomogeneous=false, visible=true }; private Stack stack = new Stack() { vhomogeneous=false, visible=true };
private List list; private List? list = null;
private ListBox invite_list; private ListBox invite_list;
private Box? jid_menu = null; private Box? jid_menu = null;
@ -22,8 +22,19 @@ public class View : Popover {
this.conversation = conversation; this.conversation = conversation;
Box list_box = new Box(Orientation.VERTICAL, 1) { visible=true }; Box list_box = new Box(Orientation.VERTICAL, 1) { visible=true };
this.show.connect(() => {
if (list == null) {
list = new List(stream_interactor, conversation) { visible=true }; list = new List(stream_interactor, conversation) { visible=true };
list_box.add(list); list_box.add(list);
list_box.reorder_child(list, 0);
list.list_box.row_activated.connect((row) => {
ListRow list_row = row as ListRow;
show_menu(list_row.jid, list_row.name_label.label);
});
}
});
invite_list = new ListBox() { visible=true }; invite_list = new ListBox() { visible=true };
invite_list.add(new ListRow.label("+", _("Invite")) {visible=true}); invite_list.add(new ListRow.label("+", _("Invite")) {visible=true});
@ -46,23 +57,18 @@ public class View : Popover {
add(stack); add(stack);
stack.visible_child_name = "list"; stack.visible_child_name = "list";
list.list_box.row_activated.connect((row) => {
ListRow list_row = row as ListRow;
show_menu(list_row.jid, list_row.name_label.label);
});
hide.connect(reset); hide.connect(reset);
} }
public void reset() { public void reset() {
stack.transition_type = StackTransitionType.NONE; stack.transition_type = StackTransitionType.NONE;
stack.visible_child_name = "list"; stack.visible_child_name = "list";
list.list_box.unselect_all(); if (list != null) list.list_box.unselect_all();
invite_list.unselect_all(); invite_list.unselect_all();
} }
private void show_list() { private void show_list() {
list.list_box.unselect_all(); if (list != null) list.list_box.unselect_all();
stack.transition_type = StackTransitionType.SLIDE_RIGHT; stack.transition_type = StackTransitionType.SLIDE_RIGHT;
stack.visible_child_name = "list"; stack.visible_child_name = "list";
} }