From a2234b348dea91c16d8749c007710a699b8010d9 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Wed, 26 Feb 2020 17:34:25 +0000 Subject: [PATCH] Another attempt to work around wxDataViewCtrl bug on GTK. --- pcbnew/drc/drc_tree_model.h | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/pcbnew/drc/drc_tree_model.h b/pcbnew/drc/drc_tree_model.h index 9b4b8ff4bf..ebfe881d1c 100644 --- a/pcbnew/drc/drc_tree_model.h +++ b/pcbnew/drc/drc_tree_model.h @@ -225,7 +225,14 @@ public: void SetProvider( DRC_ITEMS_PROVIDER* aProvider ) { - Cleared(); + wxWindowUpdateLocker updateLock( m_view ); + + // Even with the updateLock, wxWidgets sometimes ties its knickers in + // a knot when trying to run a wxdataview_selection_changed_callback() + // on a row that has been deleted. + m_view->UnselectAll(); + + BeforeReset(); delete m_drcItemsProvider; m_drcItemsProvider = aProvider; @@ -242,16 +249,10 @@ public: if( drcItem->HasSecondItem() ) node.m_Children.emplace_back( &node, drcItem, DRC_TREE_NODE::AUX_ITEM ); - - wxDataViewItemArray childItems; - - for( DRC_TREE_NODE& child : node.m_Children ) - childItems.Add( ToItem( &child ) ); - - ItemAdded( ToItem( nullptr ), ToItem( &node ) ); - ItemsAdded( ToItem( &node ), childItems ); } + AfterReset(); + ExpandAll(); }