diff --git a/src/client/folder-list/folder-list-folder-entry.vala b/src/client/folder-list/folder-list-folder-entry.vala index 7a6b6320..fdf98785 100644 --- a/src/client/folder-list/folder-list-folder-entry.vala +++ b/src/client/folder-list/folder-list-folder-entry.vala @@ -14,11 +14,13 @@ public class FolderList.FolderEntry : FolderList.AbstractFolderEntry, Sidebar.In has_new = false; folder.properties.notify[Geary.FolderProperties.PROP_NAME_EMAIL_TOTAL].connect(on_counts_changed); folder.properties.notify[Geary.FolderProperties.PROP_NAME_EMAIL_UNREAD].connect(on_counts_changed); + folder.display_name_changed.connect(on_display_name_changed); } ~FolderEntry() { folder.properties.notify[Geary.FolderProperties.PROP_NAME_EMAIL_TOTAL].disconnect(on_counts_changed); folder.properties.notify[Geary.FolderProperties.PROP_NAME_EMAIL_UNREAD].disconnect(on_counts_changed); + folder.display_name_changed.disconnect(on_display_name_changed); } public override string get_sidebar_name() { @@ -118,6 +120,10 @@ public class FolderList.FolderEntry : FolderList.AbstractFolderEntry, Sidebar.In sidebar_tooltip_changed(get_sidebar_tooltip()); } + private void on_display_name_changed() { + sidebar_name_changed(folder.get_display_name()); + } + public override int get_count() { if (folder.special_folder_type == Geary.SpecialFolderType.DRAFTS || folder.special_folder_type == Geary.SpecialFolderType.OUTBOX) diff --git a/src/engine/abstract/geary-abstract-folder.vala b/src/engine/abstract/geary-abstract-folder.vala index 9ff96b35..8a5dc680 100644 --- a/src/engine/abstract/geary-abstract-folder.vala +++ b/src/engine/abstract/geary-abstract-folder.vala @@ -7,6 +7,14 @@ public abstract class Geary.AbstractFolder : BaseObject, Geary.Folder { public Geary.ProgressMonitor opening_monitor { get; protected set; } + public abstract Geary.Account account { get; } + + public abstract Geary.FolderProperties properties { get; } + + public abstract Geary.FolderPath path { get; } + + public abstract Geary.SpecialFolderType special_folder_type { get; } + /* * notify_* methods for AbstractFolder are marked internal because the SendReplayOperations * need access to them to report changes as they occur. @@ -60,15 +68,16 @@ public abstract class Geary.AbstractFolder : BaseObject, Geary.Folder { internal virtual void notify_special_folder_type_changed(Geary.SpecialFolderType old_type, Geary.SpecialFolderType new_type) { special_folder_type_changed(old_type, new_type); + + // in default implementation, this may also mean the display name changed; subclasses may + // override this behavior, but no way to detect this, so notify + if (special_folder_type != Geary.SpecialFolderType.NONE) + notify_display_name_changed(); } - - public abstract Geary.Account account { get; } - public abstract Geary.FolderProperties properties { get; } - - public abstract Geary.FolderPath path { get; } - - public abstract Geary.SpecialFolderType special_folder_type { get; } + internal virtual void notify_display_name_changed() { + display_name_changed(); + } /** * Default is to display the basename of the Folder's path. diff --git a/src/engine/api/geary-folder.vala b/src/engine/api/geary-folder.vala index e67dcd6a..683c5135 100644 --- a/src/engine/api/geary-folder.vala +++ b/src/engine/api/geary-folder.vala @@ -282,6 +282,13 @@ public interface Geary.Folder : BaseObject { public signal void special_folder_type_changed(Geary.SpecialFolderType old_type, Geary.SpecialFolderType new_type); + /** + * Fired when the Folder's display name has changed. + * + * @see get_display_name + */ + public signal void display_name_changed(); + protected abstract void notify_opened(OpenState state, int count); protected abstract void notify_open_failed(OpenFailed failure, Error? err); @@ -308,6 +315,8 @@ public interface Geary.Folder : BaseObject { protected abstract void notify_special_folder_type_changed(Geary.SpecialFolderType old_type, Geary.SpecialFolderType new_type); + protected abstract void notify_display_name_changed(); + /** * Returns a name suitable for displaying to the user. */