diff options
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/widgets/qdockarealayout.cpp | 11 | ||||
-rw-r--r-- | src/widgets/widgets/qdockarealayout_p.h | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qmainwindow.cpp | 12 | ||||
-rw-r--r-- | src/widgets/widgets/qmainwindow.h | 3 | ||||
-rw-r--r-- | src/widgets/widgets/qmainwindowlayout.cpp | 6 |
5 files changed, 30 insertions, 4 deletions
diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp index c14fd5a942..3b185a5e67 100644 --- a/src/widgets/widgets/qdockarealayout.cpp +++ b/src/widgets/widgets/qdockarealayout.cpp @@ -1493,8 +1493,10 @@ bool QDockAreaLayoutInfo::hasFixedSize() const return perp(o, minimumSize()) == perp(o, maximumSize()); } - -void QDockAreaLayoutInfo::apply(bool animate) +/*! \internal + Applies the layout and returns the activated QDockWidget or nullptr. + */ +QDockWidget *QDockAreaLayoutInfo::apply(bool animate) { QWidgetAnimator &widgetAnimator = mainWindowLayout()->widgetAnimator; @@ -1533,6 +1535,8 @@ void QDockAreaLayoutInfo::apply(bool animate) } #endif // QT_NO_TABBAR + QDockWidget *activated = nullptr; + for (int i = 0; i < item_list.size(); ++i) { QDockAreaLayoutItem &item = item_list[i]; @@ -1561,6 +1565,7 @@ void QDockAreaLayoutInfo::apply(bool animate) } else if (r.isValid() && (geo.right() < 0 || geo.bottom() < 0)) { emit dw->visibilityChanged(true); + activated = dw; } } } @@ -1568,6 +1573,8 @@ void QDockAreaLayoutInfo::apply(bool animate) if (*sep == 1) updateSeparatorWidgets(); #endif //QT_NO_TABBAR + + return activated; } static void paintSep(QPainter *p, QWidget *w, const QRect &r, Qt::Orientation o, bool mouse_over) diff --git a/src/widgets/widgets/qdockarealayout_p.h b/src/widgets/widgets/qdockarealayout_p.h index 0ae1350394..591b156902 100644 --- a/src/widgets/widgets/qdockarealayout_p.h +++ b/src/widgets/widgets/qdockarealayout_p.h @@ -174,7 +174,7 @@ public: QList<int> indexOf(QWidget *widget) const; QList<int> indexOfPlaceHolder(const QString &objectName) const; - void apply(bool animate); + QDockWidget *apply(bool animate); void paintSeparators(QPainter *p, QWidget *widget, const QRegion &clip, const QPoint &mouse) const; diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp index f86244172d..5dfa439b2e 100644 --- a/src/widgets/widgets/qmainwindow.cpp +++ b/src/widgets/widgets/qmainwindow.cpp @@ -377,6 +377,18 @@ void QMainWindowPrivate::init() \sa setToolButtonStyle() */ +#ifndef QT_NO_DOCKWIDGET +/*! + \fn void QMainWindow::tabifiedDockWidgetActivated(QDockWidget *dockWidget) + + This signal is emitted when the tabified dock widget is activated by + selecting the tab. The activated dock widget is passed in \a dockWidget. + + \since 5.8 + \sa tabifyDockWidget(), tabifiedDockWidgets() +*/ +#endif + /*! Constructs a QMainWindow with the given \a parent and the specified widget \a flags. diff --git a/src/widgets/widgets/qmainwindow.h b/src/widgets/widgets/qmainwindow.h index aab1448b8f..4622d89e4c 100644 --- a/src/widgets/widgets/qmainwindow.h +++ b/src/widgets/widgets/qmainwindow.h @@ -195,6 +195,9 @@ public Q_SLOTS: Q_SIGNALS: void iconSizeChanged(const QSize &iconSize); void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle); +#ifndef QT_NO_DOCKWIDGET + void tabifiedDockWidgetActivated(QDockWidget *dockWidget); +#endif protected: #ifndef QT_NO_CONTEXTMENU diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp index 6c05887705..ee6da73302 100644 --- a/src/widgets/widgets/qmainwindowlayout.cpp +++ b/src/widgets/widgets/qmainwindowlayout.cpp @@ -1686,7 +1686,11 @@ void QMainWindowLayout::tabChanged() QDockAreaLayoutInfo *info = dockInfo(tb); if (info == 0) return; - info->apply(false); + + QDockWidget *activated = info->apply(false); + + if (activated) + emit static_cast<QMainWindow *>(parentWidget())->tabifiedDockWidgetActivated(activated); if (QWidget *w = centralWidget()) w->raise(); |