summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/coreplugin/designmode.cpp4
-rw-r--r--src/plugins/coreplugin/editormanager/editorwindow.cpp6
-rw-r--r--src/plugins/coreplugin/icore.cpp5
-rw-r--r--src/plugins/coreplugin/icore.h1
-rw-r--r--src/plugins/coreplugin/modemanager.cpp12
-rw-r--r--src/plugins/coreplugin/modemanager.h3
-rw-r--r--src/plugins/coreplugin/outputpane.cpp2
-rw-r--r--src/plugins/coreplugin/statusbarmanager.cpp33
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp6
-rw-r--r--src/plugins/help/helpplugin.cpp2
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp2
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.cpp4
-rw-r--r--src/plugins/qmljseditor/qmljseditor.cpp2
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;
}