aboutsummaryrefslogtreecommitdiff
path: root/main/src/windows
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/windows')
-rw-r--r--main/src/windows/preferences_window/account_preferences_subpage.vala45
1 files changed, 44 insertions, 1 deletions
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
+}