From ebbc8def8ddd5abcaf553b6a3cb0fe516d2fbe4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Thu, 6 Aug 2026 13:19:20 -0700 Subject: [PATCH 1/3] AliasDialog: use ListStore --- src/Dialogs/AliasDialog/AliasDialog.vala | 46 +++++++++++++----------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/Dialogs/AliasDialog/AliasDialog.vala b/src/Dialogs/AliasDialog/AliasDialog.vala index dbc2c41d9..ae3695bbd 100644 --- a/src/Dialogs/AliasDialog/AliasDialog.vala +++ b/src/Dialogs/AliasDialog/AliasDialog.vala @@ -21,7 +21,8 @@ public class Mail.AliasDialog : Granite.Dialog { public string account_uid { get; construct; } private HashTable aliases; - private Gtk.ListBox list; + private ListStore alias_list; + private Gtk.ListBox list_box; private Granite.Widgets.Toast toast; private string primary_name; @@ -51,23 +52,26 @@ public class Mail.AliasDialog : Granite.Dialog { placeholder.add (placeholder_description); placeholder.show_all (); - list = new Gtk.ListBox () { + alias_list = new ListStore (typeof (Alias)); + + list_box = new Gtk.ListBox () { vexpand = true, hexpand = true, selection_mode = NONE }; - list.set_filter_func ((Gtk.ListBoxFilterFunc) filter_func); - list.set_placeholder (placeholder); + list_box.bind_model (alias_list, (obj) => (Alias) obj); + list_box.set_filter_func ((Gtk.ListBoxFilterFunc) filter_func); + list_box.set_placeholder (placeholder); var scrolled_window = new Gtk.ScrolledWindow (null, null) { - child = list, + child = list_box, hscrollbar_policy = NEVER }; var add_button_label = new Gtk.Label (_("Add Alias…")); var add_box = new Gtk.Box (HORIZONTAL, 0); - add_box.add (new Gtk.Image.from_icon_name ("list-add-symbolic", Gtk.IconSize.SMALL_TOOLBAR)); + add_box.add (new Gtk.Image.from_icon_name ("list_box-add-symbolic", Gtk.IconSize.SMALL_TOOLBAR)); add_box.add (add_button_label); var add_button = new Gtk.Button () { @@ -111,26 +115,26 @@ public class Mail.AliasDialog : Granite.Dialog { var extension = (E.SourceMailIdentity) identity_source.get_extension (E.SOURCE_EXTENSION_MAIL_IDENTITY); primary_name = extension.name; - populate_list (); + populate_list_box (); add_button.clicked.connect (() => create_new_alias ()); toast.default_action.connect (() => { - foreach (var child in list.get_children ()) { - if (child is Alias) { - ((Alias) child).undo_delete (); - } + for (int i = 0; i < alias_list.n_items; i++) { + ((Alias) alias_list.get_item (i)).undo_delete (); } - list.invalidate_filter (); + list_box.invalidate_filter (); }); response.connect (destroy); delete_event.connect (() => { - foreach (var child in list.get_children ()) { - if (child is Alias && ((Alias) child).is_deleted) { - aliases.remove (((Alias) child).address); + for (int i = 0; i < alias_list.n_items; i++) { + var alias = (Alias) alias_list.get_item (i); + if (alias.is_deleted) { + alias_list.remove (i); + aliases.remove (alias.address); } } @@ -144,7 +148,7 @@ public class Mail.AliasDialog : Granite.Dialog { return !alias.is_deleted; } - private void populate_list () { + private void populate_list_box () { aliases = Mail.Backend.Session.get_default ().get_aliases_for_account_uid (account_uid); if (aliases == null) { @@ -173,19 +177,21 @@ public class Mail.AliasDialog : Granite.Dialog { }); alias.start_delete.connect (() => { - list.invalidate_filter (); + list_box.invalidate_filter (); toast.title = _("'%s' deleted").printf (alias.alias_name != "" ? alias.alias_name : alias.address); toast.send_notification (); }); alias.finish_delete.connect (() => { - list.remove (alias); + uint pos = -1; + if (alias_list.find (alias, out pos)) { + alias_list.remove (pos); + }; + aliases.remove (alias.address); write_aliases (); }); - - list.add (alias); } private void write_aliases () { From 377aa3c604bbe88c99305774ef35532adbea6f0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Sat, 8 Aug 2026 10:09:19 -0700 Subject: [PATCH 2/3] Update AliasDialog.vala --- src/Dialogs/AliasDialog/AliasDialog.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Dialogs/AliasDialog/AliasDialog.vala b/src/Dialogs/AliasDialog/AliasDialog.vala index ae3695bbd..a53652930 100644 --- a/src/Dialogs/AliasDialog/AliasDialog.vala +++ b/src/Dialogs/AliasDialog/AliasDialog.vala @@ -71,7 +71,7 @@ public class Mail.AliasDialog : Granite.Dialog { var add_button_label = new Gtk.Label (_("Add Alias…")); var add_box = new Gtk.Box (HORIZONTAL, 0); - add_box.add (new Gtk.Image.from_icon_name ("list_box-add-symbolic", Gtk.IconSize.SMALL_TOOLBAR)); + add_box.add (new Gtk.Image.from_icon_name ("list-add-symbolic", Gtk.IconSize.SMALL_TOOLBAR)); add_box.add (add_button_label); var add_button = new Gtk.Button () { From 092cde2ff4313bc6339f1c04f3d54407a05a3e2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Mon, 10 Aug 2026 11:14:20 -0700 Subject: [PATCH 3/3] Fix add alias --- src/Dialogs/AliasDialog/AliasDialog.vala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Dialogs/AliasDialog/AliasDialog.vala b/src/Dialogs/AliasDialog/AliasDialog.vala index a53652930..64a03ef8f 100644 --- a/src/Dialogs/AliasDialog/AliasDialog.vala +++ b/src/Dialogs/AliasDialog/AliasDialog.vala @@ -192,6 +192,8 @@ public class Mail.AliasDialog : Granite.Dialog { aliases.remove (alias.address); write_aliases (); }); + + alias_list.append (alias); } private void write_aliases () {