54519: [TC-9.3.0]: SIGSEGV during exit if dimensions are editing

This commit is contained in:
rnv 2019-03-22 10:59:36 +03:00
parent 991d2a1931
commit 4558fc1b44
3 changed files with 14 additions and 8 deletions

View File

@ -132,12 +132,14 @@ void MeasureGUI_DimensionInteractor::Disable()
myIsEnabled = false; myIsEnabled = false;
// remove event filtering from viewer windows if (myVM) {
QVector<SUIT_ViewWindow*> aViews = myVM->getViews(); // remove event filtering from viewer windows
QVector<SUIT_ViewWindow*>::iterator aViewIt = aViews.begin(); QVector<SUIT_ViewWindow*> aViews = myVM->getViews();
for ( ; aViewIt != aViews.end(); ++aViewIt ) QVector<SUIT_ViewWindow*>::iterator aViewIt = aViews.begin();
{ for ( ; aViewIt != aViews.end(); ++aViewIt )
DisconnectView( *aViewIt ); {
DisconnectView( *aViewIt );
}
} }
} }

View File

@ -29,6 +29,7 @@
#include <GeometryGUI.h> #include <GeometryGUI.h>
#include <QObject> #include <QObject>
#include <QPointer>
#include <SelectMgr_EntityOwner.hxx> #include <SelectMgr_EntityOwner.hxx>
#include <NCollection_Sequence.hxx> #include <NCollection_Sequence.hxx>
@ -165,7 +166,7 @@ private:
private: private:
GeometryGUI* myGeomGUI; GeometryGUI* myGeomGUI;
bool myIsEnabled; bool myIsEnabled;
OCCViewer_ViewManager* myVM; QPointer<OCCViewer_ViewManager> myVM;
OCCViewer_Viewer* myViewer; OCCViewer_Viewer* myViewer;
Operation myOperation; Operation myOperation;
bool myOperationStarted; bool myOperationStarted;

View File

@ -129,7 +129,7 @@ MeasureGUI_ManageDimensionsDlg::MeasureGUI_ManageDimensionsDlg( GeometryGUI* the
connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( OnDeactivateThisDialog() ) ); connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( OnDeactivateThisDialog() ) );
connect( myGeomGUI, SIGNAL( SignalCloseAllDialogs() ), this, SLOT( ClickOnCancel() ) ); connect( myGeomGUI, SIGNAL( SignalCloseAllDialogs() ), this, SLOT( ClickOnCancel() ) );
myDimensionInteractor = new MeasureGUI_DimensionInteractor( theGUI, theParent ), myDimensionInteractor = new MeasureGUI_DimensionInteractor( theGUI, this ),
SelectionIntoArgument( Selection_Object ); SelectionIntoArgument( Selection_Object );
@ -245,6 +245,9 @@ void MeasureGUI_ManageDimensionsDlg::StartSelection( const Selection theSelectio
//================================================================================= //=================================================================================
void MeasureGUI_ManageDimensionsDlg::StopSelection() void MeasureGUI_ManageDimensionsDlg::StopSelection()
{ {
if( !myGeomGUI || !myGeomGUI->getApp() || !myGeomGUI->getApp()->selectionMgr() )
return;
if ( myCurrentSelection == Selection_Object ) if ( myCurrentSelection == Selection_Object )
{ {
/* ----------------------------------------------- * /* ----------------------------------------------- *