From b05ad2392b8b0e96bbdc7b18ef67d6c1426bd697 Mon Sep 17 00:00:00 2001 From: Nethius Date: Wed, 28 Feb 2024 19:39:28 +0700 Subject: [PATCH] added escape key handler (#461) Added escape key handler for drawer2type --- client/ui/controllers/pageController.cpp | 23 +++++++++++++++++- client/ui/controllers/pageController.h | 10 +++++++- client/ui/qml/Controls2/DrawerType2.qml | 24 +++++++++++++++++++ client/ui/qml/Pages2/PageDeinstalling.qml | 4 ++-- .../qml/Pages2/PageSetupWizardInstalling.qml | 4 ++-- client/ui/qml/Pages2/PageSetupWizardStart.qml | 14 +++++++++++ client/ui/qml/Pages2/PageStart.qml | 19 +++++++++++++-- 7 files changed, 90 insertions(+), 8 deletions(-) diff --git a/client/ui/controllers/pageController.cpp b/client/ui/controllers/pageController.cpp index 467da3ac..1a73a1b1 100644 --- a/client/ui/controllers/pageController.cpp +++ b/client/ui/controllers/pageController.cpp @@ -77,7 +77,16 @@ void PageController::closeWindow() void PageController::keyPressEvent(Qt::Key key) { switch (key) { - case Qt::Key_Back: emit closePage(); + case Qt::Key_Back: + case Qt::Key_Escape: { + if (m_drawerDepth) { + emit closeTopDrawer(); + setDrawerDepth(getDrawerDepth() - 1); + } else { + emit escapePressed(); + } + break; + } default: return; } } @@ -132,3 +141,15 @@ void PageController::closeApplication() { qApp->quit(); } + +void PageController::setDrawerDepth(const int depth) +{ + if (depth >= 0) { + m_drawerDepth = depth; + } +} + +int PageController::getDrawerDepth() +{ + return m_drawerDepth; +} diff --git a/client/ui/controllers/pageController.h b/client/ui/controllers/pageController.h index 5c0909fb..7bdc12d4 100644 --- a/client/ui/controllers/pageController.h +++ b/client/ui/controllers/pageController.h @@ -87,6 +87,9 @@ public slots: void closeApplication(); + void setDrawerDepth(const int depth); + int getDrawerDepth(); + signals: void goToPage(PageLoader::PageEnum page, bool slide = true); void goToStartPage(); @@ -105,7 +108,7 @@ signals: void showNotificationMessage(const QString &message); void showBusyIndicator(bool visible); - void enableTabBar(bool enabled); + void disableControls(bool disabled); void hideMainWindow(); void raiseMainWindow(); @@ -113,12 +116,17 @@ signals: void showPassphraseRequestDrawer(); void passphraseRequestDrawerClosed(QString passphrase); + void escapePressed(); + void closeTopDrawer(); + private: QSharedPointer m_serversModel; std::shared_ptr m_settings; bool m_isTriggeredByConnectButton; + + int m_drawerDepth; }; #endif // PAGECONTROLLER_H diff --git a/client/ui/qml/Controls2/DrawerType2.qml b/client/ui/qml/Controls2/DrawerType2.qml index 5e6f785c..0cfdc0b0 100644 --- a/client/ui/qml/Controls2/DrawerType2.qml +++ b/client/ui/qml/Controls2/DrawerType2.qml @@ -25,6 +25,8 @@ Item { property real expandedHeight property real collapsedHeight: 0 + property int depthIndex: 0 + signal entered signal exited signal pressed(bool pressed, bool entered) @@ -36,6 +38,24 @@ Item { signal closed signal opened + Connections { + target: PageController + + function onCloseTopDrawer() { + if (depthIndex === PageController.getDrawerDepth()) { + if (isCollapsed) { + return + } + + aboutToHide() + + drawerContent.state = root.drawerCollapsed + depthIndex = 0 + closed() + } + } + } + Connections { target: root @@ -47,6 +67,8 @@ Item { aboutToHide() drawerContent.state = root.drawerCollapsed + depthIndex = 0 + PageController.setDrawerDepth(PageController.getDrawerDepth() - 1) closed() } @@ -58,6 +80,8 @@ Item { aboutToShow() drawerContent.state = root.drawerExpanded + depthIndex = PageController.getDrawerDepth() + 1 + PageController.setDrawerDepth(depthIndex) opened() } } diff --git a/client/ui/qml/Pages2/PageDeinstalling.qml b/client/ui/qml/Pages2/PageDeinstalling.qml index 8dffbbce..172af8ac 100644 --- a/client/ui/qml/Pages2/PageDeinstalling.qml +++ b/client/ui/qml/Pages2/PageDeinstalling.qml @@ -14,8 +14,8 @@ import "../Config" PageType { id: root - Component.onCompleted: PageController.enableTabBar(false) - Component.onDestruction: PageController.enableTabBar(true) + Component.onCompleted: PageController.disableControls(true) + Component.onDestruction: PageController.disableControls(false) SortFilterProxyModel { id: proxyServersModel diff --git a/client/ui/qml/Pages2/PageSetupWizardInstalling.qml b/client/ui/qml/Pages2/PageSetupWizardInstalling.qml index 2a5cafd8..f997a489 100644 --- a/client/ui/qml/Pages2/PageSetupWizardInstalling.qml +++ b/client/ui/qml/Pages2/PageSetupWizardInstalling.qml @@ -14,8 +14,8 @@ import "../Config" PageType { id: root - Component.onCompleted: PageController.enableTabBar(false) - Component.onDestruction: PageController.enableTabBar(true) + Component.onCompleted: PageController.disableControls(true) + Component.onDestruction: PageController.disableControls(false) property bool isTimerRunning: true property string progressBarText: qsTr("Usually it takes no more than 5 minutes") diff --git a/client/ui/qml/Pages2/PageSetupWizardStart.qml b/client/ui/qml/Pages2/PageSetupWizardStart.qml index 161b85da..698eacb3 100644 --- a/client/ui/qml/Pages2/PageSetupWizardStart.qml +++ b/client/ui/qml/Pages2/PageSetupWizardStart.qml @@ -13,6 +13,8 @@ import "../Components" PageType { id: root + property bool isControlsDisabled: false + Connections { target: PageController @@ -45,6 +47,18 @@ PageType { stackView.pop() } } + + function onDisableControls(disabled) { + isControlsDisabled = disabled + } + + function onEscapePressed() { + if (isControlsDisabled || busyIndicator.visible) { + return + } + + PageController.closePage() + } } Connections { diff --git a/client/ui/qml/Pages2/PageStart.qml b/client/ui/qml/Pages2/PageStart.qml index dac9db93..eed08194 100644 --- a/client/ui/qml/Pages2/PageStart.qml +++ b/client/ui/qml/Pages2/PageStart.qml @@ -38,8 +38,8 @@ PageType { tabBar.enabled = !visible } - function onEnableTabBar(enabled) { - tabBar.enabled = enabled + function onDisableControls(disabled) { + tabBar.enabled = !disabled } function onClosePage() { @@ -70,6 +70,21 @@ PageType { tabBarStackView.pop() } } + + function onEscapePressed() { + if (!tabBar.enabled || busyIndicator.visible) { + return + } + + var pageName = tabBarStackView.currentItem.objectName + if ((pageName === PageController.getPagePath(PageEnum.PageShare)) || + (pageName === PageController.getPagePath(PageEnum.PageSettings))) { + PageController.goToPageHome() + tabBar.previousIndex = 0 + } else { + PageController.closePage() + } + } } Connections {