From b35e793a5dd52cc345747f531653270765454934 Mon Sep 17 00:00:00 2001 From: frosty Date: Mon, 17 Aug 2026 17:58:03 -0400 Subject: Begin work on colourable accounts in message list --- .../account_preferences_subpage.vala | 45 +++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'main/src/windows') diff --git a/main/src/windows/preferences_window/account_preferences_subpage.vala b/main/src/windows/preferences_window/account_preferences_subpage.vala index cc1e7b5e..d52a8c83 100644 --- a/main/src/windows/preferences_window/account_preferences_subpage.vala +++ b/main/src/windows/preferences_window/account_preferences_subpage.vala @@ -12,6 +12,7 @@ public class Dino.Ui.AccountPreferencesSubpage : Adw.NavigationPage { [GtkChild] public unowned AvatarPicture avatar; [GtkChild] public unowned Adw.ActionRow xmpp_address; [GtkChild] public unowned Adw.EntryRow local_alias; + [GtkChild] public unowned Box account_color_box; [GtkChild] public unowned Adw.ActionRow password_change; [GtkChild] public unowned Adw.ActionRow connection_status; [GtkChild] public unowned Button enter_password_button; @@ -28,6 +29,12 @@ public class Dino.Ui.AccountPreferencesSubpage : Adw.NavigationPage { private Binding[] bindings = new Binding[0]; private ulong[] account_notify_ids = new ulong[0]; private ulong alias_entry_changed = 0; + private bool updating_account_color = false; +#if GTK_4_12 + private ColorDialogButton account_color_button; +#else + private ColorButton account_color_button; +#endif construct { title = "Account"; @@ -45,6 +52,23 @@ public class Dino.Ui.AccountPreferencesSubpage : Adw.NavigationPage { remove_account_button.clicked.connect(() => { show_remove_account_dialog(); }); + +#if GTK_4_12 + var color_dialog = new ColorDialog() { + title = _("Choose account color"), + with_alpha = false + }; + account_color_button = new ColorDialogButton((owned) color_dialog) { valign=Align.CENTER }; +#else + account_color_button = new ColorButton() { + title = _("Choose account color"), + use_alpha = false, + valign = Align.CENTER + }; +#endif + account_color_button.notify["rgba"].connect(on_account_color_changed); + account_color_box.append(account_color_button); + password_change.activatable_widget = new Label(""); password_change.activated.connect(() => { var dialog = new ChangePasswordDialog(model.get_change_password_dialog_model()); @@ -121,6 +145,12 @@ public class Dino.Ui.AccountPreferencesSubpage : Adw.NavigationPage { account.alias = local_alias.text; }); + Gdk.RGBA account_color = Gdk.RGBA(); + account_color.parse(Dino.Application.get_default().settings.get_account_color(account)); + updating_account_color = true; + account_color_button.rgba = account_color; + updating_account_color = false; + bindings += account.bind_property("enabled", disable_account_button, "label", BindingFlags.SYNC_CREATE, account_enabled_to_disable_button_label); bindings += account.bind_property("enabled", avatar_menu_box, "visible", BindingFlags.SYNC_CREATE); bindings += account.bind_property("enabled", password_change, "visible", BindingFlags.SYNC_CREATE); @@ -137,6 +167,19 @@ public class Dino.Ui.AccountPreferencesSubpage : Adw.NavigationPage { on_connection_error_updated(); } + private void on_account_color_changed() { + if (updating_account_color) return; + +#if GTK_4_12 + unowned Gdk.RGBA? selected_color = account_color_button.get_rgba(); + if (selected_color != null) { + Dino.Application.get_default().settings.set_account_color(account, Util.rgba_to_hex(selected_color)); + } +#else + Dino.Application.get_default().settings.set_account_color(account, Util.rgba_to_hex(account_color_button.rgba)); +#endif + } + private void show_select_avatar() { FileChooserNative chooser = new FileChooserNative(_("Select avatar"), (Window)this.get_root(), FileChooserAction.OPEN, _("Select"), _("Cancel")); FileFilter filter = new FileFilter(); @@ -261,4 +304,4 @@ public class Dino.Ui.NaturalDirectionBoxLayout : LayoutManager { } } } -} \ No newline at end of file +} -- cgit v1.3