diff --git a/common/rc_item.cpp b/common/rc_item.cpp index bef3f148ac..a04445b9c7 100644 --- a/common/rc_item.cpp +++ b/common/rc_item.cpp @@ -402,7 +402,7 @@ unsigned int RC_TREE_MODEL::GetChildren( wxDataViewItem const& aItem, void RC_TREE_MODEL::GetValue( wxVariant& aVariant, wxDataViewItem const& aItem, unsigned int aCol ) const { - if( !aItem.IsOk() ) + if( !aItem.IsOk() || m_view->IsFrozen() ) return; const RC_TREE_NODE* node = ToNode( aItem ); @@ -477,7 +477,7 @@ bool RC_TREE_MODEL::GetAttr( wxDataViewItem const& aItem, unsigned int aCol, wxDataViewItemAttr& aAttr ) const { - if( !aItem.IsOk() ) + if( !aItem.IsOk() || m_view->IsFrozen() ) return false; const RC_TREE_NODE* node = ToNode( aItem ); @@ -738,6 +738,8 @@ void RC_TREE_MODEL::NextMarker() void RC_TREE_MODEL::SelectMarker( const MARKER_BASE* aMarker ) { + wxCHECK( !m_view->IsFrozen(), /* void */ ); + for( RC_TREE_NODE* candidate : m_tree ) { if( candidate->m_RcItem->GetParent() == aMarker ) @@ -751,6 +753,8 @@ void RC_TREE_MODEL::SelectMarker( const MARKER_BASE* aMarker ) void RC_TREE_MODEL::CenterMarker( const MARKER_BASE* aMarker ) { + wxCHECK( !m_view->IsFrozen(), /* void */ ); + for( RC_TREE_NODE* candidate : m_tree ) { if( candidate->m_RcItem->GetParent() == aMarker ) diff --git a/eeschema/dialogs/dialog_erc.cpp b/eeschema/dialogs/dialog_erc.cpp index da8559bede..d5f478ddf9 100644 --- a/eeschema/dialogs/dialog_erc.cpp +++ b/eeschema/dialogs/dialog_erc.cpp @@ -934,6 +934,9 @@ void DIALOG_ERC::SelectMarker( const SCH_MARKER* aMarker ) void DIALOG_ERC::centerMarkerIdleHandler( wxIdleEvent& aEvent ) { + if( m_markerTreeModel->GetView()->IsFrozen() ) + return; + m_markerTreeModel->CenterMarker( m_centerMarkerOnIdle ); m_centerMarkerOnIdle = nullptr; Unbind( wxEVT_IDLE, &DIALOG_ERC::centerMarkerIdleHandler, this ); diff --git a/include/rc_item.h b/include/rc_item.h index a2ade49ee1..d5a3ee2a0d 100644 --- a/include/rc_item.h +++ b/include/rc_item.h @@ -240,6 +240,8 @@ public: return static_cast( aItem.GetID() ); } + const wxDataViewCtrl* GetView() const { return m_view; } + static KIID ToUUID( wxDataViewItem aItem ); RC_TREE_MODEL( EDA_DRAW_FRAME* aParentFrame, wxDataViewCtrl* aView ); diff --git a/pcbnew/dialogs/dialog_footprint_checker.cpp b/pcbnew/dialogs/dialog_footprint_checker.cpp index c9af6f643b..62a36a6834 100644 --- a/pcbnew/dialogs/dialog_footprint_checker.cpp +++ b/pcbnew/dialogs/dialog_footprint_checker.cpp @@ -216,6 +216,9 @@ void DIALOG_FOOTPRINT_CHECKER::SelectMarker( const PCB_MARKER* aMarker ) void DIALOG_FOOTPRINT_CHECKER::centerMarkerIdleHandler( wxIdleEvent& aEvent ) { + if( m_markersTreeModel->GetView()->IsFrozen() ) + return; + m_markersTreeModel->CenterMarker( m_centerMarkerOnIdle ); m_centerMarkerOnIdle = nullptr; Unbind( wxEVT_IDLE, &DIALOG_FOOTPRINT_CHECKER::centerMarkerIdleHandler, this );