From d9d4d1829af35e8d01ca812825b0d413904abca1 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 8 Nov 2022 13:02:06 +0200 Subject: [PATCH] QmlDesigner: Fix material name editing issues Material name field in material browser now ensures that the start of the string is visible when editing is not focused. Any click outside the name field will take the focus away from the field, and name field state is properly updated when focus goes away for any reason. Trying to set same name as before is ignored instead of changing the name to 1. Fixes: QDS-8185 Change-Id: I723e3ae312e3e2c4ce8a95a3b05effcee2bae328 Reviewed-by: Mahmoud Badri --- .../materialBrowserQmlSource/MaterialBrowser.qml | 11 +++++++++++ .../materialBrowserQmlSource/MaterialItem.qml | 15 ++++++++++++--- .../materialeditor/materialeditorview.cpp | 4 ++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml b/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml index 9edc5019769..9a9cb26f791 100644 --- a/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml +++ b/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml @@ -35,6 +35,17 @@ Item { searchBox.clear(); } + MouseArea { + id: focusGrabber + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton + onPressed: (mouse) => { + forceActiveFocus() // Steal focus from name edit + mouse.accepted = false + } + z: 1 + } + MouseArea { id: rootMouseArea diff --git a/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialItem.qml b/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialItem.qml index 71ac8911235..6eaf0351d2f 100644 --- a/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialItem.qml +++ b/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialItem.qml @@ -23,6 +23,7 @@ Rectangle { matName.readOnly = false matName.selectAll() matName.forceActiveFocus() + matName.ensureVisible(matName.text.length) nameMouseArea.enabled = false } @@ -31,10 +32,8 @@ Rectangle { if (matName.readOnly) return; - matName.readOnly = true - nameMouseArea.enabled = true - materialBrowserModel.renameMaterial(index, matName.text); + mouseArea.forceActiveFocus() } border.width: materialBrowserModel.selectedIndex === index ? 1 : 0 @@ -102,6 +101,16 @@ Rectangle { onEditingFinished: root.commitRename() + onActiveFocusChanged: { + if (!activeFocus) { + matName.readOnly = true + nameMouseArea.enabled = true + ensureVisible(0) + } + } + + Component.onCompleted: ensureVisible(0) + MouseArea { id: nameMouseArea diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp index 39d036f6772..58bb81434fb 100644 --- a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp +++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp @@ -998,6 +998,10 @@ void MaterialEditorView::renameMaterial(ModelNode &material, const QString &newN { QTC_ASSERT(material.isValid(), return); + QVariant objName = material.variantProperty("objectName").value(); + if (objName.isValid() && objName.toString() == newName) + return; + executeInTransaction("MaterialEditorView:renameMaterial", [&] { material.setIdWithRefactoring(model()->generateIdFromName(newName, "material"));