aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2018-01-23 10:33:18 +0100
committerhjk <hjk@qt.io>2018-01-23 13:08:37 +0000
commita5935cb27a0609764586302bf109796d74060f3d (patch)
treec547a32a33804ae0d5f0c68be87d718cd1d610c3
parent33184a1e299e9fa7ed4c6a9af422bd8245e630e7 (diff)
DesignMode: Create only when needed
Postpone the Mode object creation until it is really necessary, the private data object may be needed before. In the QmlDesigner this patch moves the connection to the DesignMode instance back to delayedInitialize, essentially reverting part of e8b3b8140bd5d. Change-Id: I07146b0bc93eede09af8e824e916edb6de1817ef Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--src/plugins/coreplugin/coreplugin.cpp11
-rw-r--r--src/plugins/coreplugin/coreplugin.h4
-rw-r--r--src/plugins/coreplugin/designmode.cpp34
-rw-r--r--src/plugins/coreplugin/designmode.h10
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.cpp6
5 files changed, 33 insertions, 32 deletions
diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp
index 379e198d13..7e7d05cfaa 100644
--- a/src/plugins/coreplugin/coreplugin.cpp
+++ b/src/plugins/coreplugin/coreplugin.cpp
@@ -71,7 +71,6 @@ using namespace Utils;
CorePlugin::CorePlugin()
: m_mainWindow(0)
, m_editMode(0)
- , m_designMode(0)
, m_locator(0)
{
qRegisterMetaType<Id>();
@@ -90,11 +89,7 @@ CorePlugin::~CorePlugin()
delete m_editMode;
}
- if (m_designMode) {
- if (DesignMode::designModeIsRequired())
- removeObject(m_designMode);
- delete m_designMode;
- }
+ DesignMode::destroyModeIfRequired();
delete m_mainWindow;
setCreatorTheme(0);
@@ -159,7 +154,6 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
m_editMode = new EditMode;
addObject(m_editMode);
ModeManager::activateMode(m_editMode->id());
- m_designMode = new DesignMode;
InfoBar::initialize(ICore::settings(), creatorTheme());
}
@@ -226,8 +220,7 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
void CorePlugin::extensionsInitialized()
{
- if (DesignMode::designModeIsRequired())
- addObject(m_designMode);
+ DesignMode::createModeIfRequired();
Find::extensionsInitialized();
m_locator->extensionsInitialized();
m_mainWindow->extensionsInitialized();
diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h
index 2f86226a71..32c3f94f2b 100644
--- a/src/plugins/coreplugin/coreplugin.h
+++ b/src/plugins/coreplugin/coreplugin.h
@@ -38,9 +38,6 @@ class PathChooser;
}
namespace Core {
-
-class DesignMode;
-
namespace Internal {
class EditMode;
@@ -83,7 +80,6 @@ private:
MainWindow *m_mainWindow;
EditMode *m_editMode;
- DesignMode *m_designMode;
Locator *m_locator;
ReaperPrivate m_reaper;
};
diff --git a/src/plugins/coreplugin/designmode.cpp b/src/plugins/coreplugin/designmode.cpp
index 33a016129c..735121192a 100644
--- a/src/plugins/coreplugin/designmode.cpp
+++ b/src/plugins/coreplugin/designmode.cpp
@@ -29,10 +29,11 @@
#include <coreplugin/idocument.h>
#include <coreplugin/modemanager.h>
#include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/coreconstants.h>
#include <coreplugin/coreicons.h>
-#include <coreplugin/editormanager/ieditor.h>
+#include <extensionsystem/pluginmanager.h>
#include <QPointer>
#include <QStringList>
@@ -59,7 +60,6 @@ public:
public:
QPointer<IEditor> m_currentEditor;
bool m_isActive = false;
- bool m_isRequired = false;
QList<DesignEditorInfo*> m_editors;
QStackedWidget *m_stackWidget;
Context m_activeContext;
@@ -79,9 +79,6 @@ static DesignModePrivate *d = nullptr;
DesignMode::DesignMode()
{
- m_instance = this;
- d = new DesignModePrivate;
-
ICore::addPreCloseListener([]() -> bool {
m_instance->currentEditorChanged(0);
return true;
@@ -107,7 +104,6 @@ DesignMode::DesignMode()
DesignMode::~DesignMode()
{
qDeleteAll(d->m_editors);
- delete d;
}
DesignMode *DesignMode::instance()
@@ -117,12 +113,9 @@ DesignMode *DesignMode::instance()
void DesignMode::setDesignModeIsRequired()
{
- d->m_isRequired = true;
-}
-
-bool DesignMode::designModeIsRequired()
-{
- return d->m_isRequired;
+ // d != nullptr indicates "isRequired".
+ if (!d)
+ d = new DesignModePrivate;
}
/**
@@ -227,4 +220,21 @@ void DesignMode::setActiveContext(const Context &context)
d->m_activeContext = context;
}
+void DesignMode::createModeIfRequired()
+{
+ if (d) {
+ m_instance = new DesignMode;
+ ExtensionSystem::PluginManager::addObject(m_instance);
+ }
+}
+
+void DesignMode::destroyModeIfRequired()
+{
+ if (m_instance) {
+ ExtensionSystem::PluginManager::removeObject(m_instance);
+ delete m_instance;
+ }
+ delete d;
+}
+
} // namespace Core
diff --git a/src/plugins/coreplugin/designmode.h b/src/plugins/coreplugin/designmode.h
index 0bda118c74..be9dc897e7 100644
--- a/src/plugins/coreplugin/designmode.h
+++ b/src/plugins/coreplugin/designmode.h
@@ -42,23 +42,25 @@ class CORE_EXPORT DesignMode : public IMode
Q_OBJECT
public:
- explicit DesignMode();
- virtual ~DesignMode();
-
static DesignMode *instance();
static void setDesignModeIsRequired();
- static bool designModeIsRequired();
static void registerDesignWidget(QWidget *widget,
const QStringList &mimeTypes,
const Context &context);
static void unregisterDesignWidget(QWidget *widget);
+ static void createModeIfRequired();
+ static void destroyModeIfRequired();
+
signals:
void actionsUpdated(Core::IEditor *editor);
private:
+ DesignMode();
+ ~DesignMode() final;
+
void updateActions();
void currentEditorChanged(IEditor *editor);
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index 21fd06824a..84ab7d25db 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -199,6 +199,9 @@ bool QmlDesignerPlugin::delayedInitialize()
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::TextTool);
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::PathTool);
+ connect(Core::DesignMode::instance(), &Core::DesignMode::actionsUpdated,
+ &d->shortCutManager, &ShortCutManager::updateActions);
+
return true;
}
@@ -253,9 +256,6 @@ void QmlDesignerPlugin::integrateIntoQtCreator(QWidget *modeWidget)
Core::DesignMode::registerDesignWidget(modeWidget, mimeTypes, d->context->context());
- connect(Core::DesignMode::instance(), &Core::DesignMode::actionsUpdated,
- &d->shortCutManager, &ShortCutManager::updateActions);
-
connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged, [this] (Core::IEditor *editor) {
if (d && checkIfEditorIsQtQuick(editor) && isInDesignerMode())
changeEditor();