From b611685653776e936ec586e82cdc6e0a38232fd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Fri, 2 Jun 2023 14:56:31 -0400 Subject: [PATCH] settingsmaterialtextedit: fix focus changes Change-Id: I289b610e43317470d061e7ecd6338bfa805c5ce7 GitLab: #1171 --- src/app/commoncomponents/ModalTextEdit.qml | 2 +- .../components/SettingsMaterialTextEdit.qml | 16 ++++- .../qml/src/tst_SettingsMaterialTextEdit.qml | 61 +++++++++++++++++++ 3 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 tests/qml/src/tst_SettingsMaterialTextEdit.qml diff --git a/src/app/commoncomponents/ModalTextEdit.qml b/src/app/commoncomponents/ModalTextEdit.qml index 105b16855..94de2686c 100644 --- a/src/app/commoncomponents/ModalTextEdit.qml +++ b/src/app/commoncomponents/ModalTextEdit.qml @@ -75,7 +75,7 @@ Loader { // Needed to give proper focus to loaded item onFocusChanged: { - if (root.focus && root.isPersistent) { + if (item && root.focus && root.isPersistent) { item.forceActiveFocus(); } isEditing = !isEditing; diff --git a/src/app/settingsview/components/SettingsMaterialTextEdit.qml b/src/app/settingsview/components/SettingsMaterialTextEdit.qml index 67064b78d..1f638607a 100644 --- a/src/app/settingsview/components/SettingsMaterialTextEdit.qml +++ b/src/app/settingsview/components/SettingsMaterialTextEdit.qml @@ -63,6 +63,7 @@ RowLayout { } visible: !root.isPassword + focus: visible isSettings: true Layout.alignment: Qt.AlignCenter @@ -73,7 +74,7 @@ RowLayout { onAccepted: { root.dynamicText = dynamicText; - editFinished(); + root.editFinished(); } editMode: false @@ -82,7 +83,7 @@ RowLayout { onActiveFocusChanged: { if (!activeFocus) { root.dynamicText = dynamicText; - editFinished(); + root.editFinished(); modalTextEdit.editMode = false; } else { modalTextEdit.editMode = true; @@ -94,6 +95,7 @@ RowLayout { id: passwordTextEdit visible: root.isPassword + focus: visible isSettings: true Layout.alignment: Qt.AlignCenter @@ -103,8 +105,16 @@ RowLayout { onAccepted: { root.dynamicText = dynamicText; - editFinished(); + root.editFinished(); echoMode = TextInput.Password; } + + onActiveFocusChanged: { + if (!activeFocus) { + root.dynamicText = dynamicText; + root.editFinished(); + echoMode = TextInput.Password; + } + } } } diff --git a/tests/qml/src/tst_SettingsMaterialTextEdit.qml b/tests/qml/src/tst_SettingsMaterialTextEdit.qml new file mode 100644 index 000000000..1200e61c0 --- /dev/null +++ b/tests/qml/src/tst_SettingsMaterialTextEdit.qml @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2023 Savoir-faire Linux Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +import QtTest + +import "../../../src/app/" +import "../../../src/app/settingsview/components" + +ColumnLayout { + id: root + + spacing: 0 + width: 300 + height: 300 + + Item { + id: dummy + } + + SettingsMaterialTextEdit { + id: uut + + property bool focusLeft: false + isPassword: true + + TestCase { + name: "Test password un-focus" + when: windowShown + + function test_unfocusPassword() { + // Open the recorder and take a picture + uut.forceActiveFocus() + dummy.forceActiveFocus() + compare(uut.focusLeft, true) + } + } + + onEditFinished: focusLeft = true + + Layout.fillWidth: true + Layout.fillHeight: true + } +} -- GitLab