diff options
Diffstat (limited to 'src/plugins/coreplugin/statusbarmanager.cpp')
-rw-r--r-- | src/plugins/coreplugin/statusbarmanager.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
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 |