From f1e2f142a67ee6756aaa5c31c66b239e66098b21 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Sat, 13 Oct 2018 19:41:45 +0100 Subject: [PATCH] Work-around for preference crash with multiple GAL docs open. --- include/pcb_base_frame.h | 8 ++++++-- pcbnew/pcb_base_frame.cpp | 31 ++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/include/pcb_base_frame.h b/include/pcb_base_frame.h index c4e3a578cf..c6ee8cbdb0 100644 --- a/include/pcb_base_frame.h +++ b/include/pcb_base_frame.h @@ -74,9 +74,11 @@ public: int m_FastGrid2; // 2nd fast grid setting (index in EDA_DRAW_FRAME::m_gridSelectBox) protected: - BOARD* m_Pcb; - GENERAL_COLLECTOR* m_Collector; + BOARD* m_Pcb; + GENERAL_COLLECTOR* m_Collector; + PCB_GENERAL_SETTINGS m_configSettings; + bool m_toolbarsDirty; void updateGridSelectBox(); void updateZoomSelectBox(); @@ -583,6 +585,8 @@ public: virtual void OnSwitchCanvas( wxCommandEvent& aEvent ); + void OnUpdateToolbars( wxUpdateUIEvent& aEvent ); + // User interface update event handlers. void OnUpdateCoordType( wxUpdateUIEvent& aEvent ); void OnUpdatePadDrawMode( wxUpdateUIEvent& aEvent ); diff --git a/pcbnew/pcb_base_frame.cpp b/pcbnew/pcb_base_frame.cpp index af181bd1ef..a6c2202997 100644 --- a/pcbnew/pcb_base_frame.cpp +++ b/pcbnew/pcb_base_frame.cpp @@ -88,6 +88,7 @@ BEGIN_EVENT_TABLE( PCB_BASE_FRAME, EDA_DRAW_FRAME ) EVT_TOOL( ID_TB_OPTIONS_SHOW_MODULE_EDGE_SKETCH, PCB_BASE_FRAME::OnToggleEdgeDrawMode ) EVT_TOOL( ID_TB_OPTIONS_SHOW_MODULE_TEXT_SKETCH, PCB_BASE_FRAME::OnToggleTextDrawMode ) + EVT_UPDATE_UI( ID_H_TOOLBAR, PCB_BASE_FRAME::OnUpdateToolbars ) EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_POLAR_COORD, PCB_BASE_FRAME::OnUpdateCoordType ) EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_PADS_SKETCH, PCB_BASE_FRAME::OnUpdatePadDrawMode ) EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_GRAPHIC_SKETCH, PCB_BASE_FRAME::OnUpdateGraphicDrawMode ) @@ -108,10 +109,10 @@ PCB_BASE_FRAME::PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize, long aStyle, const wxString & aFrameName ) : EDA_DRAW_FRAME( aKiway, aParent, aFrameType, aTitle, aPos, aSize, aStyle, aFrameName ), - m_configSettings( aFrameType ) + m_Pcb( nullptr ), + m_configSettings( aFrameType ), + m_toolbarsDirty( false ) { - m_Pcb = NULL; - m_UserGridSize = wxPoint( (int) 10 * IU_PER_MILS, (int) 10 * IU_PER_MILS ); m_Collector = new GENERAL_COLLECTOR(); @@ -477,10 +478,7 @@ void PCB_BASE_FRAME::ShowChangedLanguage() EDA_DRAW_FRAME::ShowChangedLanguage(); // tooltips in toolbars - ReCreateHToolbar(); - ReCreateAuxiliaryToolbar(); - ReCreateVToolbar(); - ReCreateOptToolbar(); + m_toolbarsDirty = true; // status bar UpdateMsgPanel(); @@ -1064,10 +1062,7 @@ void PCB_BASE_FRAME::CommonSettingsChanged() { EDA_DRAW_FRAME::CommonSettingsChanged(); - ReCreateHToolbar(); - ReCreateAuxiliaryToolbar(); - ReCreateVToolbar(); - ReCreateOptToolbar(); + m_toolbarsDirty = true; EDA_3D_VIEWER* viewer = Get3DViewerFrame(); @@ -1080,6 +1075,20 @@ void PCB_BASE_FRAME::CommonSettingsChanged() } +void PCB_BASE_FRAME::OnUpdateToolbars( wxUpdateUIEvent& aEvent ) +{ + if( m_toolbarsDirty ) + { + ReCreateHToolbar(); + ReCreateAuxiliaryToolbar(); + ReCreateVToolbar(); + ReCreateOptToolbar(); + + m_toolbarsDirty = false; + } +} + + void PCB_BASE_FRAME::OnModify() { GetScreen()->SetModify();