diff options
Diffstat (limited to 'src/plugins/qmldesigner/qmldesignerplugin.cpp')
-rw-r--r-- | src/plugins/qmldesigner/qmldesignerplugin.cpp | 49 |
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 |