aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmlpreview
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@qt.io>2023-10-19 10:24:54 +0200
committerChristian Stenger <christian.stenger@qt.io>2024-01-16 09:10:02 +0000
commit5a86b883fac45c263ff4d0b365881fb484dc248c (patch)
tree09984e6c7167dc82b97cfd72b3c9048a8535a967 /src/plugins/qmlpreview
parentfb2fd513be2ee108ead256bbf1aad26e32e507c5 (diff)
QmlPreview: Avoid processing all editors
Only act if there is a preview running. Explicitly connect and disconnect to the editor manager if the preview gets triggered. Fixes displaying message boxes when changing qml documents without a running preview. Reverts 66d94a82a32cdfdb344d55ef2c610ee9b3f03f7fi which had been a hotfix and provides a more intrusive solution to the misbehavior revealed by 5336fd83a004c1fe5265b9f9ba87320c031d2040. Change-Id: I88be4eca077ac1d56d8e4790a70220e7d3efa960 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'src/plugins/qmlpreview')
-rw-r--r--src/plugins/qmlpreview/qmlpreviewplugin.cpp30
1 files changed, 23 insertions, 7 deletions
diff --git a/src/plugins/qmlpreview/qmlpreviewplugin.cpp b/src/plugins/qmlpreview/qmlpreviewplugin.cpp
index 114b13ee78d..4d36d3059e4 100644
--- a/src/plugins/qmlpreview/qmlpreviewplugin.cpp
+++ b/src/plugins/qmlpreview/qmlpreviewplugin.cpp
@@ -114,7 +114,8 @@ public:
void onEditorChanged(Core::IEditor *editor);
void onEditorAboutToClose(Core::IEditor *editor);
void setDirty();
- void attachToEditor();
+ void attachToEditorManager();
+ void detachFromEditorManager();
void checkEditor();
void checkFile(const QString &fileName);
void triggerPreview(const QString &changedFile, const QByteArray &contents);
@@ -165,7 +166,12 @@ QmlPreviewPluginPrivate::QmlPreviewPluginPrivate(QmlPreviewPlugin *parent)
runPreviewAction->setEnabled(ProjectManager::startupProject() != nullptr);
connect(ProjectManager::instance(), &ProjectManager::startupProjectChanged, runPreviewAction,
&QAction::setEnabled);
- connect(runPreviewAction, &QAction::triggered, this, [this] {
+ connect(runPreviewAction, &QAction::triggered, this, [runPreviewAction, this] {
+ runPreviewAction->setEnabled(false);
+ attachToEditorManager();
+ setDirty();
+ onEditorChanged(Core::EditorManager::currentEditor());
+
if (auto multiLanguageAspect = QmlProjectManager::QmlMultiLanguageAspect::current())
m_localeIsoCode = multiLanguageAspect->currentLocale();
bool skipDeploy = false;
@@ -231,8 +237,6 @@ QmlPreviewPluginPrivate::QmlPreviewPluginPrivate(QmlPreviewPlugin *parent)
connect(q, &QmlPreviewPlugin::checkDocument, parser, &QmlPreviewParser::parse);
connect(q, &QmlPreviewPlugin::previewedFileChanged, this, &QmlPreviewPluginPrivate::checkFile);
connect(parser, &QmlPreviewParser::success, this, &QmlPreviewPluginPrivate::triggerPreview);
-
- attachToEditor();
}
QmlPreviewPlugin::~QmlPreviewPlugin()
@@ -439,9 +443,14 @@ void QmlPreviewPlugin::removePreview(RunControl *preview)
{
d->m_runningPreviews.removeOne(preview);
emit runningPreviewsChanged(d->m_runningPreviews);
+ if (d->m_runningPreviews.isEmpty()) {
+ if (auto cmd = Core::ActionManager::command("QmlPreview.RunPreview"); cmd && cmd->action())
+ cmd->action()->setEnabled(true);
+ d->detachFromEditorManager();
+ }
}
-void QmlPreviewPluginPrivate::attachToEditor()
+void QmlPreviewPluginPrivate::attachToEditorManager()
{
Core::EditorManager *editorManager = Core::EditorManager::instance();
connect(editorManager, &Core::EditorManager::currentEditorChanged,
@@ -450,10 +459,17 @@ void QmlPreviewPluginPrivate::attachToEditor()
this, &QmlPreviewPluginPrivate::onEditorAboutToClose);
}
+void QmlPreviewPluginPrivate::detachFromEditorManager()
+{
+ Core::EditorManager *editorManager = Core::EditorManager::instance();
+ disconnect(editorManager, &Core::EditorManager::currentEditorChanged,
+ this, &QmlPreviewPluginPrivate::onEditorChanged);
+ disconnect(editorManager, &Core::EditorManager::editorAboutToClose,
+ this, &QmlPreviewPluginPrivate::onEditorAboutToClose);
+}
+
void QmlPreviewPluginPrivate::checkEditor()
{
- if (m_runningPreviews.isEmpty())
- return;
QmlJS::Dialect::Enum dialect = QmlJS::Dialect::AnyLanguage;
Core::IDocument *doc = m_lastEditor->document();
using namespace Utils::Constants;