[geary/mjog/account-command-stacks: 19/27] Remove Application.Controller::current_account
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/mjog/account-command-stacks: 19/27] Remove Application.Controller::current_account
- Date: Sat, 26 Oct 2019 05:35:49 +0000 (UTC)
commit cd1c1894065094e849c9f346c88750a92f7e3384
Author: Michael Gratton <mike vee net>
Date: Wed Oct 23 01:00:38 2019 +1100
Remove Application.Controller::current_account
Property is per-window state and hence should not be present in the
app controller.
src/client/application/application-controller.vala | 66 ++++++-------
src/client/components/main-window.vala | 102 ++++++++++++++-------
2 files changed, 96 insertions(+), 72 deletions(-)
---
diff --git a/src/client/application/application-controller.vala
b/src/client/application/application-controller.vala
index f062a9e2..a904acda 100644
--- a/src/client/application/application-controller.vala
+++ b/src/client/application/application-controller.vala
@@ -154,9 +154,6 @@ public class Application.Controller : Geary.BaseObject {
// Null if none selected
private Geary.Folder? current_folder = null;
- // Null if no folder ever selected
- private Geary.Account? current_account = null;
-
private Application.CommandStack commands { get; protected set; }
private Cancellable cancellable_folder = new Cancellable();
@@ -451,8 +448,6 @@ public class Application.Controller : Geary.BaseObject {
this.current_folder = null;
this.previous_non_search_folder = null;
- this.current_account = null;
-
this.pending_mailtos.clear();
this.composer_widgets.clear();
this.waiting_to_close.clear();
@@ -466,21 +461,23 @@ public class Application.Controller : Geary.BaseObject {
* Opens or queues a new composer addressed to a specific email address.
*/
public void compose(string? mailto = null) {
- if (current_account == null) {
+ Geary.Account? selected = this.main_window.selected_account;
+ if (selected == null) {
// Schedule the send for after we have an account open.
pending_mailtos.add(mailto);
} else {
- create_compose_widget(ComposerWidget.ComposeType.NEW_MESSAGE, null, null, mailto);
+ create_compose_widget(selected, NEW_MESSAGE, null, null, mailto);
}
}
/**
* Opens new composer with an existing message as context.
*/
- public void compose_with_context_email(ComposerWidget.ComposeType type,
+ public void compose_with_context_email(Geary.Account account,
+ ComposerWidget.ComposeType type,
Geary.Email context,
string? quote) {
- create_compose_widget(type, context, quote);
+ create_compose_widget(account, type, context, quote);
}
/** Adds a new composer to be kept track of. */
@@ -867,13 +864,10 @@ public class Application.Controller : Geary.BaseObject {
AccountContext? context = this.accounts.get(config);
if (context != null) {
Geary.Account account = context.account;
- if (this.current_account == account) {
- this.current_account = null;
-
- previous_non_search_folder = null;
- main_window.search_bar.set_search_text(""); // Reset search.
-
+ if (this.main_window.selected_account == account) {
+ this.main_window.deselect_account();
cancel_folder();
+ this.previous_non_search_folder = null;
}
// Stop updating status and showing errors when closing
@@ -1333,24 +1327,15 @@ public class Application.Controller : Geary.BaseObject {
this.current_folder = folder;
- if (this.current_account != folder.account) {
- this.current_account = folder.account;
- this.main_window.search_bar.set_account(this.current_account);
-
- // If we were waiting for an account to be selected before issuing mailtos, do that now.
+ if (this.main_window.selected_account != folder.account) {
+ // If we were waiting for an account to be selected before
+ // issuing mailtos, do that now.
if (pending_mailtos.size > 0) {
foreach(string? mailto in pending_mailtos)
compose(mailto);
pending_mailtos.clear();
}
-
- main_window.main_toolbar.copy_folder_menu.clear();
- main_window.main_toolbar.move_folder_menu.clear();
- foreach(Geary.Folder f in current_folder.account.list_folders()) {
- main_window.main_toolbar.copy_folder_menu.add_folder(f);
- main_window.main_toolbar.move_folder_menu.add_folder(f);
- }
}
if (!(current_folder is Geary.SearchFolder))
@@ -1403,7 +1388,12 @@ public class Application.Controller : Geary.BaseObject {
if (!already_open) {
create_compose_widget(
- ComposerWidget.ComposeType.NEW_MESSAGE, draft, null, null, true
+ activated.base_folder.account,
+ NEW_MESSAGE,
+ draft,
+ null,
+ null,
+ true
);
}
}
@@ -1452,7 +1442,7 @@ public class Application.Controller : Geary.BaseObject {
}
main_window.folder_list.add_folder(folder);
- if (folder.account == current_account) {
+ if (folder.account == main_window.selected_account) {
if (!main_window.main_toolbar.copy_folder_menu.has_folder(folder))
main_window.main_toolbar.copy_folder_menu.add_folder(folder);
if (!main_window.main_toolbar.move_folder_menu.has_folder(folder))
@@ -1518,7 +1508,7 @@ public class Application.Controller : Geary.BaseObject {
Geary.Folder folder = unavailable_iterator.get();
main_window.folder_list.remove_folder(folder);
- if (folder.account == current_account) {
+ if (folder.account == this.main_window.selected_account) {
if (main_window.main_toolbar.copy_folder_menu.has_folder(folder))
main_window.main_toolbar.copy_folder_menu.remove_folder(folder);
if (main_window.main_toolbar.move_folder_menu.has_folder(folder))
@@ -1910,14 +1900,12 @@ public class Application.Controller : Geary.BaseObject {
* @param is_draft - Whether we're starting from a draft (true) or
* a new mail (false)
*/
- private void create_compose_widget(ComposerWidget.ComposeType compose_type,
+ private void create_compose_widget(Geary.Account account,
+ ComposerWidget.ComposeType compose_type,
Geary.Email? referred = null,
string? quote = null,
string? mailto = null,
bool is_draft = false) {
- if (current_account == null)
- return;
-
// There's a few situations where we can re-use an existing
// composer, check for these first.
@@ -1957,12 +1945,12 @@ public class Application.Controller : Geary.BaseObject {
ComposerWidget widget;
if (mailto != null) {
widget = new ComposerWidget.from_mailto(
- this.application, current_account, mailto
+ this.application, account, mailto
);
} else {
widget = new ComposerWidget(
this.application,
- current_account,
+ account,
is_draft ? referred.id : null,
compose_type
);
@@ -1980,7 +1968,7 @@ public class Application.Controller : Geary.BaseObject {
}
this.load_composer.begin(
- this.current_account,
+ account,
widget,
referred,
quote,
@@ -2048,8 +2036,8 @@ public class Application.Controller : Geary.BaseObject {
private void do_search(string search_text) {
Geary.SearchFolder? search_folder = null;
- if (this.current_account != null) {
- search_folder = this.current_account.get_special_folder(
+ if (this.main_window.selected_account != null) {
+ search_folder = this.main_window.selected_account.get_special_folder(
Geary.SpecialFolderType.SEARCH
) as Geary.SearchFolder;
}
diff --git a/src/client/components/main-window.vala b/src/client/components/main-window.vala
index 5b0c531c..19b583d2 100644
--- a/src/client/components/main-window.vala
+++ b/src/client/components/main-window.vala
@@ -161,15 +161,7 @@ public class MainWindow : Gtk.ApplicationWindow, Geary.BaseInterface {
}
/** Currently selected account, null if none selected */
- public Geary.Account? selected_account {
- owned get {
- Geary.Account? account = null;
- if (this.selected_folder != null) {
- account = this.selected_folder.account;
- }
- return account;
- }
- }
+ public Geary.Account? selected_account { get; private set; default = null; }
/** Currently selected folder, null if none selected */
public Geary.Folder? selected_folder { get; private set; default = null; }
@@ -383,6 +375,12 @@ public class MainWindow : Gtk.ApplicationWindow, Geary.BaseInterface {
this.info_bar_frame.show();
}
+ /** Deselected the currently selected account, if any. */
+ public void deselect_account() {
+ this.search_bar.set_search_text(""); // Reset search.
+ // XXX do other things
+ }
+
/** Displays a composer addressed to a specific email address. */
public void open_composer_for_mailbox(Geary.RFC822.MailboxAddress to) {
Application.Controller controller = this.application.controller;
@@ -680,16 +678,19 @@ public class MainWindow : Gtk.ApplicationWindow, Geary.BaseInterface {
public void folder_selected(Geary.Folder? folder,
GLib.Cancellable? cancellable) {
if (this.selected_folder != folder) {
+ Geary.Account? previous_account = this.selected_account;
if (this.selected_folder != null) {
+ previous_account = this.selected_folder.account;
this.progress_monitor.remove(this.selected_folder.opening_monitor);
this.selected_folder.properties.notify.disconnect(update_headerbar);
close_conversation_monitor();
}
+ account_selected(folder != null ? folder.account : null);
this.selected_folder = folder;
- this.conversation_viewer.show_loading();
update_conversation_actions(NONE);
+ this.conversation_viewer.show_loading();
this.main_toolbar.update_trash_button(
!this.is_shift_down && selected_folder_supports_trash()
);
@@ -785,6 +786,25 @@ public class MainWindow : Gtk.ApplicationWindow, Geary.BaseInterface {
}
}
+ private void account_selected(Geary.Account? account) {
+ if (this.selected_account != account) {
+ if (this.selected_account != null) {
+ this.main_toolbar.copy_folder_menu.clear();
+ this.main_toolbar.move_folder_menu.clear();
+ }
+
+ this.selected_account = account;
+ this.search_bar.set_account(account);
+
+ if (account != null) {
+ foreach (Geary.Folder folder in account.list_folders()) {
+ this.main_toolbar.copy_folder_menu.add_folder(folder);
+ this.main_toolbar.move_folder_menu.add_folder(folder);
+ }
+ }
+ }
+ }
+
private async void open_conversation_monitor(GLib.Cancellable cancellable) {
this.conversations = new Geary.App.ConversationMonitor(
this.selected_folder,
@@ -880,16 +900,20 @@ public class MainWindow : Gtk.ApplicationWindow, Geary.BaseInterface {
}
private void create_composer_from_viewer(ComposerWidget.ComposeType compose_type) {
+ Geary.Account? account = this.selected_account;
ConversationEmail? email_view = null;
ConversationListBox? list_view = this.conversation_viewer.current_list;
if (list_view != null) {
email_view = list_view.get_reply_target();
}
- if (email_view != null) {
+ if (account != null && email_view != null) {
email_view.get_selection_for_quoting.begin((obj, res) => {
string? quote = email_view.get_selection_for_quoting.end(res);
this.application.controller.compose_with_context_email(
- compose_type, email_view.email, quote
+ account,
+ compose_type,
+ email_view.email,
+ quote
);
});
}
@@ -1743,36 +1767,48 @@ public class MainWindow : Gtk.ApplicationWindow, Geary.BaseInterface {
}
private void on_reply_to_message(ConversationEmail target_view) {
- target_view.get_selection_for_quoting.begin((obj, res) => {
- string? quote = target_view.get_selection_for_quoting.end(res);
- this.application.controller.compose_with_context_email(
- REPLY, target_view.email, quote
- );
- });
+ Geary.Account? account = this.selected_account;
+ if (account != null) {
+ target_view.get_selection_for_quoting.begin((obj, res) => {
+ string? quote = target_view.get_selection_for_quoting.end(res);
+ this.application.controller.compose_with_context_email(
+ account, REPLY, target_view.email, quote
+ );
+ });
+ }
}
private void on_reply_all_message(ConversationEmail target_view) {
- target_view.get_selection_for_quoting.begin((obj, res) => {
- string? quote = target_view.get_selection_for_quoting.end(res);
- this.application.controller.compose_with_context_email(
- REPLY_ALL, target_view.email, quote
- );
- });
+ Geary.Account? account = this.selected_account;
+ if (account != null) {
+ target_view.get_selection_for_quoting.begin((obj, res) => {
+ string? quote = target_view.get_selection_for_quoting.end(res);
+ this.application.controller.compose_with_context_email(
+ account, REPLY_ALL, target_view.email, quote
+ );
+ });
+ }
}
private void on_forward_message(ConversationEmail target_view) {
- target_view.get_selection_for_quoting.begin((obj, res) => {
- string? quote = target_view.get_selection_for_quoting.end(res);
- this.application.controller.compose_with_context_email(
- FORWARD, target_view.email, quote
- );
- });
+ Geary.Account? account = this.selected_account;
+ if (account != null) {
+ target_view.get_selection_for_quoting.begin((obj, res) => {
+ string? quote = target_view.get_selection_for_quoting.end(res);
+ this.application.controller.compose_with_context_email(
+ account, FORWARD, target_view.email, quote
+ );
+ });
+ }
}
private void on_edit_draft(ConversationEmail target_view) {
- this.application.controller.compose_with_context_email(
- NEW_MESSAGE, target_view.email, null
- );
+ Geary.Account? account = this.selected_account;
+ if (account != null) {
+ this.application.controller.compose_with_context_email(
+ account, NEW_MESSAGE, target_view.email, null
+ );
+ }
}
private void on_attachments_activated(Gee.Collection<Geary.Attachment> attachments) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]