Move UnifiedWindow stack state update logic into controller
This commit is contained in:
parent
4ed6204fc2
commit
d550fc905c
|
@ -52,13 +52,6 @@ public class UnifiedWindow : Gtk.Window {
|
||||||
setup_stack();
|
setup_stack();
|
||||||
|
|
||||||
paned.bind_property("position", headerbar_paned, "position", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
|
paned.bind_property("position", headerbar_paned, "position", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
|
||||||
|
|
||||||
stream_interactor.account_added.connect((account) => { check_stack(true); });
|
|
||||||
stream_interactor.account_removed.connect((account) => { check_stack(); });
|
|
||||||
stream_interactor.get_module(ConversationManager.IDENTITY).conversation_activated.connect(() => check_stack());
|
|
||||||
stream_interactor.get_module(ConversationManager.IDENTITY).conversation_deactivated.connect(() => check_stack());
|
|
||||||
|
|
||||||
check_stack();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setup_unified() {
|
private void setup_unified() {
|
||||||
|
@ -113,32 +106,38 @@ public class UnifiedWindow : Gtk.Window {
|
||||||
add(stack);
|
add(stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void check_stack(bool know_exists = false) {
|
public enum StackState {
|
||||||
ArrayList<Account> accounts = stream_interactor.get_accounts();
|
CLEAN_START,
|
||||||
if (!know_exists && accounts.size == 0) {
|
NO_ACTIVE_ACCOUNTS,
|
||||||
if (db.get_accounts().size == 0) {
|
NO_ACTIVE_CONVERSATIONS,
|
||||||
|
CONVERSATION
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set_stack_state(StackState stack_state) {
|
||||||
|
if (stack_state == StackState.CONVERSATION) {
|
||||||
|
left_stack.set_visible_child_name("content");
|
||||||
|
right_stack.set_visible_child_name("content");
|
||||||
|
|
||||||
|
stack.set_visible_child_name("main");
|
||||||
|
if (Util.use_csd()) {
|
||||||
|
set_titlebar(headerbar_paned);
|
||||||
|
}
|
||||||
|
} else if (stack_state == StackState.CLEAN_START || stack_state == StackState.NO_ACTIVE_ACCOUNTS) {
|
||||||
|
if (stack_state == StackState.CLEAN_START) {
|
||||||
stack.set_visible_child_name("welcome_placeholder");
|
stack.set_visible_child_name("welcome_placeholder");
|
||||||
} else {
|
} else if (stack_state == StackState.NO_ACTIVE_ACCOUNTS) {
|
||||||
stack.set_visible_child_name("accounts_placeholder");
|
stack.set_visible_child_name("accounts_placeholder");
|
||||||
}
|
}
|
||||||
if (Util.use_csd()) {
|
if (Util.use_csd()) {
|
||||||
set_titlebar(placeholder_headerbar);
|
set_titlebar(placeholder_headerbar);
|
||||||
}
|
}
|
||||||
} else if (stream_interactor.get_module(ConversationManager.IDENTITY).get_active_conversations().size == 0) {
|
} else if (stack_state == StackState.NO_ACTIVE_CONVERSATIONS) {
|
||||||
stack.set_visible_child_name("main");
|
stack.set_visible_child_name("main");
|
||||||
left_stack.set_visible_child_name("placeholder");
|
left_stack.set_visible_child_name("placeholder");
|
||||||
right_stack.set_visible_child_name("placeholder");
|
right_stack.set_visible_child_name("placeholder");
|
||||||
if (Util.use_csd()) {
|
if (Util.use_csd()) {
|
||||||
set_titlebar(headerbar_paned);
|
set_titlebar(headerbar_paned);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
left_stack.set_visible_child_name("content");
|
|
||||||
right_stack.set_visible_child_name("content");
|
|
||||||
|
|
||||||
stack.set_visible_child_name("main");
|
|
||||||
if (Util.use_csd()) {
|
|
||||||
set_titlebar(headerbar_paned);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,6 +84,12 @@ public class UnifiedWindowController : Object {
|
||||||
});
|
});
|
||||||
|
|
||||||
window.conversation_selected.connect(conversation => select_conversation(conversation));
|
window.conversation_selected.connect(conversation => select_conversation(conversation));
|
||||||
|
|
||||||
|
stream_interactor.account_added.connect((account) => { update_stack_state(true); });
|
||||||
|
stream_interactor.account_removed.connect((account) => { update_stack_state(); });
|
||||||
|
stream_interactor.get_module(ConversationManager.IDENTITY).conversation_activated.connect(() => update_stack_state());
|
||||||
|
stream_interactor.get_module(ConversationManager.IDENTITY).conversation_deactivated.connect(() => update_stack_state());
|
||||||
|
update_stack_state();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void select_conversation(Conversation? conversation, bool do_reset_search = true, bool default_initialize_conversation = true) {
|
public void select_conversation(Conversation? conversation, bool do_reset_search = true, bool default_initialize_conversation = true) {
|
||||||
|
@ -119,6 +125,21 @@ public class UnifiedWindowController : Object {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void update_stack_state(bool know_exists = false) {
|
||||||
|
ArrayList<Account> accounts = stream_interactor.get_accounts();
|
||||||
|
if (!know_exists && accounts.size == 0) {
|
||||||
|
if (db.get_accounts().size == 0) {
|
||||||
|
window.set_stack_state(UnifiedWindow.StackState.CLEAN_START);
|
||||||
|
} else {
|
||||||
|
window.set_stack_state(UnifiedWindow.StackState.NO_ACTIVE_ACCOUNTS);
|
||||||
|
}
|
||||||
|
} else if (stream_interactor.get_module(ConversationManager.IDENTITY).get_active_conversations().size == 0) {
|
||||||
|
window.set_stack_state(UnifiedWindow.StackState.NO_ACTIVE_CONVERSATIONS);
|
||||||
|
} else {
|
||||||
|
window.set_stack_state(UnifiedWindow.StackState.CONVERSATION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void reset_search_entry() {
|
private void reset_search_entry() {
|
||||||
if (window.conversation_view.conversation_frame.conversation != null) {
|
if (window.conversation_view.conversation_frame.conversation != null) {
|
||||||
switch (conversation.type_) {
|
switch (conversation.type_) {
|
||||||
|
|
Loading…
Reference in a new issue