diff --git a/resources/qml/dialogs/RoomSettingsDialog.qml b/resources/qml/dialogs/RoomSettingsDialog.qml index 941d4f90..4020f21c 100644 --- a/resources/qml/dialogs/RoomSettingsDialog.qml +++ b/resources/qml/dialogs/RoomSettingsDialog.qml @@ -130,7 +130,7 @@ ApplicationWindow { color: palette.text Layout.alignment: Qt.AlignHCenter - Layout.maximumWidth: parent.width - (Nheko.paddingSmall * 2) - nameChangeButton.anchors.leftMargin - (nameChangeButton.width * 2) + Layout.maximumWidth: parent.width - (Nheko.paddingSmall + roomNameButtons.anchors.leftMargin + roomNameButtons.implicitWidth) * 2 horizontalAlignment: TextEdit.AlignHCenter wrapMode: TextEdit.Wrap selectByMouse: true @@ -144,27 +144,43 @@ ApplicationWindow { } } - ImageButton { - id: nameChangeButton - visible: roomSettings.canChangeName + RowLayout { + id: roomNameButtons + anchors.leftMargin: Nheko.paddingSmall anchors.left: roomName.right anchors.verticalCenter: roomName.verticalCenter - hoverEnabled: true - ToolTip.visible: hovered - ToolTip.text: qsTr("Change name of this room") - ToolTip.delay: Nheko.tooltipDelay - image: roomName.isNameEditingAllowed ? ":/icons/icons/ui/checkmark.svg" : ":/icons/icons/ui/edit.svg" - onClicked: { - if (roomName.isNameEditingAllowed) { - roomSettings.changeName(roomName.text); - roomName.isNameEditingAllowed = false; - } else { - roomName.isNameEditingAllowed = true; - roomName.focus = true; - roomName.selectAll(); + + ImageButton { + id: nameChangeButton + visible: roomSettings.canChangeName + hoverEnabled: true + ToolTip.visible: hovered + ToolTip.text: qsTr("Change name of this room") + ToolTip.delay: Nheko.tooltipDelay + image: roomName.isNameEditingAllowed ? ":/icons/icons/ui/checkmark.svg" : ":/icons/icons/ui/edit.svg" + onClicked: { + if (roomName.isNameEditingAllowed) { + roomSettings.changeName(roomName.text); + roomName.isNameEditingAllowed = false; + } else { + roomName.isNameEditingAllowed = true; + roomName.focus = true; + roomName.selectAll(); + } } } + + EncryptionIndicator { + Layout.preferredHeight: 16 + Layout.preferredWidth: 16 + sourceSize.width: width + sourceSize.height: height + encrypted: true + visible: roomSettings.isEncryptionEnabled && (roomSettings.isRoomNameSet || !roomName.readOnly) + trust: Crypto.Unverified + ToolTip.text: qsTr("Since room state can't be encrypted, make sure no confidential information is stored in the room name!") + } } } @@ -220,26 +236,42 @@ ApplicationWindow { } - ImageButton { - id: topicChangeButton + RowLayout { + spacing: Nheko.paddingMedium Layout.alignment: Qt.AlignHCenter - visible: roomSettings.canChangeTopic - hoverEnabled: true - ToolTip.visible: hovered - ToolTip.text: qsTr("Change topic of this room") - ToolTip.delay: Nheko.tooltipDelay - image: roomTopic.isTopicEditingAllowed ? ":/icons/icons/ui/checkmark.svg" : ":/icons/icons/ui/edit.svg" - onClicked: { - if (roomTopic.isTopicEditingAllowed) { - roomSettings.changeTopic(roomTopic.text); - roomTopic.isTopicEditingAllowed = false; - } else { - roomTopic.isTopicEditingAllowed = true; - roomTopic.showMore = true; - roomTopic.focus = true; - //roomTopic.selectAll(); + + ImageButton { + id: topicChangeButton + + visible: roomSettings.canChangeTopic + hoverEnabled: true + ToolTip.visible: hovered + ToolTip.text: qsTr("Change topic of this room") + ToolTip.delay: Nheko.tooltipDelay + image: roomTopic.isTopicEditingAllowed ? ":/icons/icons/ui/checkmark.svg" : ":/icons/icons/ui/edit.svg" + onClicked: { + if (roomTopic.isTopicEditingAllowed) { + roomSettings.changeTopic(roomTopic.text); + roomTopic.isTopicEditingAllowed = false; + } else { + roomTopic.isTopicEditingAllowed = true; + roomTopic.showMore = true; + roomTopic.focus = true; + //roomTopic.selectAll(); + } } } + + EncryptionIndicator { + Layout.preferredHeight: 16 + Layout.preferredWidth: 16 + sourceSize.width: width + sourceSize.height: height + encrypted: true + visible: roomSettings.isEncryptionEnabled && (roomSettings.plainRoomTopic != "" || !roomTopic.readOnly) + trust: Crypto.Unverified + ToolTip.text: qsTr("Since room state can't be encrypted, make sure no confidential information is stored in the room topic!") + } } Item { diff --git a/src/ui/RoomSettings.cpp b/src/ui/RoomSettings.cpp index b61cab26..da7aa3fc 100644 --- a/src/ui/RoomSettings.cpp +++ b/src/ui/RoomSettings.cpp @@ -81,6 +81,15 @@ RoomSettings::RoomSettings(QString roomid, QObject *parent) this->allowedRoomsModel = new RoomSettingsAllowedRoomsModel(this); } +bool +RoomSettings::isRoomNameSet() const +{ + return !cache::client() + ->getStateEvent(roomid_.toStdString()) + .value_or(mtx::events::StateEvent{}) + .content.name.empty(); +} + QString RoomSettings::roomName() const { diff --git a/src/ui/RoomSettings.h b/src/ui/RoomSettings.h index 5ca1e997..4b7db11a 100644 --- a/src/ui/RoomSettings.h +++ b/src/ui/RoomSettings.h @@ -100,6 +100,7 @@ class RoomSettings final : public QObject Q_PROPERTY(bool supportsKnocking READ supportsKnocking CONSTANT) Q_PROPERTY(bool supportsRestricted READ supportsRestricted CONSTANT) Q_PROPERTY(bool supportsKnockRestricted READ supportsKnockRestricted CONSTANT) + Q_PROPERTY(bool isRoomNameSet READ isRoomNameSet NOTIFY roomNameChanged) Q_PROPERTY( QStringList allowedRooms READ allowedRooms WRITE setAllowedRooms NOTIFY allowedRoomsChanged) Q_PROPERTY(RoomSettingsAllowedRoomsModel *allowedRoomsModel MEMBER allowedRoomsModel CONSTANT) @@ -128,6 +129,7 @@ public: QString roomAvatarUrl(); int memberCount() const; int notifications(); + bool isRoomNameSet() const; bool privateAccess() const; bool guestAccess() const; bool knockingEnabled() const;