diff options
| author | fiaxh <git@lightrise.org> | 2025-10-06 00:14:27 +0200 |
|---|---|---|
| committer | fiaxh <git@lightrise.org> | 2025-10-06 00:14:27 +0200 |
| commit | 18f87d11986f1021d98f1be58c89296d852120c3 (patch) | |
| tree | 9606264eee3dac8e8abdc885df4a0a77fee5b278 /main | |
| parent | 61f20787151febd54b7271f686bc4f9de5613c15 (diff) | |
Conversation details: Move room configuration to separate tab
Diffstat (limited to 'main')
| -rw-r--r-- | main/data/conversation_details.ui | 2 | ||||
| -rw-r--r-- | main/src/ui/contact_details/permissions_provider.vala | 2 | ||||
| -rw-r--r-- | main/src/ui/util/preference_group.vala | 26 | ||||
| -rw-r--r-- | main/src/windows/conversation_details.vala | 32 |
4 files changed, 55 insertions, 7 deletions
diff --git a/main/data/conversation_details.ui b/main/data/conversation_details.ui index 08ba8e13..d3ab4990 100644 --- a/main/data/conversation_details.ui +++ b/main/data/conversation_details.ui @@ -4,7 +4,7 @@ <object class="DinoUiViewModelConversationDetails" id="model"/> <template class="DinoUiConversationDetailsDialog"> <property name="default-width">600</property> -<!-- <property name="default-height">400</property>--> + <property name="default-height">590</property> <property name="modal">True</property> <child> <object class="GtkBox"> diff --git a/main/src/ui/contact_details/permissions_provider.vala b/main/src/ui/contact_details/permissions_provider.vala index 54eac7b1..0e51aa8b 100644 --- a/main/src/ui/contact_details/permissions_provider.vala +++ b/main/src/ui/contact_details/permissions_provider.vala @@ -18,7 +18,7 @@ public class PermissionsProvider : Plugins.ContactDetailsProvider, Object { Xmpp.Jid? own_jid = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account); if (own_jid == null) return; - if (true || stream_interactor.get_module(MucManager.IDENTITY).get_role(own_jid, conversation.account) == Xmpp.Xep.Muc.Role.VISITOR) { + if (stream_interactor.get_module(MucManager.IDENTITY).get_role(own_jid, conversation.account) == Xmpp.Xep.Muc.Role.VISITOR) { var view_model = new Ui.ViewModel.PreferencesRow.Button() { title = _("Request permission to send messages"), button_text = _("Request") diff --git a/main/src/ui/util/preference_group.vala b/main/src/ui/util/preference_group.vala index 268a593c..ab2229f8 100644 --- a/main/src/ui/util/preference_group.vala +++ b/main/src/ui/util/preference_group.vala @@ -6,6 +6,32 @@ using Dino.Entities; using Xmpp.Xep; namespace Dino.Ui.Util { + public Gee.List<Adw.PreferencesGroup> rows_to_preference_window_split_at_text(GLib.ListStore row_view_models) { + var preference_groups = new ArrayList<Adw.PreferencesGroup>(); + Adw.PreferencesGroup? preference_group = null; + + for (int preference_group_i = 0; preference_group_i < row_view_models.get_n_items(); preference_group_i++) { + var preferences_row = (ViewModel.PreferencesRow.Any) row_view_models.get_item(preference_group_i); + + // If it's a text, start a new PreferencesGroup with the text as title. Else, add an item to the current group. + var preferences_row_text = preferences_row as ViewModel.PreferencesRow.Text; + if (preferences_row_text != null) { + if (preference_group != null) preference_groups.add(preference_group); + preference_group = new Adw.PreferencesGroup() { title=preferences_row_text.text }; + } else { + if (preference_group == null) { + preference_group = new Adw.PreferencesGroup(); + } + Widget? w = row_to_preference_row(preferences_row); + if (w == null) continue; + preference_group.add(w); + } + + } + + return preference_groups; + } + public Adw.PreferencesGroup rows_to_preference_group(GLib.ListStore row_view_models, string title) { var preference_group = new Adw.PreferencesGroup() { title=title }; diff --git a/main/src/windows/conversation_details.vala b/main/src/windows/conversation_details.vala index bce9c423..d85783a2 100644 --- a/main/src/windows/conversation_details.vala +++ b/main/src/windows/conversation_details.vala @@ -26,6 +26,9 @@ namespace Dino.Ui.ConversationDetails { public StackPage? encryption_stack_page = null; public Box? encryption_box = null; + public StackPage? room_config_stack_page = null; + public Box? room_config_box = null; + public StackPage? member_stack_page = null; public Box? member_box = null; @@ -50,9 +53,10 @@ namespace Dino.Ui.ConversationDetails { model.notify["notification-options"].connect(update_notification_button_visibility); model.notify["notification-is-default"].connect(update_notification_button_visibility); - model.about_rows.items_changed.connect(create_preferences_rows); - model.settings_rows.items_changed.connect(create_preferences_rows); - model.notify["room-configuration-rows"].connect(create_preferences_rows); + model.about_rows.items_changed.connect(populate_about_tab); + model.settings_rows.items_changed.connect(populate_about_tab); + // TODO add_room_configuration_tab_element gets called even after the window is closed + model.notify["room-configuration-rows"].connect(add_room_configuration_tab_element); model.notify["members"].connect(create_members); create_members(); @@ -181,7 +185,7 @@ namespace Dino.Ui.ConversationDetails { add_members_tab_element(list_view); } - private void create_preferences_rows() { + private void populate_about_tab() { var widget = about_box.get_first_child(); while (widget != null) { about_box.remove(widget); @@ -195,7 +199,7 @@ namespace Dino.Ui.ConversationDetails { about_box.append(Util.rows_to_preference_group(model.settings_rows, _("Settings"))); } if (model.room_configuration_rows != null && model.room_configuration_rows.get_n_items() > 0) { - about_box.append(Util.rows_to_preference_group(model.room_configuration_rows, _("Room Configuration"))); + add_room_configuration_tab_element(); } if (model.account_jid != null) { @@ -205,6 +209,24 @@ namespace Dino.Ui.ConversationDetails { } } + public void add_room_configuration_tab_element() { + if (model.room_configuration_rows == null || model.room_configuration_rows.get_n_items() == 0) return; + + if (room_config_stack_page == null) { + room_config_box = new Box(Orientation.VERTICAL, 12) { margin_end = 12, margin_start = 12, margin_top = 18, margin_bottom = 40 }; + var scrolled_window = new ScrolledWindow() { vexpand = true }; + var clamp = new Adw.Clamp(); + clamp.set_child(room_config_box); + scrolled_window.set_child(clamp); + room_config_stack_page = stack.add_child(scrolled_window); + room_config_stack_page.title = _("Room Configuration"); + room_config_stack_page.name = "room_config"; + } + foreach (Adw.PreferencesGroup preferences_group in Util.rows_to_preference_window_split_at_text(model.room_configuration_rows)) { + room_config_box.append(preferences_group); + } + } + public void add_encryption_tab_element(Adw.PreferencesGroup preferences_group) { if (encryption_stack_page == null) { encryption_box = new Box(Orientation.VERTICAL, 12) { margin_end = 12, margin_start = 12, margin_top = 18, margin_bottom = 40 }; |
