[geary/wip/765516-gtk-widget-conversation-viewer: 142/174] Don't re-load folder when changing to the same one.
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/wip/765516-gtk-widget-conversation-viewer: 142/174] Don't re-load folder when changing to the same one.
- Date: Sun, 25 Sep 2016 13:17:59 +0000 (UTC)
commit 379e314eb339a21a4f5ff3928ec8e8ab36eed750
Author: Michael James Gratton <mike vee net>
Date: Wed Sep 7 10:38:57 2016 +1000
Don't re-load folder when changing to the same one.
src/client/application/geary-controller.vala | 84 ++++++++++++--------------
1 files changed, 38 insertions(+), 46 deletions(-)
---
diff --git a/src/client/application/geary-controller.vala b/src/client/application/geary-controller.vala
index c10d143..be0f56f 100644
--- a/src/client/application/geary-controller.vala
+++ b/src/client/application/geary-controller.vala
@@ -118,7 +118,6 @@ public class GearyController : Geary.BaseObject {
private Libnotify? libnotify = null;
private uint select_folder_timeout_id = 0;
private int64 next_folder_select_allowed_usec = 0;
- private Geary.Folder? folder_to_select = null;
private Geary.Nonblocking.Mutex select_folder_mutex = new Geary.Nonblocking.Mutex();
private Geary.Account? account_to_select = null;
private Geary.Folder? previous_non_search_folder = null;
@@ -1290,58 +1289,51 @@ public class GearyController : Geary.BaseObject {
private void on_folder_selected(Geary.Folder? folder) {
debug("Folder %s selected", folder != null ? folder.to_string() : "(null)");
- this.main_window.conversation_viewer.show_loading();
- GearyApplication.instance.get_action(
- ACTION_FIND_IN_CONVERSATION
- ).set_sensitive(false);
- enable_message_buttons(false);
-
- // If the folder is being unset, clear the message list and exit here.
if (folder == null) {
- current_folder = null;
+ this.current_folder = null;
main_window.conversation_list_view.set_model(null);
main_window.main_toolbar.folder = null;
folder_selected(null);
-
- return;
- }
-
- folder_to_select = folder;
-
- // To prevent the user from selecting folders too quickly, we prevent additional selection
- // changes to occur until after a timeout has expired from the last one
- int64 now = get_monotonic_time();
- int64 diff = now - next_folder_select_allowed_usec;
- if (diff < SELECT_FOLDER_TIMEOUT_USEC) {
- // only start timeout if another timeout is not running ... this means the user can
- // click madly and will see the last clicked-on folder 100ms after the first one was
- // clicked on
- if (select_folder_timeout_id == 0)
- select_folder_timeout_id = Timeout.add((uint) (diff / 1000), on_select_folder_timeout);
- } else {
- do_select_folder.begin(folder_to_select, on_select_folder_completed);
- folder_to_select = null;
-
- next_folder_select_allowed_usec = now + SELECT_FOLDER_TIMEOUT_USEC;
+ } else if (folder != this.current_folder) {
+ this.main_window.conversation_viewer.show_loading();
+ GearyApplication.instance.get_action(
+ ACTION_FIND_IN_CONVERSATION
+ ).set_sensitive(false);
+ enable_message_buttons(false);
+
+ // To prevent the user from selecting folders too quickly,
+ // we prevent additional selection changes to occur until
+ // after a timeout has expired from the last one
+ int64 now = get_monotonic_time();
+ int64 diff = now - this.next_folder_select_allowed_usec;
+ if (diff < SELECT_FOLDER_TIMEOUT_USEC) {
+ // only start timeout if another timeout is not
+ // running ... this means the user can click madly and
+ // will see the last clicked-on folder 100ms after the
+ // first one was clicked on
+ if (this.select_folder_timeout_id == 0) {
+ this.select_folder_timeout_id = Timeout.add(
+ (uint) (diff / 1000),
+ () => {
+ this.select_folder_timeout_id = 0;
+ this.next_folder_select_allowed_usec = 0;
+ if (folder != this.current_folder) {
+ do_select_folder.begin(
+ folder, on_select_folder_completed
+ );
+ }
+ return false;
+ });
+ }
+ } else {
+ do_select_folder.begin(folder, on_select_folder_completed);
+ this.next_folder_select_allowed_usec =
+ now + SELECT_FOLDER_TIMEOUT_USEC;
+ }
}
}
-
- private bool on_select_folder_timeout() {
- select_folder_timeout_id = 0;
- next_folder_select_allowed_usec = 0;
-
- if (folder_to_select != null)
- do_select_folder.begin(folder_to_select, on_select_folder_completed);
-
- folder_to_select = null;
-
- return false;
- }
-
+
private async void do_select_folder(Geary.Folder folder) throws Error {
- if (folder == current_folder)
- return;
-
debug("Switching to %s...", folder.to_string());
closed_folder();
@@ -1429,7 +1421,7 @@ public class GearyController : Geary.BaseObject {
debug("Switched to %s", folder.to_string());
}
-
+
private void on_scan_error(Error err) {
debug("Scan error: %s", err.message);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]