diff --git a/docs/TODO.md b/docs/TODO.md index 1521436d..c9f2cca1 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -4,6 +4,12 @@ - PCN error handling - Change docs linking to dev branch back to master +- Implement fallback QML notifications, usable if dbus isn't available +- annoying tooltips when menu open +- profiles missing in notifications + +- add http_proxy support +- Encrypted rooms don't show invites in member list after Mirage restart - Room display name not updated when someone removes theirs - Fix right margin of own `\n` messages diff --git a/src/gui/Pages/AccountSettings/DeviceDelegate.qml b/src/gui/Pages/AccountSettings/DeviceDelegate.qml index 1677d4ae..4c1e71fb 100644 --- a/src/gui/Pages/AccountSettings/DeviceDelegate.qml +++ b/src/gui/Pages/AccountSettings/DeviceDelegate.qml @@ -12,6 +12,7 @@ HTile { property HListView view property string userId + property bool offline: false signal verified() signal blacklisted() @@ -84,6 +85,7 @@ HTile { label.horizontalAlignment: Qt.AlignHCenter HRowLayout { + enabled: ! deviceTile.offline width: parent.width HTextField { @@ -166,6 +168,7 @@ HTile { NegativeButton { text: qsTr("Sign out") + enabled: ! deviceTile.offline icon.name: "device-delete" onClicked: deviceTile.deleteRequest() } diff --git a/src/gui/Pages/AccountSettings/Security.qml b/src/gui/Pages/AccountSettings/Security.qml index 785d8328..7adc6dd5 100644 --- a/src/gui/Pages/AccountSettings/Security.qml +++ b/src/gui/Pages/AccountSettings/Security.qml @@ -19,6 +19,9 @@ HColumnPage { property Future loadFuture: null + readonly property QtObject account: ModelStore.get("accounts").find(userId) + readonly property bool offline: ! account || account.presence === "offline" + function takeFocus() { deviceList.headerItem.exportButton.forceActiveFocus() } @@ -88,8 +91,12 @@ HColumnPage { return counts } + function focusListController(top=true) { + deviceList.currentIndex = top ? 0 : deviceList.count - 1 + listController.forceActiveFocus() + } + - enabled: ModelStore.get("accounts").find(userId).presence !== "offline" contentHeight: Math.min( window.height, Math.max( @@ -114,6 +121,7 @@ HColumnPage { header: HColumnLayout { readonly property alias exportButton: exportButton + readonly property alias importButton: importButton readonly property alias signOutCheckedButton: signOutCheckedButton spacing: theme.spacing @@ -160,13 +168,11 @@ HColumnPage { } ) - Keys.onBacktabPressed: { - deviceList.currentIndex = deviceList.count - 1 - listController.forceActiveFocus() - } + Keys.onBacktabPressed: page.focusListController(false) } GroupButton { + id: importButton text: qsTr("Import") icon.name: "import-keys" @@ -176,6 +182,11 @@ HColumnPage { { userId: page.userId }, obj => { obj.dialog.open() } ) + + Keys.onTabPressed: + signOutCheckedButton.enabled ? + refreshButton.forceActiveFocus() : + page.focusListController() } } @@ -199,6 +210,8 @@ HColumnPage { } AutoDirectionLayout { + enabled: ! page.offline + GroupButton { id: refreshButton text: qsTr("Refresh") @@ -222,10 +235,7 @@ HColumnPage { ...utils.range(1, deviceList.count - 1), ) - Keys.onTabPressed: { - deviceList.currentIndex = 0 - listController.forceActiveFocus() - } + Keys.onTabPressed: page.focusListController() } } } @@ -234,6 +244,7 @@ HColumnPage { width: deviceList.width view: deviceList userId: page.userId + offline: page.offline onVerified: page.loadDevices() onBlacklisted: page.loadDevices() onRenameRequest: name => page.renameDevice(model.index, name) @@ -257,15 +268,8 @@ HColumnPage { Keys.onReturnPressed: Keys.onEnterPressed(event) Keys.onMenuPressed: Keys.onEnterPressed(event) - Keys.onUpPressed: { - deviceList.currentIndex = deviceList.count - 1 - listController.forceActiveFocus() - } - - Keys.onDownPressed: { - deviceList.currentIndex = 0 - listController.forceActiveFocus() - } + Keys.onUpPressed: page.focusListController(false) + Keys.onDownPressed: page.focusListController() Item { id: listController @@ -273,7 +277,11 @@ HColumnPage { Keys.onBacktabPressed: { if (parent.currentIndex === 0) { parent.currentIndex = -1 - parent.headerItem.signOutCheckedButton.forceActiveFocus() + + parent.headerItem.signOutCheckedButton.enabled ? + parent.headerItem.signOutCheckedButton.forceActiveFocus() : + parent.headerItem.importButton.forceActiveFocus() + return } parent.decrementCurrentIndex()