Skip to content

Commit

Permalink
Fix crashes when QgsDockableWidgetHelper is used in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Mar 30, 2023
1 parent 1822998 commit 5a70ac2
Showing 1 changed file with 18 additions and 11 deletions.
29 changes: 18 additions & 11 deletions src/gui/qgsdockablewidgethelper.cpp
Expand Up @@ -57,10 +57,13 @@ QgsDockableWidgetHelper::~QgsDockableWidgetHelper()
{
mDockGeometry = mDock->geometry();
mIsDockFloating = mDock->isFloating();
mDockArea = mOwnerWindow->dockWidgetArea( mDock );
if ( mOwnerWindow )
mDockArea = mOwnerWindow->dockWidgetArea( mDock );

mDock->setWidget( nullptr );
mOwnerWindow->removeDockWidget( mDock );

if ( mOwnerWindow )
mOwnerWindow->removeDockWidget( mDock );
mDock->deleteLater();
mDock = nullptr;
}
Expand Down Expand Up @@ -88,7 +91,8 @@ void QgsDockableWidgetHelper::writeXml( QDomElement &viewDom )
{
mDockGeometry = mDock->geometry();
mIsDockFloating = mDock->isFloating();
mDockArea = mOwnerWindow->dockWidgetArea( mDock );
if ( mOwnerWindow )
mDockArea = mOwnerWindow->dockWidgetArea( mDock );
}

viewDom.setAttribute( QStringLiteral( "x" ), mDockGeometry.x() );
Expand All @@ -101,7 +105,7 @@ void QgsDockableWidgetHelper::writeXml( QDomElement &viewDom )

if ( mDock )
{
const QList<QDockWidget * > tabSiblings = mOwnerWindow->tabifiedDockWidgets( mDock );
const QList<QDockWidget * > tabSiblings = mOwnerWindow ? mOwnerWindow->tabifiedDockWidgets( mDock ) : QList<QDockWidget * >();
QDomElement tabSiblingsElement = viewDom.ownerDocument().createElement( QStringLiteral( "tab_siblings" ) );
for ( QDockWidget *dock : tabSiblings )
{
Expand Down Expand Up @@ -171,7 +175,7 @@ void QgsDockableWidgetHelper::readXml( const QDomElement &viewDom )
void QgsDockableWidgetHelper::setWidget( QWidget *widget )
{
// Make sure the old mWidget is not stuck as a child of mDialog or mDock
if ( mWidget )
if ( mWidget && mOwnerWindow )
{
mWidget->setParent( mOwnerWindow );
}
Expand Down Expand Up @@ -201,7 +205,7 @@ QDialog *QgsDockableWidgetHelper::dialog()
void QgsDockableWidgetHelper::toggleDockMode( bool docked )
{
// Make sure the old mWidget is not stuck as a child of mDialog or mDock
if ( mWidget )
if ( mWidget && mOwnerWindow )
{
mWidget->setParent( mOwnerWindow );
}
Expand All @@ -211,10 +215,12 @@ void QgsDockableWidgetHelper::toggleDockMode( bool docked )
{
mDockGeometry = mDock->geometry();
mIsDockFloating = mDock->isFloating();
mDockArea = mOwnerWindow->dockWidgetArea( mDock );
if ( mOwnerWindow )
mDockArea = mOwnerWindow->dockWidgetArea( mDock );

mDock->setWidget( nullptr );
mOwnerWindow->removeDockWidget( mDock );
if ( mOwnerWindow )
mOwnerWindow->removeDockWidget( mDock );
delete mDock;
mDock = nullptr;
}
Expand Down Expand Up @@ -254,7 +260,8 @@ void QgsDockableWidgetHelper::toggleDockMode( bool docked )
{
mDockGeometry = mDock->geometry();
mIsDockFloating = mDock->isFloating();
mDockArea = mOwnerWindow->dockWidgetArea( mDock );
if ( mOwnerWindow )
mDockArea = mOwnerWindow->dockWidgetArea( mDock );
emit closed();
} );

Expand Down Expand Up @@ -380,7 +387,7 @@ void QgsDockableWidgetHelper::setupDockWidget( const QStringList &tabSiblings )
return;

mDock->setFloating( mIsDockFloating );
if ( mDockGeometry.isEmpty() )
if ( mDockGeometry.isEmpty() && mOwnerWindow )
{
const QFontMetrics fm( mOwnerWindow->font() );
const int initialDockSize = fm.horizontalAdvance( '0' ) * 50;
Expand All @@ -396,7 +403,7 @@ void QgsDockableWidgetHelper::setupDockWidget( const QStringList &tabSiblings )
{
sAddTabifiedDockWidgetFunction( mDockArea, mDock, mTabifyWith, mRaiseTab );
}
else
else if ( mOwnerWindow )
{
mOwnerWindow->addDockWidget( mDockArea, mDock );
}
Expand Down

0 comments on commit 5a70ac2

Please sign in to comment.