diff --git a/src/settings/DeviceDelegate.qml b/src/settings/DeviceDelegate.qml index 02f6896e6..1bd592b61 100644 --- a/src/settings/DeviceDelegate.qml +++ b/src/settings/DeviceDelegate.qml @@ -19,6 +19,8 @@ FormCard.AbstractFormDelegate { required property string displayName required property int type + required property DevicesModel devicesModel + property bool editDeviceName: false property bool showVerifyButton @@ -77,12 +79,12 @@ FormCard.AbstractFormDelegate { icon.name: "checkmark" visible: nameField.text !== root.displayName onTriggered: { - devicesModel.setName(root.id, nameField.text); + root.devicesModel.setName(root.id, nameField.text); } } ] - onAccepted: devicesModel.setName(root.id, nameField.text) + onAccepted: root.devicesModel.setName(root.id, nameField.text) } QQC2.ToolButton { display: QQC2.AbstractButton.IconOnly @@ -98,7 +100,7 @@ FormCard.AbstractFormDelegate { visible: root.showVerifyButton && (root.type !== DevicesModel.Verified || NeoChatConfig.alwaysVerifyDevice) text: i18nc("@action:button", "Verify device") icon.name: "security-low-symbolic" - onClicked: devicesModel.connection.startKeyVerificationSession(devicesModel.connection.localUserId, root.id) + onClicked: root.devicesModel.connection.startKeyVerificationSession(root.devicesModel.connection.localUserId, root.id) QQC2.ToolTip.text: text QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay @@ -133,4 +135,35 @@ FormCard.AbstractFormDelegate { QQC2.ToolTip.visible: hovered } } + + Kirigami.Dialog { + id: passwordSheet + + property string deviceId + + preferredWidth: Kirigami.Units.gridUnit * 24 + + title: i18nc("@title:dialog", "Remove device") + + standardButtons: QQC2.Dialog.Cancel + + Component.onCompleted: passwordField.forceActiveFocus() + + contentItem: FormCard.FormTextFieldDelegate { + id: passwordField + label: i18n("Password:") + echoMode: TextInput.Password + } + customFooterActions: [ + Kirigami.Action { + text: i18nc("@action:button As in 'Remove this device'", "Remove") + icon.name: "delete" + onTriggered: { + root.devicesModel.logout(passwordSheet.deviceId, passwordField.text); + passwordField.text = ""; + passwordSheet.close(); + } + } + ] + } } diff --git a/src/settings/DevicesCard.qml b/src/settings/DevicesCard.qml index 1e14de1d2..f604276c0 100644 --- a/src/settings/DevicesCard.qml +++ b/src/settings/DevicesCard.qml @@ -2,6 +2,8 @@ // SPDX-FileCopyrightText: 2022 James Graham // SPDX-License-Identifier: GPL-2.0-or-later +pragma ComponentBehavior: Bound + import QtQuick import QtQuick.Layouts @@ -17,6 +19,7 @@ ColumnLayout { required property string title required property var type required property bool showVerifyButton + required property DevicesModel devicesModel visible: deviceRepeater.count > 0 @@ -30,17 +33,13 @@ ColumnLayout { Repeater { id: deviceRepeater model: DevicesProxyModel { - sourceModel: devicesModel + sourceModel: root.devicesModel type: root.type } - Kirigami.LoadingPlaceholder { - visible: deviceModel.count === 0 // We can assume 0 means loading since there is at least one device - anchors.centerIn: parent - } - delegate: DeviceDelegate { showVerifyButton: root.showVerifyButton + devicesModel: root.devicesModel } } } diff --git a/src/settings/DevicesPage.qml b/src/settings/DevicesPage.qml index c22c2cfab..debd7d0c9 100644 --- a/src/settings/DevicesPage.qml +++ b/src/settings/DevicesPage.qml @@ -33,6 +33,7 @@ FormCard.FormCardPage { title: i18nc("@info:group", "This Device") type: DevicesModel.This showVerifyButton: false + devicesModel: root.devicesModel FormCard.FormButtonDelegate { icon.name: "security-low" @@ -57,16 +58,19 @@ FormCard.FormCardPage { title: i18nc("@info:group", "Verified Devices") type: DevicesModel.Verified showVerifyButton: true + devicesModel: root.devicesModel } DevicesCard { title: i18nc("@info:group", "Unverified Devices") type: DevicesModel.Unverified showVerifyButton: true + devicesModel: root.devicesModel } DevicesCard { title: i18nc("@info:group", "Devices without Encryption Support") type: DevicesModel.Unencrypted showVerifyButton: false + devicesModel: root.devicesModel } FormCard.AbstractFormDelegate { @@ -83,37 +87,4 @@ FormCard.FormCardPage { type: Kirigami.MessageType.Information visible: !root.connection } - - property Kirigami.Dialog passwordSheet: Kirigami.Dialog { - id: passwordSheet - - property string deviceId - - preferredWidth: Kirigami.Units.gridUnit * 24 - - title: i18n("Remove device") - - standardButtons: QQC2.Dialog.Cancel - - Component.onCompleted: passwordField.forceActiveFocus() - - FormCard.FormCard { - FormCard.FormTextFieldDelegate { - id: passwordField - label: i18n("Password:") - echoMode: TextInput.Password - } - } - customFooterActions: [ - Kirigami.Action { - text: i18nc("As in 'Remove this device'", "Remove") - icon.name: "delete" - onTriggered: { - devicesModel.logout(passwordSheet.deviceId, passwordField.text); - passwordField.text = ""; - passwordSheet.close(); - } - } - ] - } }