Skip to content

Commit d010fe7

Browse files
Fixed bug in AutoHidedockContainer that causes warnings and resizing issues
The bug caused ""setGeometry: Unable to set geometry XxY+Width+Height on QWidgetWindow/'WidgetClassWindow" warnings for OpenGL and QAxWidgets and causes resizing issues for AutoHideDockContainers that contained theses widgets
1 parent 8e7b7f5 commit d010fe7

File tree

3 files changed

+11
-31
lines changed

3 files changed

+11
-31
lines changed

demo/MainWindow.cpp

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,6 @@ void MainWindowPrivate::createContent()
493493
auto BottomDockArea = DockManager->addDockWidget(ads::BottomDockWidgetArea, createLongTextLabelDockWidget(), RighDockArea);
494494
DockManager->addDockWidget(ads::CenterDockWidgetArea, createLongTextLabelDockWidget(), RighDockArea);
495495
auto LabelDockWidget = createLongTextLabelDockWidget();
496-
std::cout << "DockWidget " << LabelDockWidget->objectName().toStdString() << std::endl;
497496
DockManager->addDockWidget(ads::CenterDockWidgetArea, LabelDockWidget, BottomDockArea);
498497

499498
// Tests CustomCloseHandling without DeleteOnClose
@@ -528,13 +527,7 @@ void MainWindowPrivate::createContent()
528527

529528
#ifdef Q_OS_WIN
530529
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
531-
// ActiveX widget only works without OpaqueUndocking and without
532-
// auto hide feature
533-
if (!ads::CDockManager::testConfigFlag(ads::CDockManager::OpaqueUndocking)
534-
&& !ads::CDockManager::testAutoHideConfigFlag(ads::CDockManager::AutoHideFeatureEnabled))
535-
{
536-
DockManager->addDockWidget(ads::CenterDockWidgetArea, createActiveXWidget(), RighDockArea);
537-
}
530+
DockManager->addDockWidget(ads::CenterDockWidgetArea, createActiveXWidget(), RighDockArea);
538531
#endif
539532
#endif
540533

@@ -679,7 +672,7 @@ CMainWindow::CMainWindow(QWidget *parent) :
679672

680673
// uncomment the following line if you want to use opaque undocking and
681674
// opaque splitter resizing
682-
// CDockManager::setConfigFlags(CDockManager::DefaultOpaqueConfig);
675+
//CDockManager::setConfigFlags(CDockManager::DefaultOpaqueConfig);
683676

684677
// uncomment the following line if you want a fixed tab width that does
685678
// not change if the visibility of the close button changes
@@ -853,16 +846,13 @@ void CMainWindow::createEditor()
853846
ads::CDockAreaWidget* EditorArea = d->LastDockedEditor ? d->LastDockedEditor->dockAreaWidget() : nullptr;
854847
if (EditorArea)
855848
{
856-
std::cout << "DockAreaCount before: " << EditorArea->dockContainer()->dockAreaCount() << std::endl;
857849
d->DockManager->setConfigFlag(ads::CDockManager::EqualSplitOnInsertion, true);
858850
d->DockManager->addDockWidget(ads::RightDockWidgetArea, DockWidget, EditorArea);
859-
std::cout << "DockAreaCount after: " << DockWidget->dockContainer()->dockAreaCount() << std::endl;
860851
}
861852
else
862853
{
863854
if (d->LastCreatedFloatingEditor)
864855
{
865-
std::cout << "LastCreated" << std::endl;
866856
d->DockManager->addDockWidget(ads::RightDockWidgetArea, DockWidget, d->LastCreatedFloatingEditor->dockAreaWidget());
867857
}
868858
else

src/AutoHideDockContainer.cpp

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -201,15 +201,15 @@ CDockContainerWidget* CAutoHideDockContainer::dockContainer() const
201201

202202

203203
//============================================================================
204-
CAutoHideDockContainer::CAutoHideDockContainer(CDockManager* DockManager, SideBarLocation area, CDockContainerWidget* parent) :
205-
Super(parent),
204+
CAutoHideDockContainer::CAutoHideDockContainer(CDockWidget* DockWidget, SideBarLocation area, CDockContainerWidget* parent) :
205+
Super(parent),
206206
d(new AutoHideDockContainerPrivate(this))
207207
{
208208
hide(); // auto hide dock container is initially always hidden
209209
d->SideTabBarArea = area;
210210
d->SideTab = componentsFactory()->createDockWidgetSideTab(nullptr);
211211
connect(d->SideTab, &CAutoHideTab::pressed, this, &CAutoHideDockContainer::toggleCollapseState);
212-
d->DockArea = new CDockAreaWidget(DockManager, parent);
212+
d->DockArea = new CDockAreaWidget(DockWidget->dockManager(), parent);
213213
d->DockArea->setObjectName("autoHideDockArea");
214214
d->DockArea->setAutoHideDockContainer(this);
215215

@@ -219,25 +219,20 @@ CAutoHideDockContainer::CAutoHideDockContainer(CDockManager* DockManager, SideBa
219219
d->Layout->setContentsMargins(0, 0, 0, 0);
220220
d->Layout->setSpacing(0);
221221
setLayout(d->Layout);
222-
d->Layout->addWidget(d->DockArea);
223222
d->ResizeHandle = new CResizeHandle(edgeFromSideTabBarArea(area), this);
224223
d->ResizeHandle->setMinResizeSize(64);
225224
bool OpaqueResize = CDockManager::testConfigFlag(CDockManager::OpaqueSplitterResize);
226225
d->ResizeHandle->setOpaqueResize(OpaqueResize);
227226
d->Layout->insertWidget(resizeHandleLayoutPosition(area), d->ResizeHandle);
228227
d->Size = d->DockArea->size();
229228

230-
updateSize();
231-
parent->registerAutoHideWidget(this);
232-
}
233-
234-
235-
//============================================================================
236-
CAutoHideDockContainer::CAutoHideDockContainer(CDockWidget* DockWidget, SideBarLocation area, CDockContainerWidget* parent) :
237-
CAutoHideDockContainer(DockWidget->dockManager(), area, parent)
238-
{
239229
addDockWidget(DockWidget);
240-
hide();
230+
parent->registerAutoHideWidget(this);
231+
// The dock area should not be added to the layout before it contains the
232+
// dock widget. If you add it to the layout before it contains the dock widget
233+
// then you will likely see this warning for OpenGL widgets or QAxWidgets:
234+
// setGeometry: Unable to set geometry XxY+Width+Height on QWidgetWindow/'WidgetClassWindow
235+
d->Layout->addWidget(d->DockArea);
241236
}
242237

243238

src/AutoHideDockContainer.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,6 @@ class ADS_EXPORT CAutoHideDockContainer : public QFrame
7979

8080
public:
8181
using Super = QFrame;
82-
/**
83-
* Create Auto Hide widget with a dock manager
84-
*/
85-
CAutoHideDockContainer(CDockManager* DockManager, SideBarLocation area,
86-
CDockContainerWidget* parent);
8782

8883
/**
8984
* Create Auto Hide widget with the given dock widget

0 commit comments

Comments
 (0)