Skip to content

Commit e2929ad

Browse files
Fixed DockContainerWidget.cpp contentRect() function to work properly even if no dock widget is visible in container
1 parent b801f06 commit e2929ad

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

src/AutoHideDockContainer.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,13 +230,15 @@ CAutoHideDockContainer::CAutoHideDockContainer(CDockWidget* DockWidget, SideBarL
230230
//============================================================================
231231
void CAutoHideDockContainer::updateSize()
232232
{
233+
std::cout << "CAutoHideDockContainer::updateSize()" << std::endl;
233234
auto dockContainerParent = dockContainer();
234235
if (!dockContainerParent)
235236
{
236237
return;
237238
}
238239

239240
auto rect = dockContainerParent->contentRect();
241+
qDebug() << "dockContainerParent->contentRect() " << rect;
240242

241243
switch (sideBarLocation())
242244
{

src/DockContainerWidget.cpp

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ class DockContainerWidgetPrivate
145145
QList<CAutoHideDockContainer*> AutoHideWidgets;
146146
QMap<SideBarLocation, CAutoHideSideBar*> SideTabBarWidgets;
147147
QGridLayout* Layout = nullptr;
148-
QSplitter* RootSplitter = nullptr;
148+
CDockSplitter* RootSplitter = nullptr;
149149
bool isFloating = false;
150150
CDockAreaWidget* LastAddedAreaCache[5];
151151
int VisibleDockAreaCount = -1;
@@ -465,15 +465,15 @@ void DockContainerWidgetPrivate::dropIntoContainer(CFloatingDockContainer* Float
465465
CDockContainerWidget* FloatingDockContainer = FloatingWidget->dockContainer();
466466
auto NewDockAreas = FloatingDockContainer->findChildren<CDockAreaWidget*>(
467467
QString(), Qt::FindChildrenRecursively);
468-
QSplitter* Splitter = RootSplitter;
468+
auto Splitter = RootSplitter;
469469

470470
if (DockAreas.count() <= 1)
471471
{
472472
Splitter->setOrientation(InsertParam.orientation());
473473
}
474474
else if (Splitter->orientation() != InsertParam.orientation())
475475
{
476-
QSplitter* NewSplitter = newSplitter(InsertParam.orientation());
476+
auto NewSplitter = newSplitter(InsertParam.orientation());
477477
QLayoutItem* li = Layout->replaceWidget(Splitter, NewSplitter);
478478
NewSplitter->addWidget(Splitter);
479479
updateSplitterHandles(NewSplitter);
@@ -1248,7 +1248,7 @@ void DockContainerWidgetPrivate::addDockArea(CDockAreaWidget* NewDockArea, DockW
12481248
}
12491249
else
12501250
{
1251-
QSplitter* NewSplitter = newSplitter(InsertParam.orientation());
1251+
auto NewSplitter = newSplitter(InsertParam.orientation());
12521252
if (InsertParam.append())
12531253
{
12541254
QLayoutItem* li = Layout->replaceWidget(Splitter, NewSplitter);
@@ -1583,7 +1583,7 @@ void CDockContainerWidget::removeDockArea(CDockAreaWidget* area)
15831583
}
15841584

15851585
QWidget* widget = Splitter->widget(0);
1586-
QSplitter* ChildSplitter = qobject_cast<QSplitter*>(widget);
1586+
auto ChildSplitter = qobject_cast<CDockSplitter*>(widget);
15871587
// If the one and only content widget of the splitter is not a splitter
15881588
// then we are finished
15891589
if (!ChildSplitter)
@@ -1913,8 +1913,8 @@ bool CDockContainerWidget::restoreState(CDockingStateReader& s, bool Testing)
19131913
}
19141914

19151915
d->Layout->replaceWidget(d->RootSplitter, NewRootSplitter);
1916-
QSplitter* OldRoot = d->RootSplitter;
1917-
d->RootSplitter = qobject_cast<QSplitter*>(NewRootSplitter);
1916+
auto OldRoot = d->RootSplitter;
1917+
d->RootSplitter = qobject_cast<CDockSplitter*>(NewRootSplitter);
19181918
OldRoot->deleteLater();
19191919

19201920
return true;
@@ -2132,7 +2132,21 @@ QRect CDockContainerWidget::contentRect() const
21322132
return QRect();
21332133
}
21342134

2135-
return d->RootSplitter->geometry();
2135+
if (d->RootSplitter->hasVisibleContent())
2136+
{
2137+
return d->RootSplitter->geometry();
2138+
}
2139+
else
2140+
{
2141+
auto ContentRect = this->rect();
2142+
ContentRect.adjust(
2143+
sideTabBar(SideBarLeft)->sizeHint().width(),
2144+
sideTabBar(SideBarTop)->sizeHint().height(),
2145+
-sideTabBar(SideBarRight)->sizeHint().width(),
2146+
-sideTabBar(SideBarBottom)->sizeHint().height());
2147+
2148+
return ContentRect;
2149+
}
21362150
}
21372151

21382152

0 commit comments

Comments
 (0)