aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/fancymainwindow.cpp
diff options
context:
space:
mode:
authorhjk <hjk@theqtcompany.com>2016-07-22 15:53:11 +0200
committerAlessandro Portale <alessandro.portale@qt.io>2016-07-26 08:31:04 +0000
commitd258d47b426dcf3e58dab8e46456bc4e396890b7 (patch)
tree51f23cd1f44a1973d6ad697aa20db344bdd4c193 /src/libs/utils/fancymainwindow.cpp
parent3a9e459408488cc22c94dae4d49720f8ed6a80df (diff)
FancyMainWindow: Add a way to make the layout immutable
To be used in the new Project mode main window to prevent accidental closing of the navigation dock. Change-Id: Id8970ab80a91113e97a9f9a07b9dfb12b9cb0e30 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'src/libs/utils/fancymainwindow.cpp')
-rw-r--r--src/libs/utils/fancymainwindow.cpp49
1 files changed, 29 insertions, 20 deletions
diff --git a/src/libs/utils/fancymainwindow.cpp b/src/libs/utils/fancymainwindow.cpp
index fd315a8e117..14262fb94d6 100644
--- a/src/libs/utils/fancymainwindow.cpp
+++ b/src/libs/utils/fancymainwindow.cpp
@@ -67,7 +67,7 @@ struct FancyMainWindowPrivate
class DockWidget : public QDockWidget
{
public:
- DockWidget(QWidget *inner, FancyMainWindow *parent);
+ DockWidget(QWidget *inner, FancyMainWindow *parent, bool immutable = false);
bool eventFilter(QObject *, QEvent *event);
void enterEvent(QEvent *event);
@@ -81,6 +81,7 @@ private:
QPoint m_startPos;
TitleBarWidget *m_titleBar;
QTimer m_timer;
+ bool m_immutable = false;
};
// Stolen from QDockWidgetTitleButton
@@ -240,8 +241,8 @@ public:
DockWidgetTitleButton *m_closeButton;
};
-DockWidget::DockWidget(QWidget *inner, FancyMainWindow *parent)
- : QDockWidget(parent), q(parent)
+DockWidget::DockWidget(QWidget *inner, FancyMainWindow *parent, bool immutable)
+ : QDockWidget(parent), q(parent), m_immutable(immutable)
{
setWidget(inner);
setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable);
@@ -255,6 +256,9 @@ DockWidget::DockWidget(QWidget *inner, FancyMainWindow *parent)
m_titleBar->m_titleLabel->setText(inner->windowTitle());
setTitleBarWidget(m_titleBar);
+ if (immutable)
+ return;
+
m_timer.setSingleShot(true);
m_timer.setInterval(500);
@@ -279,7 +283,7 @@ DockWidget::DockWidget(QWidget *inner, FancyMainWindow *parent)
bool DockWidget::eventFilter(QObject *, QEvent *event)
{
- if (event->type() == QEvent::MouseMove && q->autoHideTitleBars()) {
+ if (!m_immutable && event->type() == QEvent::MouseMove && q->autoHideTitleBars()) {
QMouseEvent *me = static_cast<QMouseEvent *>(event);
int y = me->pos().y();
int x = me->pos().x();
@@ -294,17 +298,20 @@ bool DockWidget::eventFilter(QObject *, QEvent *event)
void DockWidget::enterEvent(QEvent *event)
{
- QApplication::instance()->installEventFilter(this);
+ if (!m_immutable)
+ QApplication::instance()->installEventFilter(this);
QDockWidget::enterEvent(event);
}
void DockWidget::leaveEvent(QEvent *event)
{
- if (!isFloating()) {
- m_timer.stop();
- m_titleBar->setActive(false);
+ if (!m_immutable) {
+ if (!isFloating()) {
+ m_timer.stop();
+ m_titleBar->setActive(false);
+ }
+ QApplication::instance()->removeEventFilter(this);
}
- QApplication::instance()->removeEventFilter(this);
QDockWidget::leaveEvent(event);
}
@@ -366,25 +373,27 @@ FancyMainWindow::~FancyMainWindow()
delete d;
}
-QDockWidget *FancyMainWindow::addDockForWidget(QWidget *widget)
+QDockWidget *FancyMainWindow::addDockForWidget(QWidget *widget, bool immutable)
{
QTC_ASSERT(widget, return 0);
QTC_CHECK(widget->objectName().size());
QTC_CHECK(widget->windowTitle().size());
- auto dockWidget = new DockWidget(widget, this);
+ auto dockWidget = new DockWidget(widget, this, immutable);
- connect(dockWidget, &QDockWidget::visibilityChanged,
- [this, dockWidget](bool visible) {
- if (d->m_handleDockVisibilityChanges)
- dockWidget->setProperty(dockWidgetActiveState, visible);
- });
+ if (!immutable) {
+ connect(dockWidget, &QDockWidget::visibilityChanged,
+ [this, dockWidget](bool visible) {
+ if (d->m_handleDockVisibilityChanges)
+ dockWidget->setProperty(dockWidgetActiveState, visible);
+ });
- connect(dockWidget->toggleViewAction(), &QAction::triggered,
- this, &FancyMainWindow::onDockActionTriggered,
- Qt::QueuedConnection);
+ connect(dockWidget->toggleViewAction(), &QAction::triggered,
+ this, &FancyMainWindow::onDockActionTriggered,
+ Qt::QueuedConnection);
- dockWidget->setProperty(dockWidgetActiveState, true);
+ dockWidget->setProperty(dockWidgetActiveState, true);
+ }
return dockWidget;
}