Put wxSearchCtrl back by eliminating the excess focus events that in Windows land cause a "select all"

The setfocus calls were really because of the overtly aggressive mouse handler for the canvas that has been patched out.
This commit is contained in:
Marek Roszko 2021-07-08 22:29:32 -04:00
parent 046fb58183
commit 11cd8738a3
2 changed files with 6 additions and 40 deletions

View File

@ -138,9 +138,9 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent
wxPanel* libPanel = new wxPanel( this ); wxPanel* libPanel = new wxPanel( this );
wxSizer* libSizer = new wxBoxSizer( wxVERTICAL ); wxSizer* libSizer = new wxBoxSizer( wxVERTICAL );
m_libFilter = new wxTextCtrl( libPanel, ID_MODVIEW_LIB_FILTER, wxEmptyString, m_libFilter = new wxSearchCtrl( libPanel, ID_MODVIEW_LIB_FILTER, wxEmptyString,
wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER ); wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
m_libFilter->SetHint( _( "Filter" ) ); m_libFilter->SetDescriptiveText( _( "Filter" ) );
libSizer->Add( m_libFilter, 0, wxEXPAND, 5 ); libSizer->Add( m_libFilter, 0, wxEXPAND, 5 );
m_libList = new wxListBox( libPanel, ID_MODVIEW_LIB_LIST, wxDefaultPosition, wxDefaultSize, m_libList = new wxListBox( libPanel, ID_MODVIEW_LIB_LIST, wxDefaultPosition, wxDefaultSize,
@ -153,9 +153,9 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent
wxPanel* fpPanel = new wxPanel( this ); wxPanel* fpPanel = new wxPanel( this );
wxSizer* fpSizer = new wxBoxSizer( wxVERTICAL ); wxSizer* fpSizer = new wxBoxSizer( wxVERTICAL );
m_fpFilter = new wxTextCtrl( fpPanel, ID_MODVIEW_FOOTPRINT_FILTER, wxEmptyString, m_fpFilter = new wxSearchCtrl( fpPanel, ID_MODVIEW_FOOTPRINT_FILTER, wxEmptyString,
wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER ); wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
m_fpFilter->SetHint( _( "Filter" ) ); m_fpFilter->SetDescriptiveText( _( "Filter" ) );
m_fpFilter->SetToolTip( m_fpFilter->SetToolTip(
_( "Filter on footprint name, keywords, description and pad count.\n" _( "Filter on footprint name, keywords, description and pad count.\n"
"Search terms are separated by spaces. All search terms must match.\n" "Search terms are separated by spaces. All search terms must match.\n"
@ -532,31 +532,17 @@ void FOOTPRINT_VIEWER_FRAME::OnCharHook( wxKeyEvent& aEvent )
{ {
if( aEvent.GetKeyCode() == WXK_UP ) if( aEvent.GetKeyCode() == WXK_UP )
{ {
wxWindow* focused = FindFocus();
if( m_libFilter->HasFocus() || m_libList->HasFocus() ) if( m_libFilter->HasFocus() || m_libList->HasFocus() )
selectPrev( m_libList ); selectPrev( m_libList );
else else
selectPrev( m_fpList ); selectPrev( m_fpList );
// Need to reset the focus after selection due to GTK mouse-refresh
// that captures the mouse into the canvas to update scrollbars
if( focused )
focused->SetFocus();
} }
else if( aEvent.GetKeyCode() == WXK_DOWN ) else if( aEvent.GetKeyCode() == WXK_DOWN )
{ {
wxWindow* focused = FindFocus();
if( m_libFilter->HasFocus() || m_libList->HasFocus() ) if( m_libFilter->HasFocus() || m_libList->HasFocus() )
selectNext( m_libList ); selectNext( m_libList );
else else
selectNext( m_fpList ); selectNext( m_fpList );
// Need to reset the focus after selection due to GTK mouse-refresh
// that captures the mouse into the canvas to update scrollbars
if( focused )
focused->SetFocus();
} }
else if( aEvent.GetKeyCode() == WXK_TAB && m_libFilter->HasFocus() ) else if( aEvent.GetKeyCode() == WXK_TAB && m_libFilter->HasFocus() )
{ {
@ -638,16 +624,6 @@ void FOOTPRINT_VIEWER_FRAME::ClickOnLibList( wxCommandEvent& aEvent )
ReCreateFootprintList(); ReCreateFootprintList();
UpdateTitle(); UpdateTitle();
// The m_libList has now the focus, in order to be able to use arrow keys
// to navigate inside the list.
// the gal canvas must not steal the focus to allow navigation
GetCanvas()->SetStealsFocus( false );
if( filterFocus )
m_libFilter->SetFocus();
else
m_libList->SetFocus();
} }
@ -699,16 +675,6 @@ void FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList( wxCommandEvent& aEvent )
GetCanvas()->Refresh(); GetCanvas()->Refresh();
Update3DView( true, true ); Update3DView( true, true );
} }
// The m_fpList has now the focus, in order to be able to use arrow keys
// to navigate inside the list.
// the gal canvas must not steal the focus to allow navigation
GetCanvas()->SetStealsFocus( false );
if( filterFocus )
m_fpFilter->SetFocus();
else
m_fpList->SetFocus();
} }

View File

@ -167,9 +167,9 @@ private:
friend struct PCB::IFACE; // constructor called from here only friend struct PCB::IFACE; // constructor called from here only
wxTextCtrl* m_libFilter; wxSearchCtrl* m_libFilter;
wxListBox* m_libList; // The list of library names. wxListBox* m_libList; // The list of library names.
wxTextCtrl* m_fpFilter; wxSearchCtrl* m_fpFilter;
wxListBox* m_fpList; // The list of footprint names. wxListBox* m_fpList; // The list of footprint names.
bool m_autoZoom; bool m_autoZoom;