summaryrefslogtreecommitdiff
path: root/src/plugins/qmldesigner/qmldesignerplugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/qmldesignerplugin.cpp')
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.cpp49
1 files changed, 33 insertions, 16 deletions
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index 25bdfa5062..a30547aa2c 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -42,7 +42,7 @@
#include <coreplugin/icore.h>
#include <coreplugin/modemanager.h>
#include <extensionsystem/pluginspec.h>
-
+#include <qmljs/qmljsmodelmanagerinterface.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <utils/hostosinfo.h>
@@ -337,25 +337,42 @@ static bool isDesignerMode(Core::IMode *mode)
return mode == Core::DesignMode::instance();
}
-void QmlDesignerPlugin::onCurrentModeChanged(Core::IMode *newMode, Core::IMode *oldMode)
+static bool checkIfEditorIsQtQuick(Core::IEditor *editor)
{
- if (!isQmlFile(Core::EditorManager::currentEditor()))
- return;
+ if (isQmlFile(Core::EditorManager::currentEditor())) {
+ QmlJS::Document::Ptr document = QmlJS::ModelManagerInterface::instance()->snapshot().document(
+ Core::EditorManager::currentEditor()->document()->filePath());
+ if (!document.isNull())
+ return document->language() == QmlJS::Language::QmlQtQuick1
+ || document->language() == QmlJS::Language::QmlQtQuick2
+ || document->language() == QmlJS::Language::Qml;
+ }
- if ((currentDesignDocument()
- && Core::EditorManager::currentEditor() == currentDesignDocument()->editor())
- && isDesignerMode(newMode))
- return;
+ return false;
+}
- if (!isDesignerMode(newMode) && isDesignerMode(oldMode))
- hideDesigner();
- else if (Core::EditorManager::currentEditor()
- && isDesignerMode(newMode)
- && isQmlFile(Core::EditorManager::currentEditor()))
- showDesigner();
- else if (currentDesignDocument())
- hideDesigner();
+static bool documentIsAlreadyOpen(DesignDocument *designDocument, Core::IEditor *editor, Core::IMode *newMode)
+{
+ return designDocument
+ && editor == designDocument->editor()
+ && isDesignerMode(newMode);
+}
+void QmlDesignerPlugin::onCurrentModeChanged(Core::IMode *newMode, Core::IMode *oldMode)
+{
+ if (Core::EditorManager::currentEditor()
+ && checkIfEditorIsQtQuick(Core::EditorManager::currentEditor())
+ && !documentIsAlreadyOpen(currentDesignDocument(), Core::EditorManager::currentEditor(), newMode)) {
+
+ if (!isDesignerMode(newMode) && isDesignerMode(oldMode))
+ hideDesigner();
+ else if (Core::EditorManager::currentEditor()
+ && isDesignerMode(newMode)
+ && isQmlFile(Core::EditorManager::currentEditor()))
+ showDesigner();
+ else if (currentDesignDocument())
+ hideDesigner();
+ }
}
DesignDocument *QmlDesignerPlugin::currentDesignDocument() const