forked from qt-creator/qt-creator
QmlDesigner: Fix focus issues in material browser
Fixed focus loss on context menu close.
Fixed an issue with main view also handling cursor and enter keys when
editing material name.
Expanding a section now focuses the expanded section.
Dragging items from content library now focuses correct section.
Fixes: QDS-9215
Change-Id: I2176c7e52d8855c547db426b55ab739ca8f1db06
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
(cherry picked from commit d39f469e51
)
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
committed by
Tim Jenssen
parent
8b7df22fcc
commit
89a7d35725
@@ -367,10 +367,17 @@ Item {
|
|||||||
|
|
||||||
MaterialBrowserContextMenu {
|
MaterialBrowserContextMenu {
|
||||||
id: ctxMenu
|
id: ctxMenu
|
||||||
|
onClosed: {
|
||||||
|
if (restoreFocusOnClose)
|
||||||
|
scrollView.forceActiveFocus()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TextureBrowserContextMenu {
|
TextureBrowserContextMenu {
|
||||||
id: ctxMenuTextures
|
id: ctxMenuTextures
|
||||||
|
onClosed: {
|
||||||
|
scrollView.forceActiveFocus()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
component DoubleButton: Rectangle {
|
component DoubleButton: Rectangle {
|
||||||
@@ -629,7 +636,11 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onExpandedChanged: {
|
onExpandedChanged: {
|
||||||
if (!expanded) {
|
if (expanded) {
|
||||||
|
if (root.visibleItemCount(materialBrowserModel) > 0)
|
||||||
|
rootView.focusMaterialSection(true)
|
||||||
|
scrollView.forceActiveFocus()
|
||||||
|
} else {
|
||||||
root.startDelayedEnsureTimer(300) // wait for section collapse animation
|
root.startDelayedEnsureTimer(300) // wait for section collapse animation
|
||||||
rootView.focusMaterialSection(false)
|
rootView.focusMaterialSection(false)
|
||||||
}
|
}
|
||||||
@@ -714,7 +725,11 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onExpandedChanged: {
|
onExpandedChanged: {
|
||||||
if (!expanded) {
|
if (expanded) {
|
||||||
|
if (root.visibleItemCount(materialBrowserTexturesModel) > 0)
|
||||||
|
rootView.focusMaterialSection(false)
|
||||||
|
scrollView.forceActiveFocus()
|
||||||
|
} else {
|
||||||
root.startDelayedEnsureTimer(300) // wait for section collapse animation
|
root.startDelayedEnsureTimer(300) // wait for section collapse animation
|
||||||
rootView.focusMaterialSection(true)
|
rootView.focusMaterialSection(true)
|
||||||
}
|
}
|
||||||
|
@@ -13,11 +13,13 @@ StudioControls.Menu {
|
|||||||
property var targetItem: null
|
property var targetItem: null
|
||||||
property int copiedMaterialInternalId: -1
|
property int copiedMaterialInternalId: -1
|
||||||
property var matSectionsModel: []
|
property var matSectionsModel: []
|
||||||
|
property bool restoreFocusOnClose: true
|
||||||
|
|
||||||
function popupMenu(targetItem = null, targetMaterial = null)
|
function popupMenu(targetItem = null, targetMaterial = null)
|
||||||
{
|
{
|
||||||
this.targetItem = targetItem
|
this.targetItem = targetItem
|
||||||
this.targetMaterial = targetMaterial
|
this.targetMaterial = targetMaterial
|
||||||
|
restoreFocusOnClose = true
|
||||||
popup()
|
popup()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +104,10 @@ StudioControls.Menu {
|
|||||||
StudioControls.MenuItem {
|
StudioControls.MenuItem {
|
||||||
text: qsTr("Rename")
|
text: qsTr("Rename")
|
||||||
enabled: root.targetItem
|
enabled: root.targetItem
|
||||||
onTriggered: root.targetItem.startRename();
|
onTriggered: {
|
||||||
|
restoreFocusOnClose = false
|
||||||
|
root.targetItem.startRename()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
StudioControls.MenuItem {
|
||||||
|
@@ -91,6 +91,11 @@ Rectangle {
|
|||||||
cache: false
|
cache: false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Eat keys so they are not passed to parent while editing name
|
||||||
|
Keys.onPressed: (e) => {
|
||||||
|
e.accepted = true;
|
||||||
|
}
|
||||||
|
|
||||||
TextInput {
|
TextInput {
|
||||||
id: matName
|
id: matName
|
||||||
|
|
||||||
|
@@ -323,6 +323,8 @@ ModelNode ContentLibraryView::createMaterial(const NodeMetaInfo &metaInfo)
|
|||||||
VariantProperty objNameProp = newMatNode.variantProperty("objectName");
|
VariantProperty objNameProp = newMatNode.variantProperty("objectName");
|
||||||
objNameProp.setValue(newName);
|
objNameProp.setValue(newName);
|
||||||
|
|
||||||
|
emitCustomNotification("focus_material_section", {});
|
||||||
|
|
||||||
return newMatNode;
|
return newMatNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -36,7 +36,7 @@ ModelNode CreateTexture::execute(const QString &filePath, AddTextureMode mode, i
|
|||||||
|
|
||||||
QTimer::singleShot(0, m_view, [this, texture]() {
|
QTimer::singleShot(0, m_view, [this, texture]() {
|
||||||
if (m_view->model())
|
if (m_view->model())
|
||||||
m_view->emitCustomNotification("selected_texture_changed", {texture});
|
m_view->emitCustomNotification("selected_texture_changed", {texture}, {true});
|
||||||
});
|
});
|
||||||
|
|
||||||
return texture;
|
return texture;
|
||||||
|
@@ -497,6 +497,8 @@ void MaterialBrowserView::customNotification(const AbstractView *view,
|
|||||||
if (idx != -1) {
|
if (idx != -1) {
|
||||||
m_widget->materialBrowserTexturesModel()->selectTexture(idx);
|
m_widget->materialBrowserTexturesModel()->selectTexture(idx);
|
||||||
m_widget->materialBrowserTexturesModel()->refreshSearch();
|
m_widget->materialBrowserTexturesModel()->refreshSearch();
|
||||||
|
if (!data.isEmpty() && data[0].toBool())
|
||||||
|
m_widget->focusMaterialSection(false);
|
||||||
}
|
}
|
||||||
} else if (identifier == "refresh_material_browser") {
|
} else if (identifier == "refresh_material_browser") {
|
||||||
QTimer::singleShot(0, model(), [this]() {
|
QTimer::singleShot(0, model(), [this]() {
|
||||||
@@ -511,6 +513,8 @@ void MaterialBrowserView::customNotification(const AbstractView *view,
|
|||||||
applyTextureToModel3D(nodeList.at(0), nodeList.at(1));
|
applyTextureToModel3D(nodeList.at(0), nodeList.at(1));
|
||||||
} else if (identifier == "apply_texture_to_material") {
|
} else if (identifier == "apply_texture_to_material") {
|
||||||
applyTextureToMaterial({nodeList.at(0)}, nodeList.at(1));
|
applyTextureToMaterial({nodeList.at(0)}, nodeList.at(1));
|
||||||
|
} else if (identifier == "focus_material_section") {
|
||||||
|
m_widget->focusMaterialSection(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user