summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/statusbarmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/coreplugin/statusbarmanager.cpp')
-rw-r--r--src/plugins/coreplugin/statusbarmanager.cpp33
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