diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/coreplugin/designmode.cpp | 4 | ||||
-rw-r--r-- | src/plugins/coreplugin/editormanager/editorwindow.cpp | 6 | ||||
-rw-r--r-- | src/plugins/coreplugin/icore.cpp | 5 | ||||
-rw-r--r-- | src/plugins/coreplugin/icore.h | 1 | ||||
-rw-r--r-- | src/plugins/coreplugin/modemanager.cpp | 12 | ||||
-rw-r--r-- | src/plugins/coreplugin/modemanager.h | 3 | ||||
-rw-r--r-- | src/plugins/coreplugin/outputpane.cpp | 2 | ||||
-rw-r--r-- | src/plugins/coreplugin/statusbarmanager.cpp | 33 | ||||
-rw-r--r-- | src/plugins/debugger/debuggerplugin.cpp | 6 | ||||
-rw-r--r-- | src/plugins/help/helpplugin.cpp | 2 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectexplorer.cpp | 2 | ||||
-rw-r--r-- | src/plugins/qmldesigner/qmldesignerplugin.cpp | 4 | ||||
-rw-r--r-- | src/plugins/qmljseditor/qmljseditor.cpp | 2 |
13 files changed, 66 insertions, 16 deletions
diff --git a/src/plugins/coreplugin/designmode.cpp b/src/plugins/coreplugin/designmode.cpp index 9932fe3f03..64c4bb1455 100644 --- a/src/plugins/coreplugin/designmode.cpp +++ b/src/plugins/coreplugin/designmode.cpp @@ -181,7 +181,7 @@ void DesignMode::currentEditorChanged(IEditor *editor) if (!mimeEditorAvailable) { setActiveContext(Context()); - if (ModeManager::currentMode() == id()) + if (ModeManager::currentModeId() == id()) ModeManager::activateMode(Constants::MODE_EDIT); setEnabled(false); d->m_currentEditor = nullptr; @@ -214,7 +214,7 @@ void DesignMode::setActiveContext(const Context &context) if (d->m_activeContext == context) return; - if (ModeManager::currentMode() == id()) + if (ModeManager::currentModeId() == id()) ICore::updateAdditionalContexts(d->m_activeContext, context); d->m_activeContext = context; diff --git a/src/plugins/coreplugin/editormanager/editorwindow.cpp b/src/plugins/coreplugin/editormanager/editorwindow.cpp index 28cf1f9525..83b8707131 100644 --- a/src/plugins/coreplugin/editormanager/editorwindow.cpp +++ b/src/plugins/coreplugin/editormanager/editorwindow.cpp @@ -29,6 +29,7 @@ #include "editormanager_p.h" #include <aggregation/aggregate.h> +#include <coreplugin/coreconstants.h> #include <coreplugin/icontext.h> #include <coreplugin/icore.h> #include <coreplugin/locator/locatormanager.h> @@ -67,7 +68,10 @@ EditorWindow::EditorWindow(QWidget *parent) : resize(QSize(800, 600)); static int windowId = 0; - ICore::registerWindow(this, Context(Id("EditorManager.ExternalWindow.").withSuffix(++windowId))); + + ICore::registerWindow(this, + Context(Id("EditorManager.ExternalWindow.").withSuffix(++windowId), + Constants::C_EDITORMANAGER)); connect(m_area, &EditorArea::windowTitleNeedsUpdate, this, &EditorWindow::updateWindowTitle); diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index 6bb0779ec6..f88f0f8df4 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -531,6 +531,11 @@ QWidget *ICore::currentContextWidget() return context ? context->widget() : nullptr; } +IContext *ICore::contextObject(QWidget *widget) +{ + return m_mainwindow->contextObject(widget); +} + QMainWindow *ICore::mainWindow() { diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h index a01a660eeb..37ce9b05dd 100644 --- a/src/plugins/coreplugin/icore.h +++ b/src/plugins/coreplugin/icore.h @@ -112,6 +112,7 @@ public: static IContext *currentContextObject(); static QWidget *currentContextWidget(); + static IContext *contextObject(QWidget *widget); // Adds and removes additional active contexts, these contexts are appended // to the currently active contexts. static void updateAdditionalContexts(const Context &remove, const Context &add, diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp index dac3ae8023..be69338372 100644 --- a/src/plugins/coreplugin/modemanager.cpp +++ b/src/plugins/coreplugin/modemanager.cpp @@ -125,7 +125,7 @@ ModeManager::~ModeManager() m_instance = nullptr; } -Id ModeManager::currentMode() +Id ModeManager::currentModeId() { int currentIndex = d->m_modeStack->currentIndex(); if (currentIndex < 0) @@ -222,7 +222,7 @@ void ModeManagerPrivate::enabledStateChanged(IMode *mode) d->m_modeStack->setTabEnabled(index, mode->isEnabled()); // Make sure we leave any disabled mode to prevent possible crashes: - if (mode->id() == ModeManager::currentMode() && !mode->isEnabled()) { + if (mode->id() == ModeManager::currentModeId() && !mode->isEnabled()) { // This assumes that there is always at least one enabled mode. for (int i = 0; i < d->m_modes.count(); ++i) { if (d->m_modes.at(i) != mode && @@ -298,7 +298,7 @@ void ModeManager::currentTabChanged(int index) void ModeManager::setFocusToCurrentMode() { - IMode *mode = findMode(currentMode()); + IMode *mode = findMode(currentModeId()); QTC_ASSERT(mode, return); QWidget *widget = mode->widget(); if (widget) { @@ -336,4 +336,10 @@ ModeManager *ModeManager::instance() return m_instance; } +IMode *ModeManager::currentMode() +{ + const int currentIndex = d->m_modeStack->currentIndex(); + return currentIndex < 0 ? nullptr : d->m_modes.at(currentIndex); +} + } // namespace Core diff --git a/src/plugins/coreplugin/modemanager.h b/src/plugins/coreplugin/modemanager.h index 66ff7af7fc..889731b49e 100644 --- a/src/plugins/coreplugin/modemanager.h +++ b/src/plugins/coreplugin/modemanager.h @@ -54,7 +54,8 @@ public: static ModeManager *instance(); - static Id currentMode(); + static IMode *currentMode(); + static Id currentModeId(); static void addAction(QAction *action, int priority); static void addProjectSelector(QAction *action); diff --git a/src/plugins/coreplugin/outputpane.cpp b/src/plugins/coreplugin/outputpane.cpp index 9639896348..b6d118d6b6 100644 --- a/src/plugins/coreplugin/outputpane.cpp +++ b/src/plugins/coreplugin/outputpane.cpp @@ -68,7 +68,7 @@ OutputPanePlaceHolder::OutputPanePlaceHolder(Id mode, QSplitter *parent) this, &OutputPanePlaceHolder::currentModeChanged); // if this is part of a lazily created mode widget, // we need to check if this is the current placeholder - currentModeChanged(ModeManager::currentMode()); + currentModeChanged(ModeManager::currentModeId()); } OutputPanePlaceHolder::~OutputPanePlaceHolder() diff --git a/src/plugins/coreplugin/statusbarmanager.cpp b/src/plugins/coreplugin/statusbarmanager.cpp index c653928ad8..e71e745077 100644 --- a/src/plugins/coreplugin/statusbarmanager.cpp +++ b/src/plugins/coreplugin/statusbarmanager.cpp @@ -25,8 +25,10 @@ #include "statusbarmanager.h" +#include "imode.h" #include "mainwindow.h" #include "minisplitter.h" +#include "modemanager.h" #include <utils/qtcassert.h> @@ -45,6 +47,17 @@ static QPointer<QSplitter> m_splitter; static QList<QPointer<QWidget>> m_statusBarWidgets; static QList<QPointer<IContext>> m_contexts; +/*! + Context that always returns the context of the active's mode widget (if available). +*/ +class StatusBarContext : public IContext +{ +public: + StatusBarContext(QObject *parent); + + Context context() const final; +}; + static QWidget *createWidget(QWidget *parent) { QWidget *w = new QWidget(parent); @@ -85,6 +98,10 @@ static void createStatusBarManager() bar->insertPermanentWidget(1, rightCornerWidget); m_statusBarWidgets.append(rightCornerWidget); + auto context = new StatusBarContext(bar); + context->setWidget(bar); + ICore::addContextObject(context); + QObject::connect(ICore::instance(), &ICore::saveSettingsRequested, [] { QSettings *s = ICore::settings(); s->beginGroup(QLatin1String(kSettingsGroup)); @@ -152,4 +169,20 @@ void StatusBarManager::restoreSettings() m_splitter->setSizes(QList<int>() << leftSplitWidth << (sum - leftSplitWidth)); } +StatusBarContext::StatusBarContext(QObject *parent) + : IContext(parent) +{ +} + +Context StatusBarContext::context() const +{ + IMode *currentMode = ModeManager::currentMode(); + QWidget *modeWidget = currentMode ? currentMode->widget() : nullptr; + if (modeWidget) { + if (IContext *context = ICore::contextObject(modeWidget)) + return context->context(); + } + return Context(); +} + } // Core diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 41bc290970..89bac15496 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -2758,7 +2758,7 @@ void DebuggerPluginPrivate::dumpLog() /*! Activates the previous mode when the current mode is the debug mode. */ void DebuggerPluginPrivate::activatePreviousMode() { - if (ModeManager::currentMode() == MODE_DEBUG && m_previousMode.isValid()) { + if (ModeManager::currentModeId() == MODE_DEBUG && m_previousMode.isValid()) { // If stopping the application also makes Qt Creator active (as the // "previously active application"), doing the switch synchronously // leads to funny effects with floating dock widgets @@ -3390,7 +3390,7 @@ void DebuggerPluginPrivate::onModeChanged(Id mode) void saveModeToRestore() { - dd->m_previousMode = ModeManager::currentMode(); + dd->m_previousMode = ModeManager::currentModeId(); } } // namespace Internal @@ -3522,7 +3522,7 @@ void setPerspectiveEnabled(const QByteArray &perspectiveId, bool enabled) void selectPerspective(const QByteArray &perspectiveId) { - if (ModeManager::currentMode() == MODE_DEBUG + if (ModeManager::currentModeId() == MODE_DEBUG && dd->m_mainWindow->currentPerspective() == perspectiveId) { return; } diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp index 84428fe97b..405d05bebc 100644 --- a/src/plugins/help/helpplugin.cpp +++ b/src/plugins/help/helpplugin.cpp @@ -523,7 +523,7 @@ void HelpPluginPrivate::updateSideBarSource(const QUrl &newUrl) void HelpPluginPrivate::setupHelpEngineIfNeeded() { LocalHelpManager::setEngineNeedsUpdate(); - if (ModeManager::currentMode() == m_mode.id() + if (ModeManager::currentModeId() == m_mode.id() || LocalHelpManager::contextHelpOption() == HelpManager::ExternalHelpAlways) LocalHelpManager::setupGuiHelpEngine(); } diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 01e758cef8..37d57d18c7 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1689,7 +1689,7 @@ void ProjectExplorerPluginPrivate::showSessionManager() updateActions(); - if (ModeManager::currentMode() == Core::Constants::MODE_WELCOME) + if (ModeManager::currentModeId() == Core::Constants::MODE_WELCOME) updateWelcomePage(); } diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 140c2ef937..2c745b2ce8 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -93,7 +93,7 @@ QmlDesignerPlugin *QmlDesignerPlugin::m_instance = nullptr; static bool isInDesignerMode() { - return Core::ModeManager::currentMode() == Core::Constants::MODE_DESIGN; + return Core::ModeManager::currentModeId() == Core::Constants::MODE_DESIGN; } static bool checkIfEditorIsQtQuick(Core::IEditor *editor) @@ -106,7 +106,7 @@ static bool checkIfEditorIsQtQuick(Core::IEditor *editor) || document->language() == QmlJS::Dialect::QmlQtQuick2Ui || document->language() == QmlJS::Dialect::Qml; - if (Core::ModeManager::currentMode() == Core::Constants::MODE_DESIGN) { + if (Core::ModeManager::currentModeId() == Core::Constants::MODE_DESIGN) { Core::AsynchronousMessageBox::warning(QmlDesignerPlugin::tr("Cannot Open Design Mode"), QmlDesignerPlugin::tr("The QML file is not currently opened in a QML Editor.")); Core::ModeManager::activateMode(Core::Constants::MODE_EDIT); diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index bf7c50b9e8..bb9c70f768 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -1031,7 +1031,7 @@ bool QmlJSEditor::isDesignModePreferred() const alwaysPreferDesignMode = true; // stay in design mode if we are there - Id mode = ModeManager::currentMode(); + Id mode = ModeManager::currentModeId(); return alwaysPreferDesignMode || mode == Core::Constants::MODE_DESIGN; } |