summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets/qdockarealayout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/widgets/qdockarealayout.cpp')
-rw-r--r--src/widgets/widgets/qdockarealayout.cpp53
1 files changed, 37 insertions, 16 deletions
diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp
index b347e93807..a7e865ff05 100644
--- a/src/widgets/widgets/qdockarealayout.cpp
+++ b/src/widgets/widgets/qdockarealayout.cpp
@@ -2617,6 +2617,21 @@ void QDockAreaLayout::remove(const QList<int> &path)
docks[index].remove(path.mid(1));
}
+void QDockAreaLayout::removePlaceHolder(const QString &name)
+{
+ QList<int> index = indexOfPlaceHolder(name);
+ if (!index.isEmpty())
+ remove(index);
+ foreach (QDockWidgetGroupWindow *dwgw, mainWindow->findChildren<QDockWidgetGroupWindow *>(
+ QString(), Qt::FindDirectChildrenOnly)) {
+ index = dwgw->layoutInfo()->indexOfPlaceHolder(name);
+ if (!index.isEmpty()) {
+ dwgw->layoutInfo()->remove(index);
+ dwgw->destroyOrHideIfEmpty();
+ }
+ }
+}
+
static inline int qMax(int i1, int i2, int i3) { return qMax(i1, qMax(i2, i3)); }
void QDockAreaLayout::getGrid(QVector<QLayoutStruct> *_ver_struct_list,
@@ -3043,15 +3058,27 @@ QRect QDockAreaLayout::constrainedRect(QRect rect, QWidget* widget)
bool QDockAreaLayout::restoreDockWidget(QDockWidget *dockWidget)
{
- QList<int> index = indexOfPlaceHolder(dockWidget->objectName());
- if (index.isEmpty())
- return false;
+ QDockAreaLayoutItem *item = 0;
+ foreach (QDockWidgetGroupWindow *dwgw, mainWindow->findChildren<QDockWidgetGroupWindow *>(
+ QString(), Qt::FindDirectChildrenOnly)) {
+ QList<int> index = dwgw->layoutInfo()->indexOfPlaceHolder(dockWidget->objectName());
+ if (!index.isEmpty()) {
+ dockWidget->setParent(dwgw);
+ item = const_cast<QDockAreaLayoutItem *>(&dwgw->layoutInfo()->item(index));
+ break;
+ }
+ }
+ if (!item) {
+ QList<int> index = indexOfPlaceHolder(dockWidget->objectName());
+ if (index.isEmpty())
+ return false;
+ item = const_cast<QDockAreaLayoutItem *>(&this->item(index));
+ }
- QDockAreaLayoutItem &item = this->item(index);
- QPlaceHolderItem *placeHolder = item.placeHolderItem;
+ QPlaceHolderItem *placeHolder = item->placeHolderItem;
Q_ASSERT(placeHolder != 0);
- item.widgetItem = new QDockWidgetItem(dockWidget);
+ item->widgetItem = new QDockWidgetItem(dockWidget);
if (placeHolder->window) {
const QRect r = constrainedRect(placeHolder->topLevelRect, dockWidget);
@@ -3063,7 +3090,7 @@ bool QDockAreaLayout::restoreDockWidget(QDockWidget *dockWidget)
dockWidget->d_func()->setWindowState(true);
#endif
- item.placeHolderItem = 0;
+ item->placeHolderItem = 0;
delete placeHolder;
return true;
@@ -3099,9 +3126,7 @@ void QDockAreaLayout::addDockWidget(QInternal::DockPosition pos, QDockWidget *do
info = new_info;
}
- QList<int> index = indexOfPlaceHolder(dockWidget->objectName());
- if (!index.isEmpty())
- remove(index);
+ removePlaceHolder(dockWidget->objectName());
}
void QDockAreaLayout::tabifyDockWidget(QDockWidget *first, QDockWidget *second)
@@ -3114,9 +3139,7 @@ void QDockAreaLayout::tabifyDockWidget(QDockWidget *first, QDockWidget *second)
Q_ASSERT(info != 0);
info->tab(path.last(), new QDockWidgetItem(second));
- QList<int> index = indexOfPlaceHolder(second->objectName());
- if (!index.isEmpty())
- remove(index);
+ removePlaceHolder(second->objectName());
}
void QDockAreaLayout::resizeDocks(const QList<QDockWidget *> &docks,
@@ -3178,9 +3201,7 @@ void QDockAreaLayout::splitDockWidget(QDockWidget *after,
Q_ASSERT(info != 0);
info->split(path.last(), orientation, new QDockWidgetItem(dockWidget));
- QList<int> index = indexOfPlaceHolder(dockWidget->objectName());
- if (!index.isEmpty())
- remove(index);
+ removePlaceHolder(dockWidget->objectName());
}
void QDockAreaLayout::apply(bool animate)