QmlDesigner: Fix targetTexture getting invalidated after menu open

In some situation the targetTexture gets invalidated after the context
menu opens. This is likely related to texture model changing the
selection, but the exact cause is not known. Worked around the issue
by already storing the texture internal id at menu open.

Fixes: QDS-13461
Change-Id: Ib0e29a59b22ab9ccf244de3dcd4e7d2d1ee0fd7b
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Miikka Heikkinen
2024-09-05 16:22:36 +03:00
parent 21d8df14d4
commit 52c7d2b0f0

View File

@@ -10,16 +10,17 @@ import MaterialBrowserBackend
StudioControls.Menu { StudioControls.Menu {
id: root id: root
property var targetTexture: null property int textureInternalId: -1
property int copiedTextureInternalId: -1
property var materialBrowserTexturesModel: MaterialBrowserBackend.materialBrowserTexturesModel property var materialBrowserTexturesModel: MaterialBrowserBackend.materialBrowserTexturesModel
function popupMenu(targetTexture = null) function popupMenu(targetTexture = null)
{ {
this.targetTexture = targetTexture root.textureInternalId = targetTexture ? targetTexture.textureInternalId : -1
materialBrowserTexturesModel.updateSceneEnvState() materialBrowserTexturesModel.updateSceneEnvState()
materialBrowserTexturesModel.updateModelSelectionState() materialBrowserTexturesModel.updateModelSelectionState()
popup() popup()
} }
@@ -27,33 +28,33 @@ StudioControls.Menu {
StudioControls.MenuItem { StudioControls.MenuItem {
text: qsTr("Apply to selected model") text: qsTr("Apply to selected model")
enabled: root.targetTexture && materialBrowserTexturesModel.hasSingleModelSelection enabled: root.textureInternalId >= 0 && materialBrowserTexturesModel.hasSingleModelSelection
onTriggered: materialBrowserTexturesModel.applyToSelectedModel(root.targetTexture.textureInternalId) onTriggered: materialBrowserTexturesModel.applyToSelectedModel(root.textureInternalId)
} }
StudioControls.MenuItem { StudioControls.MenuItem {
text: qsTr("Apply to selected material") text: qsTr("Apply to selected material")
enabled: root.targetTexture && MaterialBrowserBackend.materialBrowserModel.selectedIndex >= 0 enabled: root.textureInternalId >= 0 && MaterialBrowserBackend.materialBrowserModel.selectedIndex >= 0
onTriggered: materialBrowserTexturesModel.applyToSelectedMaterial(root.targetTexture.textureInternalId) onTriggered: materialBrowserTexturesModel.applyToSelectedMaterial(root.textureInternalId)
} }
StudioControls.MenuItem { StudioControls.MenuItem {
text: qsTr("Apply as light probe") text: qsTr("Apply as light probe")
enabled: root.targetTexture && materialBrowserTexturesModel.hasSceneEnv enabled: root.textureInternalId >= 0 && materialBrowserTexturesModel.hasSceneEnv
onTriggered: materialBrowserTexturesModel.applyAsLightProbe(root.targetTexture.textureInternalId) onTriggered: materialBrowserTexturesModel.applyAsLightProbe(root.textureInternalId)
} }
StudioControls.MenuSeparator {} StudioControls.MenuSeparator {}
StudioControls.MenuItem { StudioControls.MenuItem {
text: qsTr("Duplicate") text: qsTr("Duplicate")
enabled: root.targetTexture enabled: root.textureInternalId >= 0
onTriggered: materialBrowserTexturesModel.duplicateTexture(materialBrowserTexturesModel.selectedIndex) onTriggered: materialBrowserTexturesModel.duplicateTexture(materialBrowserTexturesModel.selectedIndex)
} }
StudioControls.MenuItem { StudioControls.MenuItem {
text: qsTr("Delete") text: qsTr("Delete")
enabled: root.targetTexture enabled: root.textureInternalId >= 0
onTriggered: materialBrowserTexturesModel.deleteTexture(materialBrowserTexturesModel.selectedIndex) onTriggered: materialBrowserTexturesModel.deleteTexture(materialBrowserTexturesModel.selectedIndex)
} }