diff options
Diffstat (limited to 'src/widgets/widgets/qmainwindow.cpp')
-rw-r--r-- | src/widgets/widgets/qmainwindow.cpp | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp index 0fc8aeace7..4534058d45 100644 --- a/src/widgets/widgets/qmainwindow.cpp +++ b/src/widgets/widgets/qmainwindow.cpp @@ -49,7 +49,7 @@ public: , useUnifiedToolBar(false) #endif { } - QMainWindowLayout *layout; + QPointer<QMainWindowLayout> layout; QSize iconSize; bool explicitIconSize; Qt::ToolButtonStyle toolButtonStyle; @@ -60,7 +60,7 @@ public: static inline QMainWindowLayout *mainWindowLayout(const QMainWindow *mainWindow) { - return mainWindow ? mainWindow->d_func()->layout : static_cast<QMainWindowLayout *>(nullptr); + return mainWindow ? mainWindow->d_func()->layout.data() : static_cast<QMainWindowLayout *>(nullptr); } }; @@ -280,9 +280,7 @@ void QMainWindowPrivate::init() is the position and size (relative to the size of the main window) of the toolbars and dock widgets that are stored. - \sa QMenuBar, QToolBar, QStatusBar, QDockWidget, - {Qt Widgets - Application Example}, {Dock Widgets Example}, - {MDI Example}, {Menus Example} + \sa QMenuBar, QToolBar, QStatusBar, QDockWidget, {Menus Example} */ /*! @@ -1125,21 +1123,8 @@ void QMainWindow::tabifyDockWidget(QDockWidget *first, QDockWidget *second) QList<QDockWidget*> QMainWindow::tabifiedDockWidgets(QDockWidget *dockwidget) const { - QList<QDockWidget*> ret; - const QDockAreaLayoutInfo *info = d_func()->layout->layoutState.dockAreaLayout.info(dockwidget); - if (info && info->tabbed && info->tabBar) { - for(int i = 0; i < info->item_list.size(); ++i) { - const QDockAreaLayoutItem &item = info->item_list.at(i); - if (item.widgetItem) { - if (QDockWidget *dock = qobject_cast<QDockWidget*>(item.widgetItem->widget())) { - if (dock != dockwidget) { - ret += dock; - } - } - } - } - } - return ret; + Q_D(const QMainWindow); + return d->layout ? d->layout->tabifiedDockWidgets(dockwidget) : QList<QDockWidget *>(); } #endif // QT_CONFIG(tabbar) @@ -1311,10 +1296,16 @@ bool QMainWindow::event(QEvent *event) if (!d->layout->draggingWidget) break; auto dragMoveEvent = static_cast<QDragMoveEvent *>(event); - d->layout->hover(d->layout->draggingWidget, dragMoveEvent->position().toPoint()); + d->layout->hover(d->layout->draggingWidget, + mapToGlobal(dragMoveEvent->position()).toPoint()); event->accept(); return true; } + case QEvent::DragLeave: + if (!d->layout->draggingWidget) + break; + d->layout->hover(d->layout->draggingWidget, pos() - QPoint(-1, -1)); + return true; #endif default: break; |