aboutsummaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorfiaxh <git@lightrise.org>2025-10-06 00:14:27 +0200
committerfiaxh <git@lightrise.org>2025-10-06 00:14:27 +0200
commit18f87d11986f1021d98f1be58c89296d852120c3 (patch)
tree9606264eee3dac8e8abdc885df4a0a77fee5b278 /main
parent61f20787151febd54b7271f686bc4f9de5613c15 (diff)
Conversation details: Move room configuration to separate tab
Diffstat (limited to 'main')
-rw-r--r--main/data/conversation_details.ui2
-rw-r--r--main/src/ui/contact_details/permissions_provider.vala2
-rw-r--r--main/src/ui/util/preference_group.vala26
-rw-r--r--main/src/windows/conversation_details.vala32
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 };