Move cvpcb filter to a timer.
Fixes https://gitlab.com/kicad/code/kicad/issues/12445
(cherry picked from commit 1fcd7d6285
)
This commit is contained in:
parent
ba72676edb
commit
2d4bcc6557
|
@ -62,7 +62,6 @@
|
|||
CVPCB_MAINFRAME::CVPCB_MAINFRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
KIWAY_PLAYER( aKiway, aParent, FRAME_CVPCB, _( "Assign Footprints" ), wxDefaultPosition,
|
||||
wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, CVPCB_MAINFRAME_NAME ),
|
||||
m_footprintListPendingUpdate( false ),
|
||||
m_viewerPendingUpdate( false )
|
||||
{
|
||||
m_symbolsListBox = nullptr;
|
||||
|
@ -211,12 +210,17 @@ CVPCB_MAINFRAME::CVPCB_MAINFRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
|||
// Start the main processing loop
|
||||
m_toolManager->InvokeTool( "cvpcb.Control" );
|
||||
|
||||
m_filterTimer->StartOnce( 100 );
|
||||
|
||||
KIPLATFORM::APP::SetShutdownBlockReason( this, _( "Symbol to footprint changes are unsaved" ) );
|
||||
}
|
||||
|
||||
|
||||
CVPCB_MAINFRAME::~CVPCB_MAINFRAME()
|
||||
{
|
||||
// Stop the timer during destruction early to avoid potential race conditions (that do happen)
|
||||
m_filterTimer->Stop();
|
||||
|
||||
// Shutdown all running tools
|
||||
if( m_toolManager )
|
||||
m_toolManager->ShutdownAllTools();
|
||||
|
@ -372,6 +376,9 @@ void CVPCB_MAINFRAME::setupEventHandlers()
|
|||
// Attach the events to the tool dispatcher
|
||||
Bind( wxEVT_CHAR, &TOOL_DISPATCHER::DispatchWxEvent, m_toolDispatcher );
|
||||
Bind( wxEVT_CHAR_HOOK, &TOOL_DISPATCHER::DispatchWxEvent, m_toolDispatcher );
|
||||
|
||||
m_filterTimer = new wxTimer( this );
|
||||
Bind( wxEVT_TIMER, &CVPCB_MAINFRAME::onTextFilterChangedTimer, this, m_filterTimer->GetId() );
|
||||
}
|
||||
|
||||
|
||||
|
@ -422,19 +429,12 @@ void CVPCB_MAINFRAME::OnEnterFilteringText( wxCommandEvent& aEvent )
|
|||
// If the option FOOTPRINTS_LISTBOX::FILTERING_BY_TEXT_PATTERN is set, update the list
|
||||
// of available footprints which match the filter
|
||||
|
||||
if( !m_footprintListPendingUpdate )
|
||||
{
|
||||
Bind( wxEVT_IDLE, &CVPCB_MAINFRAME::updateFootprintListOnIdle, this );
|
||||
m_footprintListPendingUpdate = true;
|
||||
}
|
||||
m_filterTimer->StartOnce( 200 );
|
||||
}
|
||||
|
||||
|
||||
void CVPCB_MAINFRAME::updateFootprintListOnIdle( wxIdleEvent& aEvent )
|
||||
void CVPCB_MAINFRAME::onTextFilterChangedTimer( wxTimerEvent& aEvent )
|
||||
{
|
||||
Unbind( wxEVT_IDLE, &CVPCB_MAINFRAME::updateFootprintListOnIdle, this );
|
||||
m_footprintListPendingUpdate = false;
|
||||
|
||||
// GTK loses the search-control's focus on a Refresh event, so we record the focus and
|
||||
// insertion point here and then restore them at the end.
|
||||
bool searchCtrlHasFocus = m_tcFilterString->HasFocus();
|
||||
|
|
|
@ -357,7 +357,7 @@ private:
|
|||
|
||||
void updateFootprintViewerOnIdle( wxIdleEvent& aEvent );
|
||||
|
||||
void updateFootprintListOnIdle( wxIdleEvent& aEvent );
|
||||
void onTextFilterChangedTimer( wxTimerEvent& aEvent );
|
||||
|
||||
/**
|
||||
* Read the .equ files and populate the list of equivalents.
|
||||
|
@ -409,7 +409,7 @@ private:
|
|||
CVPCB_UNDO_REDO_LIST m_undoList;
|
||||
CVPCB_UNDO_REDO_LIST m_redoList;
|
||||
|
||||
bool m_footprintListPendingUpdate;
|
||||
wxTimer* m_filterTimer;
|
||||
bool m_viewerPendingUpdate;
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue