From 4eab11262cd7b82bfa7f33df7f9d7d84d4b54da3 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 26 Apr 2016 14:41:38 +0200 Subject: [PATCH] EditorManagerPlaceHolder: Don't restrict to one per mode Make visibility the deciding factor which placeholder takes the main editor area. A mode can have multiple placeholders as long as only a single one is visible at a time. Change-Id: I80b86dcb9e31b29f87fe42a465a3d3ad49eeef17 Reviewed-by: David Schulz --- src/plugins/coreplugin/editmode.cpp | 2 +- .../editormanager/editormanager.cpp | 28 ++++++++----------- .../coreplugin/editormanager/editormanager.h | 8 ++---- src/plugins/debugger/debuggermainwindow.cpp | 2 +- 4 files changed, 16 insertions(+), 24 deletions(-) diff --git a/src/plugins/coreplugin/editmode.cpp b/src/plugins/coreplugin/editmode.cpp index 6432ac8a15b..f7b42d221fe 100644 --- a/src/plugins/coreplugin/editmode.cpp +++ b/src/plugins/coreplugin/editmode.cpp @@ -58,7 +58,7 @@ EditMode::EditMode() : m_rightSplitWidgetLayout->setMargin(0); QWidget *rightSplitWidget = new QWidget; rightSplitWidget->setLayout(m_rightSplitWidgetLayout); - auto editorPlaceHolder = new EditorManagerPlaceHolder(Constants::MODE_EDIT); + auto editorPlaceHolder = new EditorManagerPlaceHolder; m_rightSplitWidgetLayout->insertWidget(0, editorPlaceHolder); MiniSplitter *rightPaneSplitter = new MiniSplitter; diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 8cd360c11b6..51bb754b094 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -121,16 +121,12 @@ using namespace Utils; //===================EditorManager===================== -EditorManagerPlaceHolder::EditorManagerPlaceHolder(Id mode, QWidget *parent) - : QWidget(parent), m_mode(mode) +EditorManagerPlaceHolder::EditorManagerPlaceHolder(QWidget *parent) + : QWidget(parent) { setLayout(new QVBoxLayout); layout()->setMargin(0); setFocusProxy(EditorManagerPrivate::mainEditorArea()); - connect(ModeManager::instance(), &ModeManager::currentModeChanged, - this, &EditorManagerPlaceHolder::currentModeChanged); - - currentModeChanged(ModeManager::currentMode()); } EditorManagerPlaceHolder::~EditorManagerPlaceHolder() @@ -143,18 +139,16 @@ EditorManagerPlaceHolder::~EditorManagerPlaceHolder() } } -void EditorManagerPlaceHolder::currentModeChanged(Id mode) +void EditorManagerPlaceHolder::showEvent(QShowEvent *) { - if (m_mode == mode) { - QWidget *previousFocus = 0; - QWidget *em = EditorManagerPrivate::mainEditorArea(); - if (em->focusWidget() && em->focusWidget()->hasFocus()) - previousFocus = em->focusWidget(); - layout()->addWidget(em); - em->show(); - if (previousFocus) - previousFocus->setFocus(); - } + QWidget *previousFocus = 0; + QWidget *em = EditorManagerPrivate::mainEditorArea(); + if (em->focusWidget() && em->focusWidget()->hasFocus()) + previousFocus = em->focusWidget(); + layout()->addWidget(em); + em->show(); + if (previousFocus) + previousFocus->setFocus(); } // ---------------- EditorManager diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h index 8dcb1669158..7366beeb80f 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.h +++ b/src/plugins/coreplugin/editormanager/editormanager.h @@ -72,13 +72,11 @@ class CORE_EXPORT EditorManagerPlaceHolder : public QWidget { Q_OBJECT public: - explicit EditorManagerPlaceHolder(Id mode, QWidget *parent = 0); + explicit EditorManagerPlaceHolder(QWidget *parent = 0); ~EditorManagerPlaceHolder(); -private: - void currentModeChanged(Id mode); - - Id m_mode; +protected: + void showEvent(QShowEvent *event) override; }; class CORE_EXPORT EditorManager : public QObject diff --git a/src/plugins/debugger/debuggermainwindow.cpp b/src/plugins/debugger/debuggermainwindow.cpp index d4b6a8c9552..21050a31711 100644 --- a/src/plugins/debugger/debuggermainwindow.cpp +++ b/src/plugins/debugger/debuggermainwindow.cpp @@ -205,7 +205,7 @@ void DebuggerMainWindow::finalizeSetup() QWidget *createModeWindow(const Core::Id &mode, DebuggerMainWindow *mainWindow, QWidget *central) { if (!central) - central = new EditorManagerPlaceHolder(mode); + central = new EditorManagerPlaceHolder; auto editorHolderLayout = new QVBoxLayout; editorHolderLayout->setMargin(0);