Fix potential crash if canvas is deleted before cad dock

This commit is contained in:
Nyall Dawson 2022-05-19 12:57:19 +10:00
parent 0434469dd0
commit b2b5ee278c
3 changed files with 9 additions and 4 deletions

View File

@ -10,6 +10,7 @@
class QgsAdvancedDigitizingFloater : QWidget
{
%Docstring(signature="appended")

View File

@ -24,7 +24,9 @@
#include "qgsfocuswatcher.h"
QgsAdvancedDigitizingFloater::QgsAdvancedDigitizingFloater( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget )
: QWidget( canvas->viewport() ), mMapCanvas( canvas ), mCadDockWidget( cadDockWidget )
: QWidget( canvas->viewport() )
, mMapCanvas( canvas )
, mCadDockWidget( cadDockWidget )
{
setupUi( this );
@ -117,7 +119,7 @@ QgsAdvancedDigitizingFloater::QgsAdvancedDigitizingFloater( QgsMapCanvas *canvas
bool QgsAdvancedDigitizingFloater::eventFilter( QObject *obj, QEvent *event )
{
if ( mCadDockWidget->cadEnabled() && mActive )
if ( mCadDockWidget && mCadDockWidget->cadEnabled() && mActive )
{
if ( event->type() == QEvent::MouseMove )
{
@ -163,7 +165,7 @@ void QgsAdvancedDigitizingFloater::updatePos( const QPoint &pos )
void QgsAdvancedDigitizingFloater::hideIfDisabled()
{
if ( ! mCadDockWidget->cadEnabled() || ! mActive )
if ( !mCadDockWidget || ! mCadDockWidget->cadEnabled() || ! mActive )
{
setVisible( false );
}

View File

@ -24,6 +24,8 @@
#include "qgis_gui.h"
#include "qgis_sip.h"
#include <QPointer>
class QgsMapCanvas;
class QgsAdvancedDigitizingDockWidget;
@ -106,7 +108,7 @@ class GUI_EXPORT QgsAdvancedDigitizingFloater : public QWidget, private Ui::QgsA
QgsMapCanvas *mMapCanvas = nullptr;
//! pointer to map cad docker widget
QgsAdvancedDigitizingDockWidget *mCadDockWidget = nullptr;
QPointer< QgsAdvancedDigitizingDockWidget > mCadDockWidget;
/**
* event filter to track mouse position