forked from qt-creator/qt-creator
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
e8b3b8140b
.
Change-Id: I07146b0bc93eede09af8e824e916edb6de1817ef
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -71,7 +71,6 @@ using namespace Utils;
|
|||||||
CorePlugin::CorePlugin()
|
CorePlugin::CorePlugin()
|
||||||
: m_mainWindow(0)
|
: m_mainWindow(0)
|
||||||
, m_editMode(0)
|
, m_editMode(0)
|
||||||
, m_designMode(0)
|
|
||||||
, m_locator(0)
|
, m_locator(0)
|
||||||
{
|
{
|
||||||
qRegisterMetaType<Id>();
|
qRegisterMetaType<Id>();
|
||||||
@@ -90,11 +89,7 @@ CorePlugin::~CorePlugin()
|
|||||||
delete m_editMode;
|
delete m_editMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_designMode) {
|
DesignMode::destroyModeIfRequired();
|
||||||
if (DesignMode::designModeIsRequired())
|
|
||||||
removeObject(m_designMode);
|
|
||||||
delete m_designMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
delete m_mainWindow;
|
delete m_mainWindow;
|
||||||
setCreatorTheme(0);
|
setCreatorTheme(0);
|
||||||
@@ -159,7 +154,6 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
|
|||||||
m_editMode = new EditMode;
|
m_editMode = new EditMode;
|
||||||
addObject(m_editMode);
|
addObject(m_editMode);
|
||||||
ModeManager::activateMode(m_editMode->id());
|
ModeManager::activateMode(m_editMode->id());
|
||||||
m_designMode = new DesignMode;
|
|
||||||
InfoBar::initialize(ICore::settings(), creatorTheme());
|
InfoBar::initialize(ICore::settings(), creatorTheme());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,8 +220,7 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
|
|||||||
|
|
||||||
void CorePlugin::extensionsInitialized()
|
void CorePlugin::extensionsInitialized()
|
||||||
{
|
{
|
||||||
if (DesignMode::designModeIsRequired())
|
DesignMode::createModeIfRequired();
|
||||||
addObject(m_designMode);
|
|
||||||
Find::extensionsInitialized();
|
Find::extensionsInitialized();
|
||||||
m_locator->extensionsInitialized();
|
m_locator->extensionsInitialized();
|
||||||
m_mainWindow->extensionsInitialized();
|
m_mainWindow->extensionsInitialized();
|
||||||
|
@@ -38,9 +38,6 @@ class PathChooser;
|
|||||||
}
|
}
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|
||||||
class DesignMode;
|
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
class EditMode;
|
class EditMode;
|
||||||
@@ -83,7 +80,6 @@ private:
|
|||||||
|
|
||||||
MainWindow *m_mainWindow;
|
MainWindow *m_mainWindow;
|
||||||
EditMode *m_editMode;
|
EditMode *m_editMode;
|
||||||
DesignMode *m_designMode;
|
|
||||||
Locator *m_locator;
|
Locator *m_locator;
|
||||||
ReaperPrivate m_reaper;
|
ReaperPrivate m_reaper;
|
||||||
};
|
};
|
||||||
|
@@ -29,10 +29,11 @@
|
|||||||
#include <coreplugin/idocument.h>
|
#include <coreplugin/idocument.h>
|
||||||
#include <coreplugin/modemanager.h>
|
#include <coreplugin/modemanager.h>
|
||||||
#include <coreplugin/editormanager/editormanager.h>
|
#include <coreplugin/editormanager/editormanager.h>
|
||||||
|
#include <coreplugin/editormanager/ieditor.h>
|
||||||
#include <coreplugin/coreconstants.h>
|
#include <coreplugin/coreconstants.h>
|
||||||
#include <coreplugin/coreicons.h>
|
#include <coreplugin/coreicons.h>
|
||||||
|
|
||||||
#include <coreplugin/editormanager/ieditor.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
|
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
@@ -59,7 +60,6 @@ public:
|
|||||||
public:
|
public:
|
||||||
QPointer<IEditor> m_currentEditor;
|
QPointer<IEditor> m_currentEditor;
|
||||||
bool m_isActive = false;
|
bool m_isActive = false;
|
||||||
bool m_isRequired = false;
|
|
||||||
QList<DesignEditorInfo*> m_editors;
|
QList<DesignEditorInfo*> m_editors;
|
||||||
QStackedWidget *m_stackWidget;
|
QStackedWidget *m_stackWidget;
|
||||||
Context m_activeContext;
|
Context m_activeContext;
|
||||||
@@ -79,9 +79,6 @@ static DesignModePrivate *d = nullptr;
|
|||||||
|
|
||||||
DesignMode::DesignMode()
|
DesignMode::DesignMode()
|
||||||
{
|
{
|
||||||
m_instance = this;
|
|
||||||
d = new DesignModePrivate;
|
|
||||||
|
|
||||||
ICore::addPreCloseListener([]() -> bool {
|
ICore::addPreCloseListener([]() -> bool {
|
||||||
m_instance->currentEditorChanged(0);
|
m_instance->currentEditorChanged(0);
|
||||||
return true;
|
return true;
|
||||||
@@ -107,7 +104,6 @@ DesignMode::DesignMode()
|
|||||||
DesignMode::~DesignMode()
|
DesignMode::~DesignMode()
|
||||||
{
|
{
|
||||||
qDeleteAll(d->m_editors);
|
qDeleteAll(d->m_editors);
|
||||||
delete d;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DesignMode *DesignMode::instance()
|
DesignMode *DesignMode::instance()
|
||||||
@@ -117,12 +113,9 @@ DesignMode *DesignMode::instance()
|
|||||||
|
|
||||||
void DesignMode::setDesignModeIsRequired()
|
void DesignMode::setDesignModeIsRequired()
|
||||||
{
|
{
|
||||||
d->m_isRequired = true;
|
// d != nullptr indicates "isRequired".
|
||||||
}
|
if (!d)
|
||||||
|
d = new DesignModePrivate;
|
||||||
bool DesignMode::designModeIsRequired()
|
|
||||||
{
|
|
||||||
return d->m_isRequired;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -227,4 +220,21 @@ void DesignMode::setActiveContext(const Context &context)
|
|||||||
d->m_activeContext = 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
|
} // namespace Core
|
||||||
|
@@ -42,23 +42,25 @@ class CORE_EXPORT DesignMode : public IMode
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit DesignMode();
|
|
||||||
virtual ~DesignMode();
|
|
||||||
|
|
||||||
static DesignMode *instance();
|
static DesignMode *instance();
|
||||||
|
|
||||||
static void setDesignModeIsRequired();
|
static void setDesignModeIsRequired();
|
||||||
static bool designModeIsRequired();
|
|
||||||
|
|
||||||
static void registerDesignWidget(QWidget *widget,
|
static void registerDesignWidget(QWidget *widget,
|
||||||
const QStringList &mimeTypes,
|
const QStringList &mimeTypes,
|
||||||
const Context &context);
|
const Context &context);
|
||||||
static void unregisterDesignWidget(QWidget *widget);
|
static void unregisterDesignWidget(QWidget *widget);
|
||||||
|
|
||||||
|
static void createModeIfRequired();
|
||||||
|
static void destroyModeIfRequired();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void actionsUpdated(Core::IEditor *editor);
|
void actionsUpdated(Core::IEditor *editor);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
DesignMode();
|
||||||
|
~DesignMode() final;
|
||||||
|
|
||||||
void updateActions();
|
void updateActions();
|
||||||
|
|
||||||
void currentEditorChanged(IEditor *editor);
|
void currentEditorChanged(IEditor *editor);
|
||||||
|
@@ -199,6 +199,9 @@ bool QmlDesignerPlugin::delayedInitialize()
|
|||||||
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::TextTool);
|
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::TextTool);
|
||||||
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::PathTool);
|
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::PathTool);
|
||||||
|
|
||||||
|
connect(Core::DesignMode::instance(), &Core::DesignMode::actionsUpdated,
|
||||||
|
&d->shortCutManager, &ShortCutManager::updateActions);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,9 +256,6 @@ void QmlDesignerPlugin::integrateIntoQtCreator(QWidget *modeWidget)
|
|||||||
|
|
||||||
Core::DesignMode::registerDesignWidget(modeWidget, mimeTypes, d->context->context());
|
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) {
|
connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged, [this] (Core::IEditor *editor) {
|
||||||
if (d && checkIfEditorIsQtQuick(editor) && isInDesignerMode())
|
if (d && checkIfEditorIsQtQuick(editor) && isInDesignerMode())
|
||||||
changeEditor();
|
changeEditor();
|
||||||
|
Reference in New Issue
Block a user