summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMahmoud Badri <mahmoud.badri@qt.io>2022-06-15 16:54:31 +0300
committerMahmoud Badri <mahmoud.badri@qt.io>2022-06-17 08:47:04 +0000
commitd080e6331f3a75a28d2d3dd27ace853e7c51c9c0 (patch)
treee3b56033210d348592c44f8aa487acda31ad8fe3
parent568004e12182458b44222cc53a545611992eba02 (diff)
downloadqt-creator-d080e6331f3a75a28d2d3dd27ace853e7c51c9c0.tar.gz
QmlDesigner: Parse material library on model attach
Parsing has to happen so material in an old project are correctly appearing in the material views. Using a timer to wait until it is ok to create the material editor node. Otherwise errors happen. Change-Id: I54b532211f8a865c5183fab0fd8c12e5f15b983a Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r--src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp14
-rw-r--r--src/plugins/qmldesigner/components/materialeditor/materialeditorview.h1
2 files changed, 13 insertions, 2 deletions
diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp
index ca76d45966..10cd12a7c7 100644
--- a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp
+++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp
@@ -73,6 +73,13 @@ MaterialEditorView::MaterialEditorView(QWidget *parent)
m_updateShortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_F7), m_stackedWidget);
connect(m_updateShortcut, &QShortcut::activated, this, &MaterialEditorView::reloadQml);
+ m_ensureMatLibTimer.callOnTimeout([this] {
+ if (model() && model()->rewriterView() && !model()->rewriterView()->hasIncompleteTypeInformation()) {
+ materialLibraryNode(); // create the material library node
+ m_ensureMatLibTimer.stop();
+ }
+ });
+
m_stackedWidget->setStyleSheet(Theme::replaceCssColors(
QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css"))));
m_stackedWidget->setMinimumWidth(250);
@@ -524,6 +531,11 @@ void MaterialEditorView::modelAttached(Model *model)
m_hasQuick3DImport = model->hasImport("QtQuick3D");
+ // Creating the material library node on model attach causes errors as long as the type information
+ // not complete yet, so we keep checking until type info is complete.
+ if (m_hasQuick3DImport)
+ m_ensureMatLibTimer.start(500);
+
if (!m_setupCompleted) {
reloadQml();
m_setupCompleted = true;
@@ -537,8 +549,6 @@ void MaterialEditorView::modelAboutToBeDetached(Model *model)
{
AbstractView::modelAboutToBeDetached(model);
m_qmlBackEnd->materialEditorTransaction()->end();
-
-
}
void MaterialEditorView::propertiesRemoved(const QList<AbstractProperty> &propertyList)
diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h
index d9c9e4c1ba..ff734ed30b 100644
--- a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h
+++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h
@@ -114,6 +114,7 @@ private:
bool noValidSelection() const;
ModelNode m_selectedMaterial;
+ QTimer m_ensureMatLibTimer;
QShortcut *m_updateShortcut = nullptr;
int m_timerId = 0;
QStackedWidget *m_stackedWidget = nullptr;