From 1e8909c50c9abdb6857d6745aab95bcc0641d68d Mon Sep 17 00:00:00 2001 From: Garegin866 Date: Tue, 13 Aug 2024 23:23:54 +0400 Subject: [PATCH] Removed defaultActiveFocusItem property, now FocusChainType takes it from focus chain, it is first element in chain. Minor changes on FocusChainType.qml file. --- .../ConnectionTypeSelectionDrawer.qml | 3 +- .../Components/HomeSplitTunnelingDrawer.qml | 175 ++-- client/ui/qml/Controls2/DrawerType2.qml | 48 +- client/ui/qml/Controls2/FocusChainType.qml | 98 +-- .../qml/Controls2/TextFieldWithHeaderType.qml | 30 +- client/ui/qml/Pages2/PageHome.qml | 815 +++++++++--------- .../ui/qml/Pages2/PageProtocolAwgSettings.qml | 2 - .../qml/Pages2/PageProtocolCloakSettings.qml | 8 +- .../Pages2/PageProtocolOpenVpnSettings.qml | 2 +- client/ui/qml/Pages2/PageProtocolRaw.qml | 12 +- .../PageProtocolShadowSocksSettings.qml | 6 +- .../Pages2/PageProtocolWireGuardSettings.qml | 2 - .../qml/Pages2/PageProtocolXraySettings.qml | 2 - .../ui/qml/Pages2/PageServiceDnsSettings.qml | 2 - .../ui/qml/Pages2/PageServiceSftpSettings.qml | 2 - .../Pages2/PageServiceSocksProxySettings.qml | 2 - .../Pages2/PageServiceTorWebsiteSettings.qml | 2 - client/ui/qml/Pages2/PageSettings.qml | 2 - client/ui/qml/Pages2/PageSettingsAbout.qml | 2 - .../Pages2/PageSettingsAppSplitTunneling.qml | 15 - .../ui/qml/Pages2/PageSettingsApplication.qml | 5 +- client/ui/qml/Pages2/PageSettingsBackup.qml | 2 - .../ui/qml/Pages2/PageSettingsConnection.qml | 2 - client/ui/qml/Pages2/PageSettingsDns.qml | 8 +- client/ui/qml/Pages2/PageSettingsLogging.qml | 2 - .../ui/qml/Pages2/PageSettingsServerInfo.qml | 2 - .../qml/Pages2/PageSettingsServerProtocol.qml | 2 - .../ui/qml/Pages2/PageSettingsServersList.qml | 2 - .../qml/Pages2/PageSettingsSplitTunneling.qml | 12 +- .../Pages2/PageSetupWizardConfigSource.qml | 1 - .../qml/Pages2/PageSetupWizardCredentials.qml | 17 +- client/ui/qml/Pages2/PageSetupWizardEasy.qml | 13 - .../qml/Pages2/PageSetupWizardInstalling.qml | 1 - .../PageSetupWizardProtocolSettings.qml | 10 +- .../qml/Pages2/PageSetupWizardProtocols.qml | 7 - client/ui/qml/Pages2/PageSetupWizardStart.qml | 12 +- .../ui/qml/Pages2/PageSetupWizardTextKey.qml | 12 - .../qml/Pages2/PageSetupWizardViewConfig.qml | 11 - client/ui/qml/Pages2/PageShare.qml | 20 +- client/ui/qml/Pages2/PageShareFullAccess.qml | 13 - client/ui/qml/Pages2/PageStart.qml | 27 +- client/ui/qml/main2.qml | 2 +- 42 files changed, 634 insertions(+), 779 deletions(-) diff --git a/client/ui/qml/Components/ConnectionTypeSelectionDrawer.qml b/client/ui/qml/Components/ConnectionTypeSelectionDrawer.qml index 9f6f77af..15e801f3 100644 --- a/client/ui/qml/Components/ConnectionTypeSelectionDrawer.qml +++ b/client/ui/qml/Components/ConnectionTypeSelectionDrawer.qml @@ -15,7 +15,8 @@ DrawerType2 { height: parent.height expandedContent: FocusChainType { - defaultActiveFocusItem: ip + focus: root.visible + focusTabBarOnLastItem: false ColumnLayout { id: content diff --git a/client/ui/qml/Components/HomeSplitTunnelingDrawer.qml b/client/ui/qml/Components/HomeSplitTunnelingDrawer.qml index 8ca146bb..cb754cb3 100644 --- a/client/ui/qml/Components/HomeSplitTunnelingDrawer.qml +++ b/client/ui/qml/Components/HomeSplitTunnelingDrawer.qml @@ -16,110 +16,109 @@ DrawerType2 { anchors.fill: parent expandedHeight: parent.height * 0.9 - expandedContent: ColumnLayout { - id: content + expandedContent: FocusChainType { + focus: root.visible + focusTabBarOnLastItem: false - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right - spacing: 0 + ColumnLayout { + id: content - // onActiveFocusChanged: { - // console.log("onActiveFocusChanged ========================") - // if (activeFocus) { - // focusItem.forceActiveFocus() - // } - // } + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + spacing: 0 - // Connections { - // target: root - // enabled: !GC.isMobile() - // function onOpened() { - // focusItem.forceActiveFocus() - // } - // } + // onActiveFocusChanged: { + // if (activeFocus) { + // focusItem.forceActiveFocus() + // } + // } - Header2Type { - Layout.fillWidth: true - Layout.topMargin: 24 - Layout.rightMargin: 16 - Layout.leftMargin: 16 - Layout.bottomMargin: 16 + // Connections { + // target: root + // enabled: !GC.isMobile() + // function onOpened() { + // focusItem.forceActiveFocus() + // } + // } - headerText: qsTr("Split tunneling") - descriptionText: qsTr("Allows you to connect to some sites or applications through a VPN connection and bypass others") - } + Header2Type { + Layout.fillWidth: true + Layout.topMargin: 24 + Layout.rightMargin: 16 + Layout.leftMargin: 16 + Layout.bottomMargin: 16 - Item { - id: focusItem - KeyNavigation.tab: splitTunnelingSwitch.visible ? splitTunnelingSwitch : siteBasedSplitTunnelingSwitch.rightButton - } - - LabelWithButtonType { - id: splitTunnelingSwitch - Layout.fillWidth: true - Layout.topMargin: 16 - - visible: ServersModel.isDefaultServerDefaultContainerHasSplitTunneling && ServersModel.getDefaultServerData("isServerFromApi") - - text: qsTr("Split tunneling on the server") - descriptionText: qsTr("Enabled \nCan't be disabled for current server") - rightImageSource: "qrc:/images/controls/chevron-right.svg" - - KeyNavigation.tab: siteBasedSplitTunnelingSwitch.visible ? siteBasedSplitTunnelingSwitch.rightButton : focusItem - - clickedFunction: function() { -// PageController.goToPage(PageEnum.PageSettingsSplitTunneling) -// root.close() + headerText: qsTr("Split tunneling") + descriptionText: qsTr("Allows you to connect to some sites or applications through a VPN connection and bypass others") } - } - DividerType { - visible: ServersModel.isDefaultServerDefaultContainerHasSplitTunneling && ServersModel.getDefaultServerData("isServerFromApi") - } + LabelWithButtonType { + id: splitTunnelingSwitch + Layout.fillWidth: true + Layout.topMargin: 16 - LabelWithButtonType { - id: siteBasedSplitTunnelingSwitch - Layout.fillWidth: true - Layout.topMargin: 16 + visible: ServersModel.isDefaultServerDefaultContainerHasSplitTunneling && ServersModel.getDefaultServerData("isServerFromApi") - text: qsTr("Site-based split tunneling") - descriptionText: enabled && SitesModel.isTunnelingEnabled ? qsTr("Enabled") : qsTr("Disabled") - rightImageSource: "qrc:/images/controls/chevron-right.svg" + text: qsTr("Split tunneling on the server") + descriptionText: qsTr("Enabled \nCan't be disabled for current server") + rightImageSource: "qrc:/images/controls/chevron-right.svg" - KeyNavigation.tab: appSplitTunnelingSwitch.visible ? - appSplitTunnelingSwitch.rightButton : - focusItem + // KeyNavigation.tab: siteBasedSplitTunnelingSwitch.visible ? siteBasedSplitTunnelingSwitch.rightButton : focusItem - clickedFunction: function() { - PageController.goToPage(PageEnum.PageSettingsSplitTunneling) - root.close() + clickedFunction: function() { + // PageController.goToPage(PageEnum.PageSettingsSplitTunneling) + // root.close() + } } - } - DividerType { - } - - LabelWithButtonType { - id: appSplitTunnelingSwitch - visible: isAppSplitTinnelingEnabled - - Layout.fillWidth: true - - text: qsTr("App-based split tunneling") - descriptionText: AppSplitTunnelingModel.isTunnelingEnabled ? qsTr("Enabled") : qsTr("Disabled") - rightImageSource: "qrc:/images/controls/chevron-right.svg" - - KeyNavigation.tab: focusItem - - clickedFunction: function() { - PageController.goToPage(PageEnum.PageSettingsAppSplitTunneling) - root.close() + DividerType { + visible: ServersModel.isDefaultServerDefaultContainerHasSplitTunneling && ServersModel.getDefaultServerData("isServerFromApi") } - } - DividerType { - visible: isAppSplitTinnelingEnabled + LabelWithButtonType { + id: siteBasedSplitTunnelingSwitch + Layout.fillWidth: true + Layout.topMargin: 16 + + text: qsTr("Site-based split tunneling") + descriptionText: enabled && SitesModel.isTunnelingEnabled ? qsTr("Enabled") : qsTr("Disabled") + rightImageSource: "qrc:/images/controls/chevron-right.svg" + + // KeyNavigation.tab: appSplitTunnelingSwitch.visible ? + // appSplitTunnelingSwitch.rightButton : + // focusItem + + clickedFunction: function() { + PageController.goToPage(PageEnum.PageSettingsSplitTunneling) + root.close() + } + } + + DividerType { + } + + LabelWithButtonType { + id: appSplitTunnelingSwitch + visible: isAppSplitTinnelingEnabled + + Layout.fillWidth: true + + text: qsTr("App-based split tunneling") + descriptionText: AppSplitTunnelingModel.isTunnelingEnabled ? qsTr("Enabled") : qsTr("Disabled") + rightImageSource: "qrc:/images/controls/chevron-right.svg" + + // KeyNavigation.tab: focusItem + + clickedFunction: function() { + PageController.goToPage(PageEnum.PageSettingsAppSplitTunneling) + root.close() + } + } + + DividerType { + visible: isAppSplitTinnelingEnabled + } } } } diff --git a/client/ui/qml/Controls2/DrawerType2.qml b/client/ui/qml/Controls2/DrawerType2.qml index f1c48482..be784a1a 100644 --- a/client/ui/qml/Controls2/DrawerType2.qml +++ b/client/ui/qml/Controls2/DrawerType2.qml @@ -10,8 +10,6 @@ import "TextTypes" FocusScope { id: root - /*required*/ property var parentPage - readonly property string drawerExpanded: "expanded" readonly property string drawerCollapsed: "collapsed" @@ -44,30 +42,30 @@ FocusScope { signal opened onClosed: { - console.log("Drawer closed============================") if (GC.isMobile()) { return } - if (parentPage) { - parentPage.forceActiveFocus() - } + // if (parent && parent instanceof PageType) { + // parent.focusItem_.forceActiveFocus() + // } + + // tabBarStackView.currentItem.focusItem_.forceActiveFocus() + // PageController.forceStackActiveFocus() } - onOpened: { - console.log("Drawer opened============================") - if (GC.isMobile()) { - return - } + // onOpened: { + // if (GC.isMobile()) { + // return + // } - if (root.expandedContent) { - expandedLoader.item.forceActiveFocus() - } - } + // if (root.expandedContent) { + // expandedLoader.item.forceActiveFocus() + // } + // } onActiveFocusChanged: { - console.log("Drawer active focus changed============================") if (GC.isMobile()) { return } @@ -77,15 +75,15 @@ FocusScope { } } - // onOpened: { - // if (isOpened) { - // if (drawerContent.state === root.drawerExpanded) { - // expandedLoader.item.forceActiveFocus() - // } else { - // collapsedLoader.item.forceActiveFocus() - // } - // } - // } + onOpened: { + if (isOpened) { + if (drawerContent.state === root.drawerExpanded) { + expandedLoader.item.forceActiveFocus() + } else { + collapsedLoader.item.forceActiveFocus() + } + } + } Connections { target: PageController diff --git a/client/ui/qml/Controls2/FocusChainType.qml b/client/ui/qml/Controls2/FocusChainType.qml index 5d15e76d..8a6480be 100644 --- a/client/ui/qml/Controls2/FocusChainType.qml +++ b/client/ui/qml/Controls2/FocusChainType.qml @@ -6,18 +6,23 @@ import "../Components" FocusScope { id: root - required property var defaultActiveFocusItem + property bool focusTabBarOnLastItem: true + property alias focusItem_: focusItem - property var focusChain: [] + QtObject { + id: internal - onActiveFocusChanged: { - // console.log("root activeFocusChanged=-=--=-=-=-=--", activeFocus) + property var firstActiveFocusItem: null + property var focusChain: [] + } + + onVisibleChanged: { + focusItem_.focus = true } function getChildren(parent) { for (var i = 0; i < parent.children.length; i++) { var child = parent.children[i] - // console.log(child) if (child.children) { getChildren(child) @@ -26,33 +31,33 @@ FocusScope { } function isFocusableItem(item) { - // if (!item) { return false } + if (!item || !item.visible || !item.enabled) { + return false + } return item instanceof BasicButtonType || item instanceof ConnectButton || item instanceof LabelWithButtonType || item instanceof SwitcherType || item instanceof ImageButtonType || + item instanceof TextFieldWithHeaderType || item instanceof BackButtonType || + item instanceof HorizontalRadioButton || item instanceof DrawerType2 && !item.isOpened && item.collapsedContent } function getFocusChain(parent) { let focusChain = [] - // console.log("-------------->", parent.children.length) - // console.log(parent.children) - // console.log("-------------->") for (var i = 0; i < parent.children.length; i++) { var child = parent.children[i] - if ( - child instanceof DropDownType || + if (child instanceof DropDownType || child instanceof HomeSplitTunnelingDrawer || child instanceof ConnectionTypeSelectionDrawer ) { continue } - // console.log(child, isFocusableItem(child), child.objectName) + if (isFocusableItem(child)) { focusChain.push(child) @@ -67,65 +72,60 @@ FocusScope { return focusChain } - - Component.onCompleted: { - root.focusChain = getFocusChain(root) - console.log("focusChain------------------>", focusChain) - for (let i = 0; i < focusChain.length; i++) { - focusChain[i].KeyNavigation.tab = focusChain[(i + 1) % focusChain.length] - focusChain[i].KeyNavigation.backtab = focusChain[(i + focusChain.length - 1) % focusChain.length] + internal.focusChain = getFocusChain(root) + + if (internal.focusChain.length === 0) { + return } - const lastItem = focusChain[focusChain.length - 1] + for (let i = 0; i < internal.focusChain.length; i++) { + internal.focusChain[i].KeyNavigation.tab = internal.focusChain[(i + 1) % internal.focusChain.length] + internal.focusChain[i].KeyNavigation.backtab = internal.focusChain[(i + internal.focusChain.length - 1) % internal.focusChain.length] + } + + internal.firstActiveFocusItem = internal.focusChain[0] + + const lastItem = internal.focusChain[internal.focusChain.length - 1] lastItem.Keys.onTabPressed.connect(function() { lastItemTabClicked(lastItem) }) + + for (let j = 0; j < internal.focusChain.length; j++) { + if (internal.focusChain[j] instanceof TextFieldWithHeaderType) { + internal.focusChain[j].forceActiveFocus() + break + } + } } - - Item { id: focusItem focus: true - // KeyNavigation.tab: defaultActiveFocusItem ? defaultActiveFocusItem : focusItem Keys.onTabPressed: { - // console.log("tab pressed", defaultActiveFocusItem) - defaultActiveFocusItem.forceActiveFocus() - } - - onActiveFocusChanged: { - // console.log("focusItem activeFocusChanged") - + if (internal.firstActiveFocusItem) { + internal.firstActiveFocusItem.focus = true + internal.firstActiveFocusItem.forceActiveFocus() + } } } - function lastItemTabClicked(lastItem = null) { - console.log("lastItemTabClicked", lastItem) + function lastItemTabClicked() { + focusItem.focus = true + if (GC.isMobile()) { return } - focusItem.forceActiveFocus() - PageController.forceTabBarActiveFocus() - - if (lastItem && lastItem.parentFlickable) { - console.log("lastItemTabClicked", lastItem.parentFlickable) - lastItem.parentFlickable.contentY = 0 + if (focusTabBarOnLastItem) { + PageController.forceTabBarActiveFocus() } - // if (focusItem) { - // focusItem.forceActiveFocus() - // PageController.forceTabBarActiveFocus() - // } else { - // if (defaultActiveFocusItem) { - // defaultActiveFocusItem.forceActiveFocus() - // } - // PageController.forceTabBarActiveFocus() - // } + + if (lastItem && lastItem.parentFlickable) { + lastItem.parentFlickable.contentY = 0 + } } - - } diff --git a/client/ui/qml/Controls2/TextFieldWithHeaderType.qml b/client/ui/qml/Controls2/TextFieldWithHeaderType.qml index 7ab8f9e3..dcbecdea 100644 --- a/client/ui/qml/Controls2/TextFieldWithHeaderType.qml +++ b/client/ui/qml/Controls2/TextFieldWithHeaderType.qml @@ -6,7 +6,7 @@ import Style 1.0 import "TextTypes" -Item { +FocusScope { id: root property string headerText @@ -40,16 +40,17 @@ Item { implicitHeight: content.implicitHeight property FlickableType parentFlickable - Connections { - target: textField - function onFocusChanged() { - if (textField.activeFocus) { - if (root.parentFlickable) { - root.parentFlickable.ensureVisible(root) - } - } - } - } + + // Connections { + // target: textField + // function onFocusChanged() { + // if (textField.activeFocus) { + // if (root.parentFlickable) { + // root.parentFlickable.ensureVisible(root) + // } + // } + // } + // } ColumnLayout { id: content @@ -85,6 +86,7 @@ Item { TextField { id: textField activeFocusOnTab: false + focus: true enabled: root.textFieldEditable color: root.enabled ? root.textFieldTextColor : root.textFieldTextDisabledColor @@ -119,6 +121,7 @@ Item { } onActiveFocusChanged: { + backgroud.border.color = getBackgroundBorderColor(root.borderColor) if (checkEmptyText && textFieldText === "") { errorText = qsTr("The field can't be empty") } @@ -136,9 +139,6 @@ Item { textObj: textField } - onFocusChanged: { - backgroud.border.color = getBackgroundBorderColor(root.borderColor) - } } } } @@ -199,7 +199,7 @@ Item { } function getBackgroundBorderColor(noneFocusedColor) { - return textField.focus ? root.borderFocusedColor : noneFocusedColor + return textField.activeFocus ? root.borderFocusedColor : noneFocusedColor } Keys.onEnterPressed: { diff --git a/client/ui/qml/Pages2/PageHome.qml b/client/ui/qml/Pages2/PageHome.qml index 19cec241..15799e29 100644 --- a/client/ui/qml/Pages2/PageHome.qml +++ b/client/ui/qml/Pages2/PageHome.qml @@ -20,10 +20,6 @@ PageType { id: root focus: true - defaultActiveFocusItem: loggingButton.visible ? - loggingButton : - connectButton - Connections { target: PageController @@ -140,412 +136,411 @@ PageType { objectName: "drawer" anchors.fill: parent focus: true - parentPage: root - - collapsedContent: FocusScope { - id: collapsed123 - focus: true - implicitHeight: Qt.platform.os !== "ios" ? root.height * 0.9 : screen.height * 0.77 - Component.onCompleted: { - drawer.expandedHeight = implicitHeight - } - - // Connections { - // target: drawer - // enabled: !GC.isMobile() - // function onActiveFocusChanged() { - // if (drawer.activeFocus && !drawer.isOpened) { - // collapsed123.forceActiveFocus() - // // collapsedButtonChevron.forceActiveFocus() - // } - // } - // } - - ColumnLayout { - id: collapsed - - anchors.left: parent.left - anchors.right: parent.right - - Component.onCompleted: { - drawer.collapsedHeight = collapsed.implicitHeight - } - - DividerType { - Layout.topMargin: 10 - Layout.fillWidth: false - Layout.preferredWidth: 20 - Layout.preferredHeight: 2 - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - } - - RowLayout { - Layout.topMargin: 14 - Layout.leftMargin: 24 - Layout.rightMargin: 24 - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - - spacing: 0 - - Connections { - target: drawer - function onEntered() { - if (drawer.isCollapsed) { - collapsedButtonChevron.backgroundColor = collapsedButtonChevron.hoveredColor - collapsedButtonHeader.opacity = 0.8 - } else { - collapsedButtonHeader.opacity = 1 - } - } - - function onExited() { - if (drawer.isCollapsed) { - collapsedButtonChevron.backgroundColor = collapsedButtonChevron.defaultColor - collapsedButtonHeader.opacity = 1 - } else { - collapsedButtonHeader.opacity = 1 - } - } - - function onPressed(pressed, entered) { - if (drawer.isCollapsed) { - collapsedButtonChevron.backgroundColor = pressed ? collapsedButtonChevron.pressedColor : entered ? collapsedButtonChevron.hoveredColor : collapsedButtonChevron.defaultColor - collapsedButtonHeader.opacity = 0.7 - } else { - collapsedButtonHeader.opacity = 1 - } - } - } - - Header1TextType { - id: collapsedButtonHeader - Layout.maximumWidth: drawer.width - 48 - 18 - 12 - - maximumLineCount: 2 - elide: Qt.ElideRight - - text: ServersModel.defaultServerName - horizontalAlignment: Qt.AlignHCenter - - Behavior on opacity { - PropertyAnimation { duration: 200 } - } - } - - ImageButtonType { - id: collapsedButtonChevron - - Layout.leftMargin: 8 - - visible: drawer.isCollapsed - - hoverEnabled: false - image: "qrc:/images/controls/chevron-down.svg" - imageColor: AmneziaStyle.color.white - - icon.width: 18 - icon.height: 18 - backgroundRadius: 16 - horizontalPadding: 4 - topPadding: 4 - bottomPadding: 3 - - Keys.onEnterPressed: collapsedButtonChevron.clicked() - Keys.onReturnPressed: collapsedButtonChevron.clicked() - // Keys.onTabPressed: lastItemTabClicked() - - focus: true - - onClicked: { - if (drawer.isCollapsed) { - drawer.open() - focusItem1.forceActiveFocus() - } - } - } - } - - LabelTextType { - id: collapsedServerMenuDescription - Layout.bottomMargin: drawer.isCollapsed ? 44 : ServersModel.isDefaultServerFromApi ? 89 : 44 - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - text: drawer.isCollapsed ? ServersModel.defaultServerDescriptionCollapsed : ServersModel.defaultServerDescriptionExpanded - } - } - - // Connections { - // target: drawer - // enabled: !GC.isMobile() - // function onIsCollapsedChanged() { - // if (!drawer.isCollapsed) { - // focusItem1.forceActiveFocus() - // } - // } - // } - - ColumnLayout { - id: serversMenuHeader - - anchors.top: collapsed.bottom - anchors.right: parent.right - anchors.left: parent.left - - RowLayout { - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - focus: false - spacing: 8 - - visible: !ServersModel.isDefaultServerFromApi - - Item { - id: focusItem1 - KeyNavigation.tab: serversMenuContent /*containersDropDown*/ - } - - // DropDownType { - // id: containersDropDown - - // rootButtonImageColor: AmneziaStyle.color.black - // rootButtonBackgroundColor: AmneziaStyle.color.white - // rootButtonBackgroundHoveredColor: Qt.rgba(215, 216, 219, 0.8) - // rootButtonBackgroundPressedColor: Qt.rgba(215, 216, 219, 0.65) - // rootButtonHoveredBorderColor: AmneziaStyle.color.transparent - // rootButtonDefaultBorderColor: AmneziaStyle.color.transparent - // rootButtonTextTopMargin: 8 - // rootButtonTextBottomMargin: 8 - - // text: ServersModel.defaultServerDefaultContainerName - // textColor: AmneziaStyle.color.black - // headerText: qsTr("VPN protocol") - // headerBackButtonImage: "qrc:/images/controls/arrow-left.svg" - - // rootButtonClickedFunction: function() { - // containersDropDown.open() - // } - - // drawerParent: root - // KeyNavigation.tab: serversMenuContent - - // listView: HomeContainersListView { - // id: containersListView - // rootWidth: root.width - // // onVisibleChanged: { - // // if (containersDropDown.visible && !GC.isMobile()) { - // // focusItem1.forceActiveFocus() - // // } - // // } - - // Connections { - // target: ServersModel - - // function onDefaultServerIndexChanged() { - // updateContainersModelFilters() - // } - // } - - // function updateContainersModelFilters() { - // if (ServersModel.isDefaultServerHasWriteAccess()) { - // proxyDefaultServerContainersModel.filters = ContainersModelFilters.getWriteAccessProtocolsListFilters() - // } else { - // proxyDefaultServerContainersModel.filters = ContainersModelFilters.getReadAccessProtocolsListFilters() - // } - // } - - // model: SortFilterProxyModel { - // id: proxyDefaultServerContainersModel - // sourceModel: DefaultServerContainersModel - - // sorters: [ - // RoleSorter { roleName: "isInstalled"; sortOrder: Qt.DescendingOrder } - // ] - // } - - // Component.onCompleted: updateContainersModelFilters() - // } - // } - - } - - Header2Type { - Layout.fillWidth: true - Layout.topMargin: 48 - Layout.leftMargin: 16 - Layout.rightMargin: 16 - - headerText: qsTr("Servers") - } - } - - ButtonGroup { - id: serversRadioButtonGroup - } - - ListView { - id: serversMenuContent - - anchors.top: serversMenuHeader.bottom - anchors.right: parent.right - anchors.left: parent.left - anchors.bottom: parent.bottom - anchors.topMargin: 16 - - model: ServersModel - currentIndex: ServersModel.defaultIndex - - ScrollBar.vertical: ScrollBar { - id: scrollBar - policy: serversMenuContent.height >= serversMenuContent.contentHeight ? ScrollBar.AlwaysOff : ScrollBar.AlwaysOn - } - - - activeFocusOnTab: true - focus: true - - property int focusItemIndex: 0 - onActiveFocusChanged: { - if (activeFocus) { - serversMenuContent.focusItemIndex = 0 - serversMenuContent.itemAtIndex(focusItemIndex).forceActiveFocus() - } - } - - onFocusItemIndexChanged: { - const focusedElement = serversMenuContent.itemAtIndex(focusItemIndex) - if (focusedElement) { - if (focusedElement.y + focusedElement.height > serversMenuContent.height) { - serversMenuContent.contentY = focusedElement.y + focusedElement.height - serversMenuContent.height - } else { - serversMenuContent.contentY = 0 - } - } - } - - Keys.onUpPressed: scrollBar.decrease() - Keys.onDownPressed: scrollBar.increase() - - Connections { - target: drawer - enabled: !GC.isMobile() - function onIsCollapsedChanged() { - if (drawer.isCollapsed) { - const item = serversMenuContent.itemAtIndex(serversMenuContent.focusItemIndex) - if (item) { item.serverRadioButtonProperty.focus = false } - } - } - } - - Connections { - target: ServersModel - function onDefaultServerIndexChanged(serverIndex) { - serversMenuContent.currentIndex = serverIndex - } - } - - clip: true - - delegate: Item { - id: menuContentDelegate - - property variant delegateData: model - property VerticalRadioButton serverRadioButtonProperty: serverRadioButton - - implicitWidth: serversMenuContent.width - implicitHeight: serverRadioButtonContent.implicitHeight - - onActiveFocusChanged: { - if (activeFocus) { - serverRadioButton.forceActiveFocus() - } - } - - ColumnLayout { - id: serverRadioButtonContent - - anchors.fill: parent - anchors.rightMargin: 16 - anchors.leftMargin: 16 - - spacing: 0 - - RowLayout { - Layout.fillWidth: true - VerticalRadioButton { - id: serverRadioButton - - Layout.fillWidth: true - - text: name - descriptionText: serverDescription - - checked: index === serversMenuContent.currentIndex - checkable: !ConnectionController.isConnected - - ButtonGroup.group: serversRadioButtonGroup - - onClicked: { - if (ConnectionController.isConnected) { - PageController.showNotificationMessage(qsTr("Unable change server while there is an active connection")) - return - } - - serversMenuContent.currentIndex = index - - ServersModel.defaultIndex = index - } - - MouseArea { - anchors.fill: serverRadioButton - cursorShape: Qt.PointingHandCursor - enabled: false - } - - Keys.onTabPressed: serverInfoButton.forceActiveFocus() - Keys.onEnterPressed: serverRadioButton.clicked() - Keys.onReturnPressed: serverRadioButton.clicked() - - KeyNavigation.tab: serverInfoButton - } - - ImageButtonType { - id: serverInfoButton - image: "qrc:/images/controls/settings.svg" - imageColor: AmneziaStyle.color.white - - implicitWidth: 56 - implicitHeight: 56 - - z: 1 - - Keys.onTabPressed: { - if (serversMenuContent.focusItemIndex < serversMenuContent.count - 1) { - serversMenuContent.focusItemIndex++ - serversMenuContent.itemAtIndex(serversMenuContent.focusItemIndex).forceActiveFocus() - } else { - focusItem1.forceActiveFocus() - serversMenuContent.contentY = 0 - } - } - Keys.onEnterPressed: serverInfoButton.clicked() - Keys.onReturnPressed: serverInfoButton.clicked() - - onClicked: function() { - ServersModel.processedIndex = index - PageController.goToPage(PageEnum.PageSettingsServerInfo) - drawer.close() - } - } - } - - DividerType { - Layout.fillWidth: true - Layout.leftMargin: 0 - Layout.rightMargin: 0 - } - } - } - } - - } + + // collapsedContent: FocusScope { + // id: collapsed123 + // focus: true + // implicitHeight: Qt.platform.os !== "ios" ? root.height * 0.9 : screen.height * 0.77 + // Component.onCompleted: { + // drawer.expandedHeight = implicitHeight + // } + + // // Connections { + // // target: drawer + // // enabled: !GC.isMobile() + // // function onActiveFocusChanged() { + // // if (drawer.activeFocus && !drawer.isOpened) { + // // collapsed123.forceActiveFocus() + // // // collapsedButtonChevron.forceActiveFocus() + // // } + // // } + // // } + + // ColumnLayout { + // id: collapsed + + // anchors.left: parent.left + // anchors.right: parent.right + + // Component.onCompleted: { + // drawer.collapsedHeight = collapsed.implicitHeight + // } + + // DividerType { + // Layout.topMargin: 10 + // Layout.fillWidth: false + // Layout.preferredWidth: 20 + // Layout.preferredHeight: 2 + // Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + // } + + // RowLayout { + // Layout.topMargin: 14 + // Layout.leftMargin: 24 + // Layout.rightMargin: 24 + // Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + + // spacing: 0 + + // Connections { + // target: drawer + // function onEntered() { + // if (drawer.isCollapsed) { + // collapsedButtonChevron.backgroundColor = collapsedButtonChevron.hoveredColor + // collapsedButtonHeader.opacity = 0.8 + // } else { + // collapsedButtonHeader.opacity = 1 + // } + // } + + // function onExited() { + // if (drawer.isCollapsed) { + // collapsedButtonChevron.backgroundColor = collapsedButtonChevron.defaultColor + // collapsedButtonHeader.opacity = 1 + // } else { + // collapsedButtonHeader.opacity = 1 + // } + // } + + // function onPressed(pressed, entered) { + // if (drawer.isCollapsed) { + // collapsedButtonChevron.backgroundColor = pressed ? collapsedButtonChevron.pressedColor : entered ? collapsedButtonChevron.hoveredColor : collapsedButtonChevron.defaultColor + // collapsedButtonHeader.opacity = 0.7 + // } else { + // collapsedButtonHeader.opacity = 1 + // } + // } + // } + + // Header1TextType { + // id: collapsedButtonHeader + // Layout.maximumWidth: drawer.width - 48 - 18 - 12 + + // maximumLineCount: 2 + // elide: Qt.ElideRight + + // text: ServersModel.defaultServerName + // horizontalAlignment: Qt.AlignHCenter + + // Behavior on opacity { + // PropertyAnimation { duration: 200 } + // } + // } + + // ImageButtonType { + // id: collapsedButtonChevron + + // Layout.leftMargin: 8 + + // visible: drawer.isCollapsed + + // hoverEnabled: false + // image: "qrc:/images/controls/chevron-down.svg" + // imageColor: AmneziaStyle.color.white + + // icon.width: 18 + // icon.height: 18 + // backgroundRadius: 16 + // horizontalPadding: 4 + // topPadding: 4 + // bottomPadding: 3 + + // Keys.onEnterPressed: collapsedButtonChevron.clicked() + // Keys.onReturnPressed: collapsedButtonChevron.clicked() + // // Keys.onTabPressed: lastItemTabClicked() + + // focus: true + + // onClicked: { + // if (drawer.isCollapsed) { + // drawer.open() + // focusItem1.forceActiveFocus() + // } + // } + // } + // } + + // LabelTextType { + // id: collapsedServerMenuDescription + // Layout.bottomMargin: drawer.isCollapsed ? 44 : ServersModel.isDefaultServerFromApi ? 89 : 44 + // Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + // text: drawer.isCollapsed ? ServersModel.defaultServerDescriptionCollapsed : ServersModel.defaultServerDescriptionExpanded + // } + // } + + // // Connections { + // // target: drawer + // // enabled: !GC.isMobile() + // // function onIsCollapsedChanged() { + // // if (!drawer.isCollapsed) { + // // focusItem1.forceActiveFocus() + // // } + // // } + // // } + + // ColumnLayout { + // id: serversMenuHeader + + // anchors.top: collapsed.bottom + // anchors.right: parent.right + // anchors.left: parent.left + + // RowLayout { + // Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + // focus: false + // spacing: 8 + + // visible: !ServersModel.isDefaultServerFromApi + + // Item { + // id: focusItem1 + // KeyNavigation.tab: serversMenuContent /*containersDropDown*/ + // } + + // // DropDownType { + // // id: containersDropDown + + // // rootButtonImageColor: AmneziaStyle.color.black + // // rootButtonBackgroundColor: AmneziaStyle.color.white + // // rootButtonBackgroundHoveredColor: Qt.rgba(215, 216, 219, 0.8) + // // rootButtonBackgroundPressedColor: Qt.rgba(215, 216, 219, 0.65) + // // rootButtonHoveredBorderColor: AmneziaStyle.color.transparent + // // rootButtonDefaultBorderColor: AmneziaStyle.color.transparent + // // rootButtonTextTopMargin: 8 + // // rootButtonTextBottomMargin: 8 + + // // text: ServersModel.defaultServerDefaultContainerName + // // textColor: AmneziaStyle.color.black + // // headerText: qsTr("VPN protocol") + // // headerBackButtonImage: "qrc:/images/controls/arrow-left.svg" + + // // rootButtonClickedFunction: function() { + // // containersDropDown.open() + // // } + + // // drawerParent: root + // // KeyNavigation.tab: serversMenuContent + + // // listView: HomeContainersListView { + // // id: containersListView + // // rootWidth: root.width + // // // onVisibleChanged: { + // // // if (containersDropDown.visible && !GC.isMobile()) { + // // // focusItem1.forceActiveFocus() + // // // } + // // // } + + // // Connections { + // // target: ServersModel + + // // function onDefaultServerIndexChanged() { + // // updateContainersModelFilters() + // // } + // // } + + // // function updateContainersModelFilters() { + // // if (ServersModel.isDefaultServerHasWriteAccess()) { + // // proxyDefaultServerContainersModel.filters = ContainersModelFilters.getWriteAccessProtocolsListFilters() + // // } else { + // // proxyDefaultServerContainersModel.filters = ContainersModelFilters.getReadAccessProtocolsListFilters() + // // } + // // } + + // // model: SortFilterProxyModel { + // // id: proxyDefaultServerContainersModel + // // sourceModel: DefaultServerContainersModel + + // // sorters: [ + // // RoleSorter { roleName: "isInstalled"; sortOrder: Qt.DescendingOrder } + // // ] + // // } + + // // Component.onCompleted: updateContainersModelFilters() + // // } + // // } + + // } + + // Header2Type { + // Layout.fillWidth: true + // Layout.topMargin: 48 + // Layout.leftMargin: 16 + // Layout.rightMargin: 16 + + // headerText: qsTr("Servers") + // } + // } + + // ButtonGroup { + // id: serversRadioButtonGroup + // } + + // ListView { + // id: serversMenuContent + + // anchors.top: serversMenuHeader.bottom + // anchors.right: parent.right + // anchors.left: parent.left + // anchors.bottom: parent.bottom + // anchors.topMargin: 16 + + // model: ServersModel + // currentIndex: ServersModel.defaultIndex + + // ScrollBar.vertical: ScrollBar { + // id: scrollBar + // policy: serversMenuContent.height >= serversMenuContent.contentHeight ? ScrollBar.AlwaysOff : ScrollBar.AlwaysOn + // } + + + // activeFocusOnTab: true + // focus: true + + // property int focusItemIndex: 0 + // onActiveFocusChanged: { + // if (activeFocus) { + // serversMenuContent.focusItemIndex = 0 + // serversMenuContent.itemAtIndex(focusItemIndex).forceActiveFocus() + // } + // } + + // onFocusItemIndexChanged: { + // const focusedElement = serversMenuContent.itemAtIndex(focusItemIndex) + // if (focusedElement) { + // if (focusedElement.y + focusedElement.height > serversMenuContent.height) { + // serversMenuContent.contentY = focusedElement.y + focusedElement.height - serversMenuContent.height + // } else { + // serversMenuContent.contentY = 0 + // } + // } + // } + + // Keys.onUpPressed: scrollBar.decrease() + // Keys.onDownPressed: scrollBar.increase() + + // Connections { + // target: drawer + // enabled: !GC.isMobile() + // function onIsCollapsedChanged() { + // if (drawer.isCollapsed) { + // const item = serversMenuContent.itemAtIndex(serversMenuContent.focusItemIndex) + // if (item) { item.serverRadioButtonProperty.focus = false } + // } + // } + // } + + // Connections { + // target: ServersModel + // function onDefaultServerIndexChanged(serverIndex) { + // serversMenuContent.currentIndex = serverIndex + // } + // } + + // clip: true + + // delegate: Item { + // id: menuContentDelegate + + // property variant delegateData: model + // property VerticalRadioButton serverRadioButtonProperty: serverRadioButton + + // implicitWidth: serversMenuContent.width + // implicitHeight: serverRadioButtonContent.implicitHeight + + // onActiveFocusChanged: { + // if (activeFocus) { + // serverRadioButton.forceActiveFocus() + // } + // } + + // ColumnLayout { + // id: serverRadioButtonContent + + // anchors.fill: parent + // anchors.rightMargin: 16 + // anchors.leftMargin: 16 + + // spacing: 0 + + // RowLayout { + // Layout.fillWidth: true + // VerticalRadioButton { + // id: serverRadioButton + + // Layout.fillWidth: true + + // text: name + // descriptionText: serverDescription + + // checked: index === serversMenuContent.currentIndex + // checkable: !ConnectionController.isConnected + + // ButtonGroup.group: serversRadioButtonGroup + + // onClicked: { + // if (ConnectionController.isConnected) { + // PageController.showNotificationMessage(qsTr("Unable change server while there is an active connection")) + // return + // } + + // serversMenuContent.currentIndex = index + + // ServersModel.defaultIndex = index + // } + + // MouseArea { + // anchors.fill: serverRadioButton + // cursorShape: Qt.PointingHandCursor + // enabled: false + // } + + // Keys.onTabPressed: serverInfoButton.forceActiveFocus() + // Keys.onEnterPressed: serverRadioButton.clicked() + // Keys.onReturnPressed: serverRadioButton.clicked() + + // KeyNavigation.tab: serverInfoButton + // } + + // ImageButtonType { + // id: serverInfoButton + // image: "qrc:/images/controls/settings.svg" + // imageColor: AmneziaStyle.color.white + + // implicitWidth: 56 + // implicitHeight: 56 + + // z: 1 + + // Keys.onTabPressed: { + // if (serversMenuContent.focusItemIndex < serversMenuContent.count - 1) { + // serversMenuContent.focusItemIndex++ + // serversMenuContent.itemAtIndex(serversMenuContent.focusItemIndex).forceActiveFocus() + // } else { + // focusItem1.forceActiveFocus() + // serversMenuContent.contentY = 0 + // } + // } + // Keys.onEnterPressed: serverInfoButton.clicked() + // Keys.onReturnPressed: serverInfoButton.clicked() + + // onClicked: function() { + // ServersModel.processedIndex = index + // PageController.goToPage(PageEnum.PageSettingsServerInfo) + // drawer.close() + // } + // } + // } + + // DividerType { + // Layout.fillWidth: true + // Layout.leftMargin: 0 + // Layout.rightMargin: 0 + // } + // } + // } + // } + + // } } } diff --git a/client/ui/qml/Pages2/PageProtocolAwgSettings.qml b/client/ui/qml/Pages2/PageProtocolAwgSettings.qml index ec4aa010..5499d79b 100644 --- a/client/ui/qml/Pages2/PageProtocolAwgSettings.qml +++ b/client/ui/qml/Pages2/PageProtocolAwgSettings.qml @@ -16,8 +16,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: listview.currentItem.portTextField.textField - Item { id: focusItem onFocusChanged: { diff --git a/client/ui/qml/Pages2/PageProtocolCloakSettings.qml b/client/ui/qml/Pages2/PageProtocolCloakSettings.qml index 5ef5771e..f32b803e 100644 --- a/client/ui/qml/Pages2/PageProtocolCloakSettings.qml +++ b/client/ui/qml/Pages2/PageProtocolCloakSettings.qml @@ -15,12 +15,7 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: listview.currentItem.trafficFromField.textField - - Item { - id: focusItem - KeyNavigation.tab: backButton - } + // defaultActiveFocusItem: listview.currentItem.trafficFromField.textField ColumnLayout { id: backButtonLayout @@ -183,7 +178,6 @@ PageType { Layout.bottomMargin: 24 text: qsTr("Save") - Keys.onTabPressed: lastItemTabClicked(focusItem) clickedFunc: function() { forceActiveFocus() diff --git a/client/ui/qml/Pages2/PageProtocolOpenVpnSettings.qml b/client/ui/qml/Pages2/PageProtocolOpenVpnSettings.qml index d2330c27..6fef4939 100644 --- a/client/ui/qml/Pages2/PageProtocolOpenVpnSettings.qml +++ b/client/ui/qml/Pages2/PageProtocolOpenVpnSettings.qml @@ -17,7 +17,7 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: listview.currentItem.vpnAddressSubnetTextField.textField + // defaultActiveFocusItem: listview.currentItem.vpnAddressSubnetTextField.textField Item { id: focusItem diff --git a/client/ui/qml/Pages2/PageProtocolRaw.qml b/client/ui/qml/Pages2/PageProtocolRaw.qml index 1acc5b54..9feeb458 100644 --- a/client/ui/qml/Pages2/PageProtocolRaw.qml +++ b/client/ui/qml/Pages2/PageProtocolRaw.qml @@ -19,13 +19,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: focusItem - - Item { - id: focusItem - KeyNavigation.tab: backButton - } - ColumnLayout { id: header @@ -122,7 +115,7 @@ PageType { onClosed: { if (!GC.isMobile()) { - defaultActiveFocusItem.forceActiveFocus() + // defaultActiveFocusItem.forceActiveFocus() } } @@ -226,7 +219,6 @@ PageType { text: qsTr("Remove ") + ContainersModel.getProcessedContainerName() textColor: AmneziaStyle.color.red - Keys.onTabPressed: lastItemTabClicked(focusItem) clickedFunction: function() { var headerText = qsTr("Remove %1 from server?").arg(ContainersModel.getProcessedContainerName()) var descriptionText = qsTr("All users with whom you shared a connection with will no longer be able to connect to it.") @@ -239,7 +231,7 @@ PageType { } var noButtonFunction = function() { if (!GC.isMobile()) { - focusItem.forceActiveFocus() + // focusItem.forceActiveFocus() } } diff --git a/client/ui/qml/Pages2/PageProtocolShadowSocksSettings.qml b/client/ui/qml/Pages2/PageProtocolShadowSocksSettings.qml index 2cf18544..1a656312 100644 --- a/client/ui/qml/Pages2/PageProtocolShadowSocksSettings.qml +++ b/client/ui/qml/Pages2/PageProtocolShadowSocksSettings.qml @@ -15,9 +15,9 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: listview.currentItem.focusItemId.enabled ? - listview.currentItem.focusItemId.textField : - focusItem + // defaultActiveFocusItem: listview.currentItem.focusItemId.enabled ? + // listview.currentItem.focusItemId.textField : + // focusItem Item { id: focusItem diff --git a/client/ui/qml/Pages2/PageProtocolWireGuardSettings.qml b/client/ui/qml/Pages2/PageProtocolWireGuardSettings.qml index 4e6a851e..23a35c59 100644 --- a/client/ui/qml/Pages2/PageProtocolWireGuardSettings.qml +++ b/client/ui/qml/Pages2/PageProtocolWireGuardSettings.qml @@ -15,8 +15,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: listview - Item { id: focusItem KeyNavigation.tab: backButton diff --git a/client/ui/qml/Pages2/PageProtocolXraySettings.qml b/client/ui/qml/Pages2/PageProtocolXraySettings.qml index 6a8094d7..52baea84 100644 --- a/client/ui/qml/Pages2/PageProtocolXraySettings.qml +++ b/client/ui/qml/Pages2/PageProtocolXraySettings.qml @@ -16,8 +16,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: listview - Item { id: focusItem KeyNavigation.tab: backButton diff --git a/client/ui/qml/Pages2/PageServiceDnsSettings.qml b/client/ui/qml/Pages2/PageServiceDnsSettings.qml index 7d9f2df4..2810de1c 100644 --- a/client/ui/qml/Pages2/PageServiceDnsSettings.qml +++ b/client/ui/qml/Pages2/PageServiceDnsSettings.qml @@ -16,8 +16,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: focusItem - Item { id: focusItem KeyNavigation.tab: backButton diff --git a/client/ui/qml/Pages2/PageServiceSftpSettings.qml b/client/ui/qml/Pages2/PageServiceSftpSettings.qml index 9b5425db..5e46865f 100644 --- a/client/ui/qml/Pages2/PageServiceSftpSettings.qml +++ b/client/ui/qml/Pages2/PageServiceSftpSettings.qml @@ -16,8 +16,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: focusItem - Connections { target: InstallController diff --git a/client/ui/qml/Pages2/PageServiceSocksProxySettings.qml b/client/ui/qml/Pages2/PageServiceSocksProxySettings.qml index 95343f63..97462d20 100644 --- a/client/ui/qml/Pages2/PageServiceSocksProxySettings.qml +++ b/client/ui/qml/Pages2/PageServiceSocksProxySettings.qml @@ -16,8 +16,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: listview - Connections { target: InstallController diff --git a/client/ui/qml/Pages2/PageServiceTorWebsiteSettings.qml b/client/ui/qml/Pages2/PageServiceTorWebsiteSettings.qml index de1fefb8..61a7535b 100644 --- a/client/ui/qml/Pages2/PageServiceTorWebsiteSettings.qml +++ b/client/ui/qml/Pages2/PageServiceTorWebsiteSettings.qml @@ -17,8 +17,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: focusItem - Connections { target: InstallController diff --git a/client/ui/qml/Pages2/PageSettings.qml b/client/ui/qml/Pages2/PageSettings.qml index 76b0abdc..17dc12b5 100644 --- a/client/ui/qml/Pages2/PageSettings.qml +++ b/client/ui/qml/Pages2/PageSettings.qml @@ -13,8 +13,6 @@ import "../Config" PageType { id: root - defaultActiveFocusItem: account - FlickableType { id: fl anchors.top: parent.top diff --git a/client/ui/qml/Pages2/PageSettingsAbout.qml b/client/ui/qml/Pages2/PageSettingsAbout.qml index 2f0ef841..3e4459c5 100644 --- a/client/ui/qml/Pages2/PageSettingsAbout.qml +++ b/client/ui/qml/Pages2/PageSettingsAbout.qml @@ -14,8 +14,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: backButton - BackButtonType { id: backButton diff --git a/client/ui/qml/Pages2/PageSettingsAppSplitTunneling.qml b/client/ui/qml/Pages2/PageSettingsAppSplitTunneling.qml index 2a650d6b..6fe3211e 100644 --- a/client/ui/qml/Pages2/PageSettingsAppSplitTunneling.qml +++ b/client/ui/qml/Pages2/PageSettingsAppSplitTunneling.qml @@ -21,8 +21,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: focusItem - property bool pageEnabled Component.onCompleted: { @@ -66,11 +64,6 @@ PageType { } } - Item { - id: focusItem - KeyNavigation.tab: backButton - } - ColumnLayout { id: header @@ -82,7 +75,6 @@ PageType { BackButtonType { id: backButton - KeyNavigation.tab: switcher } RowLayout { @@ -103,10 +95,6 @@ PageType { enabled: root.pageEnabled - KeyNavigation.tab: selector.enabled ? - selector : - searchField.textField - checked: AppSplitTunnelingModel.isTunnelingEnabled onToggled: { AppSplitTunnelingModel.toggleSplitTunneling(checked) @@ -130,8 +118,6 @@ PageType { enabled: Qt.platform.os === "android" && root.pageEnabled - KeyNavigation.tab: searchField.textField - listView: ListViewWithRadioButtonType { rootWidth: root.width @@ -267,7 +253,6 @@ PageType { textFieldPlaceholderText: qsTr("application name") buttonImageSource: "qrc:/images/controls/plus.svg" - Keys.onTabPressed: lastItemTabClicked(focusItem) rightButtonClickedOnEnter: true clickedFunc: function() { diff --git a/client/ui/qml/Pages2/PageSettingsApplication.qml b/client/ui/qml/Pages2/PageSettingsApplication.qml index 71f95f1e..ba9a53d0 100644 --- a/client/ui/qml/Pages2/PageSettingsApplication.qml +++ b/client/ui/qml/Pages2/PageSettingsApplication.qml @@ -14,7 +14,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: backButton BackButtonType { id: backButton @@ -231,12 +230,12 @@ PageType { } if (!GC.isMobile()) { - root.defaultActiveFocusItem.forceActiveFocus() + // root.defaultActiveFocusItem.forceActiveFocus() } } var noButtonFunction = function() { if (!GC.isMobile()) { - root.defaultActiveFocusItem.forceActiveFocus() + // root.defaultActiveFocusItem.forceActiveFocus() } } diff --git a/client/ui/qml/Pages2/PageSettingsBackup.qml b/client/ui/qml/Pages2/PageSettingsBackup.qml index 522672ee..18ba8716 100644 --- a/client/ui/qml/Pages2/PageSettingsBackup.qml +++ b/client/ui/qml/Pages2/PageSettingsBackup.qml @@ -17,8 +17,6 @@ import "../Controls2/TextTypes" PageType { id: root - defaultActiveFocusItem: backButton - Connections { target: SettingsController diff --git a/client/ui/qml/Pages2/PageSettingsConnection.qml b/client/ui/qml/Pages2/PageSettingsConnection.qml index 3ad89653..415dee28 100644 --- a/client/ui/qml/Pages2/PageSettingsConnection.qml +++ b/client/ui/qml/Pages2/PageSettingsConnection.qml @@ -11,8 +11,6 @@ import "../Config" PageType { id: root - defaultActiveFocusItem: backButton - property bool isAppSplitTinnelingEnabled: Qt.platform.os === "windows" || Qt.platform.os === "android" BackButtonType { diff --git a/client/ui/qml/Pages2/PageSettingsDns.qml b/client/ui/qml/Pages2/PageSettingsDns.qml index a73de327..527200f7 100644 --- a/client/ui/qml/Pages2/PageSettingsDns.qml +++ b/client/ui/qml/Pages2/PageSettingsDns.qml @@ -14,8 +14,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: primaryDns.textField - Item { id: focusItem KeyNavigation.tab: backButton @@ -29,7 +27,7 @@ PageType { anchors.right: parent.right anchors.topMargin: 20 - KeyNavigation.tab: root.defaultActiveFocusItem + // KeyNavigation.tab: root.defaultActiveFocusItem } FlickableType { @@ -124,12 +122,12 @@ PageType { PageController.showNotificationMessage(qsTr("Settings have been reset")) if (!GC.isMobile()) { - defaultActiveFocusItem.forceActiveFocus() + // defaultActiveFocusItem.forceActiveFocus() } } var noButtonFunction = function() { if (!GC.isMobile()) { - defaultActiveFocusItem.forceActiveFocus() + // defaultActiveFocusItem.forceActiveFocus() } } diff --git a/client/ui/qml/Pages2/PageSettingsLogging.qml b/client/ui/qml/Pages2/PageSettingsLogging.qml index fe4f4213..eaba68d9 100644 --- a/client/ui/qml/Pages2/PageSettingsLogging.qml +++ b/client/ui/qml/Pages2/PageSettingsLogging.qml @@ -16,8 +16,6 @@ import "../Controls2/TextTypes" PageType { id: root - defaultActiveFocusItem: backButton - Connections { target: SettingsController diff --git a/client/ui/qml/Pages2/PageSettingsServerInfo.qml b/client/ui/qml/Pages2/PageSettingsServerInfo.qml index cf649ae0..d22b7f4d 100644 --- a/client/ui/qml/Pages2/PageSettingsServerInfo.qml +++ b/client/ui/qml/Pages2/PageSettingsServerInfo.qml @@ -19,8 +19,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: focusItem - Connections { target: PageController diff --git a/client/ui/qml/Pages2/PageSettingsServerProtocol.qml b/client/ui/qml/Pages2/PageSettingsServerProtocol.qml index e06a637e..1beb25b6 100644 --- a/client/ui/qml/Pages2/PageSettingsServerProtocol.qml +++ b/client/ui/qml/Pages2/PageSettingsServerProtocol.qml @@ -21,8 +21,6 @@ PageType { property bool isClearCacheVisible: ServersModel.isProcessedServerHasWriteAccess() && !ContainersModel.isServiceContainer(ContainersModel.getProcessedContainerIndex()) - defaultActiveFocusItem: focusItem - Item { id: focusItem KeyNavigation.tab: backButton diff --git a/client/ui/qml/Pages2/PageSettingsServersList.qml b/client/ui/qml/Pages2/PageSettingsServersList.qml index dde3e89e..a0569228 100644 --- a/client/ui/qml/Pages2/PageSettingsServersList.qml +++ b/client/ui/qml/Pages2/PageSettingsServersList.qml @@ -17,8 +17,6 @@ import "../Components" PageType { id: root - defaultActiveFocusItem: backButton - ColumnLayout { id: header diff --git a/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml b/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml index 60821ebc..6557eafe 100644 --- a/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml +++ b/client/ui/qml/Pages2/PageSettingsSplitTunneling.qml @@ -23,8 +23,6 @@ PageType { property var isServerFromApi: ServersModel.getDefaultServerData("isServerFromApi") - defaultActiveFocusItem: searchField.textField - Item { id: focusItem KeyNavigation.tab: backButton @@ -360,11 +358,11 @@ PageType { anchors.fill: parent expandedHeight: parent.height * 0.4375 - onClosed: { - if (root.defaultActiveFocusItem && !GC.isMobile()) { - root.defaultActiveFocusItem.forceActiveFocus() - } - } + // onClosed: { + // if (root.defaultActiveFocusItem && !GC.isMobile()) { + // root.defaultActiveFocusItem.forceActiveFocus() + // } + // } expandedContent: ColumnLayout { id: moreActionsDrawerContent diff --git a/client/ui/qml/Pages2/PageSetupWizardConfigSource.qml b/client/ui/qml/Pages2/PageSetupWizardConfigSource.qml index b7ba1c1c..4f2a5331 100644 --- a/client/ui/qml/Pages2/PageSetupWizardConfigSource.qml +++ b/client/ui/qml/Pages2/PageSetupWizardConfigSource.qml @@ -12,7 +12,6 @@ import "../Config" PageType { id: root - defaultActiveFocusItem: backButton Connections { target: ImportController diff --git a/client/ui/qml/Pages2/PageSetupWizardCredentials.qml b/client/ui/qml/Pages2/PageSetupWizardCredentials.qml index ea522363..1ea0f7e0 100644 --- a/client/ui/qml/Pages2/PageSetupWizardCredentials.qml +++ b/client/ui/qml/Pages2/PageSetupWizardCredentials.qml @@ -12,13 +12,6 @@ import "../Controls2/TextTypes" PageType { id: root - defaultActiveFocusItem: hostname.textField - - Item { - id: focusItem - KeyNavigation.tab: backButton - } - BackButtonType { id: backButton @@ -26,8 +19,6 @@ PageType { anchors.left: parent.left anchors.right: parent.right anchors.topMargin: 20 - - KeyNavigation.tab: hostname.textField } FlickableType { @@ -67,7 +58,7 @@ PageType { textField.text = textField.text.replace(/^\s+|\s+$/g, '') } - KeyNavigation.tab: username.textField + // KeyNavigation.stab: username.textField } TextFieldWithHeaderType { @@ -81,7 +72,7 @@ PageType { textField.text = textField.text.replace(/^\s+|\s+$/g, '') } - KeyNavigation.tab: secretData.textField + // KeyNavigation.tab: secretData.textField } TextFieldWithHeaderType { @@ -103,7 +94,7 @@ PageType { textField.text = textField.text.replace(/^\s+|\s+$/g, '') } - KeyNavigation.tab: continueButton + // KeyNavigation.tab: continueButton } BasicButtonType { @@ -114,7 +105,7 @@ PageType { text: qsTr("Continue") - Keys.onTabPressed: lastItemTabClicked(focusItem) + // Keys.onTabPressed: lastItemTabClicked() clickedFunc: function() { forceActiveFocus() diff --git a/client/ui/qml/Pages2/PageSetupWizardEasy.qml b/client/ui/qml/Pages2/PageSetupWizardEasy.qml index 0cf4c88c..f5067655 100644 --- a/client/ui/qml/Pages2/PageSetupWizardEasy.qml +++ b/client/ui/qml/Pages2/PageSetupWizardEasy.qml @@ -17,7 +17,6 @@ PageType { id: root property bool isEasySetup: true - defaultActiveFocusItem: focusItem SortFilterProxyModel { id: proxyContainersModel @@ -34,14 +33,6 @@ PageType { } } - Item { - id: focusItem - implicitWidth: 1 - implicitHeight: 54 - - KeyNavigation.tab: backButton - } - BackButtonType { id: backButton @@ -49,8 +40,6 @@ PageType { anchors.left: parent.left anchors.right: parent.right anchors.topMargin: 20 - - KeyNavigation.tab: continueButton } FlickableType { @@ -163,7 +152,6 @@ PageType { implicitWidth: parent.width text: qsTr("Continue") - KeyNavigation.tab: setupLaterButton parentFlickable: fl clickedFunc: function() { @@ -193,7 +181,6 @@ PageType { textColor: AmneziaStyle.color.white borderWidth: 1 - Keys.onTabPressed: lastItemTabClicked(focusItem) parentFlickable: fl visible: { diff --git a/client/ui/qml/Pages2/PageSetupWizardInstalling.qml b/client/ui/qml/Pages2/PageSetupWizardInstalling.qml index b94e40f1..ed3bc405 100644 --- a/client/ui/qml/Pages2/PageSetupWizardInstalling.qml +++ b/client/ui/qml/Pages2/PageSetupWizardInstalling.qml @@ -13,7 +13,6 @@ import "../Config" PageType { id: root - Component.onCompleted: PageController.disableTabBar(true) Component.onDestruction: PageController.disableTabBar(false) diff --git a/client/ui/qml/Pages2/PageSetupWizardProtocolSettings.qml b/client/ui/qml/Pages2/PageSetupWizardProtocolSettings.qml index d3e4aa4a..fceef870 100644 --- a/client/ui/qml/Pages2/PageSetupWizardProtocolSettings.qml +++ b/client/ui/qml/Pages2/PageSetupWizardProtocolSettings.qml @@ -113,7 +113,7 @@ PageType { parent: root onClosed: { if (!GC.isMobile()) { - defaultActiveFocusItem.forceActiveFocus() + // defaultActiveFocusItem.forceActiveFocus() } } @@ -288,10 +288,10 @@ PageType { transportProtoSelector.visible = protocolSelectorVisible transportProtoHeader.visible = protocolSelectorVisible - if (port.visible && port.enabled) - defaultActiveFocusItem = port.textField - else - defaultActiveFocusItem = focusItem + // if (port.visible && port.enabled) + // defaultActiveFocusItem = port.textField + // else + // defaultActiveFocusItem = focusItem } } } diff --git a/client/ui/qml/Pages2/PageSetupWizardProtocols.qml b/client/ui/qml/Pages2/PageSetupWizardProtocols.qml index 59da549c..669a4bbd 100644 --- a/client/ui/qml/Pages2/PageSetupWizardProtocols.qml +++ b/client/ui/qml/Pages2/PageSetupWizardProtocols.qml @@ -14,13 +14,6 @@ import "../Config" PageType { id: root - defaultActiveFocusItem: focusItem - - Item { - id: focusItem - KeyNavigation.tab: backButton - } - SortFilterProxyModel { id: proxyContainersModel sourceModel: ContainersModel diff --git a/client/ui/qml/Pages2/PageSetupWizardStart.qml b/client/ui/qml/Pages2/PageSetupWizardStart.qml index e0b0da29..95c91a33 100644 --- a/client/ui/qml/Pages2/PageSetupWizardStart.qml +++ b/client/ui/qml/Pages2/PageSetupWizardStart.qml @@ -13,11 +13,10 @@ import "../Components" PageType { id: root + objectName: "PageStart" property bool isControlsDisabled: false - defaultActiveFocusItem: startButton - Connections { target: PageController @@ -178,12 +177,13 @@ PageType { ConnectionTypeSelectionDrawer { id: connectionTypeSelection - parentPage: root - onClosed: { + // onClosed: { // PageController.forceTabBarActiveFocus() // root.defaultActiveFocusItem.forceActiveFocus() - PageController.forceStackActiveFocus() - } + // PageController.forceStackActiveFocus() + + // startButton2.forceActiveFocus() + // } } } diff --git a/client/ui/qml/Pages2/PageSetupWizardTextKey.qml b/client/ui/qml/Pages2/PageSetupWizardTextKey.qml index 5c9da47a..0307efc8 100644 --- a/client/ui/qml/Pages2/PageSetupWizardTextKey.qml +++ b/client/ui/qml/Pages2/PageSetupWizardTextKey.qml @@ -12,14 +12,6 @@ import "../Config" PageType { id: root - defaultActiveFocusItem: textKey.textField - - - Item { - id: focusItem - KeyNavigation.tab: backButton - } - FlickableType { id: fl anchors.top: parent.top @@ -38,7 +30,6 @@ PageType { BackButtonType { id: backButton Layout.topMargin: 20 - KeyNavigation.tab: textKey.textField } HeaderType { @@ -66,8 +57,6 @@ PageType { textField.text = "" textField.paste() } - - KeyNavigation.tab: continueButton } } } @@ -83,7 +72,6 @@ PageType { anchors.bottomMargin: 32 text: qsTr("Continue") - Keys.onTabPressed: lastItemTabClicked(focusItem) clickedFunc: function() { if (ImportController.extractConfigFromData(textKey.textFieldText)) { diff --git a/client/ui/qml/Pages2/PageSetupWizardViewConfig.qml b/client/ui/qml/Pages2/PageSetupWizardViewConfig.qml index 54f64423..3b7e266c 100644 --- a/client/ui/qml/Pages2/PageSetupWizardViewConfig.qml +++ b/client/ui/qml/Pages2/PageSetupWizardViewConfig.qml @@ -16,13 +16,6 @@ PageType { property bool showContent: false - defaultActiveFocusItem: focusItem - - Item { - id: focusItem - KeyNavigation.tab: backButton - } - BackButtonType { id: backButton @@ -30,8 +23,6 @@ PageType { anchors.left: parent.left anchors.right: parent.right anchors.topMargin: 20 - - KeyNavigation.tab: showContentButton } Connections { @@ -192,8 +183,6 @@ PageType { anchors.rightMargin: 16 anchors.leftMargin: 16 - Keys.onTabPressed: lastItemTabClicked(focusItem) - BasicButtonType { id: connectButton Layout.fillWidth: true diff --git a/client/ui/qml/Pages2/PageShare.qml b/client/ui/qml/Pages2/PageShare.qml index 218265f4..fa0c3008 100644 --- a/client/ui/qml/Pages2/PageShare.qml +++ b/client/ui/qml/Pages2/PageShare.qml @@ -18,8 +18,6 @@ import "../Config" PageType { id: root - defaultActiveFocusItem: clientNameTextField.textField - enum ConfigType { AmneziaConnection, OpenVpn, @@ -288,7 +286,7 @@ PageType { implicitWidth: (root.width - 32) / 2 text: qsTr("Connection") - KeyNavigation.tab: usersRadioButton + // KeyNavigation.tab: usersRadioButton onClicked: { accessTypeSelector.currentIndex = 0 @@ -305,7 +303,7 @@ PageType { implicitWidth: (root.width - 32) / 2 text: qsTr("Users") - KeyNavigation.tab: accessTypeSelector.currentIndex === 0 ? clientNameTextField.textField : serverSelector + // KeyNavigation.tab: accessTypeSelector.currentIndex === 0 ? clientNameTextField.textField : serverSelector onClicked: { accessTypeSelector.currentIndex = 1 @@ -343,7 +341,7 @@ PageType { checkEmptyText: true - KeyNavigation.tab: serverSelector + // KeyNavigation.tab: serverSelector } @@ -409,7 +407,7 @@ PageType { } } - KeyNavigation.tab: protocolSelector + // KeyNavigation.tab: protocolSelector } DropDownType { @@ -509,11 +507,11 @@ PageType { } } - KeyNavigation.tab: accessTypeSelector.currentIndex === 0 ? - exportTypeSelector : - isSearchBarVisible ? - searchTextField.textField : - usersHeader.actionButton + // KeyNavigation.tab: accessTypeSelector.currentIndex === 0 ? + // exportTypeSelector : + // isSearchBarVisible ? + // searchTextField.textField : + // usersHeader.actionButton } DropDownType { diff --git a/client/ui/qml/Pages2/PageShareFullAccess.qml b/client/ui/qml/Pages2/PageShareFullAccess.qml index f22132c1..814213e6 100644 --- a/client/ui/qml/Pages2/PageShareFullAccess.qml +++ b/client/ui/qml/Pages2/PageShareFullAccess.qml @@ -18,13 +18,6 @@ import "../Config" PageType { id: root - defaultActiveFocusItem: focusItem - - Item { - id: focusItem - KeyNavigation.tab: backButton - } - BackButtonType { id: backButton @@ -32,8 +25,6 @@ PageType { anchors.left: parent.left anchors.right: parent.right anchors.topMargin: 20 - - KeyNavigation.tab: serverSelector } FlickableType { @@ -85,8 +76,6 @@ PageType { descriptionText: qsTr("Server") headerText: qsTr("Server") - KeyNavigation.tab: shareButton - listView: ListViewWithRadioButtonType { id: serverSelectorListView @@ -137,8 +126,6 @@ PageType { text: qsTr("Share") imageSource: "qrc:/images/controls/share-2.svg" - Keys.onTabPressed: lastItemTabClicked(focusItem) - clickedFunc: function() { shareConnectionDrawer.headerText = qsTr("Connection to ") + serverSelector.text shareConnectionDrawer.configContentHeaderText = qsTr("File with connection settings to ") + serverSelector.text diff --git a/client/ui/qml/Pages2/PageStart.qml b/client/ui/qml/Pages2/PageStart.qml index bc198eda..92604b9f 100644 --- a/client/ui/qml/Pages2/PageStart.qml +++ b/client/ui/qml/Pages2/PageStart.qml @@ -15,8 +15,6 @@ import "../Components" FocusScope { id: root - // defaultActiveFocusItem: homeTabButton - property bool isControlsDisabled: false property bool isTabBarDisabled: false @@ -92,7 +90,6 @@ FocusScope { } function onForceStackActiveFocus() { - console.log("onForceStackActiveFocus") homeTabButton.focus = true tabBarStackView.forceActiveFocus() } @@ -176,17 +173,19 @@ FocusScope { enabled: !root.isControlsDisabled - onActiveFocusChanged: { - // console.log("tabBarStackView activeFocusChanged", activeFocus) - } + // onActiveFocusChanged: { + // if (currentItem) { + // currentItem.forceActiveFocus() + // } + // } // KeyNavigation.tab: homeTabButton - Keys.onTabPressed: tabBarStackView.currentItem.lastItemTabClicked() - onCurrentItemChanged: { - if (currentItem) { - currentItem.forceActiveFocus() - } - } + // Keys.onTabPressed: tabBarStackView.currentItem.lastItemTabClicked() + // onCurrentItemChanged: { + // if (currentItem) { + // currentItem.forceActiveFocus() + // } + // } function goToTabBarPage(page) { connectionTypeSelection.close() @@ -208,10 +207,6 @@ FocusScope { property int previousIndex: 0 - onActiveFocusChanged: { - console.log("tabBar activeFocusChanged", activeFocus) - } - anchors.right: parent.right anchors.left: parent.left anchors.bottom: parent.bottom diff --git a/client/ui/qml/main2.qml b/client/ui/qml/main2.qml index 0f3443ab..77bfd6bb 100644 --- a/client/ui/qml/main2.qml +++ b/client/ui/qml/main2.qml @@ -11,7 +11,7 @@ import "Config" import "Controls2" import "Components" -Window { +Window { id: root objectName: "mainWindow" visible: true