diff --git a/cvpcb/cvpcb_mainframe.cpp b/cvpcb/cvpcb_mainframe.cpp
index 2bd26080aa810958b4dbcca85c978c39af22a0c9..ca20e0e3e6959d787b4a4256a0f7ef2fca438eda 100644
--- a/cvpcb/cvpcb_mainframe.cpp
+++ b/cvpcb/cvpcb_mainframe.cpp
@@ -421,6 +421,10 @@ 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
 
+    // GTK loses the search-control's focus when updating the footprints list box, so we record
+    // the insertion point here and then restore it (and the focus) at the end.
+    long pos = m_tcFilterString->GetInsertionPoint();
+
     COMPONENT* symbol = GetSelectedComponent();
     wxString   libraryName = m_librariesListBox->GetSelectedLibrary();
 
@@ -435,6 +439,9 @@ void CVPCB_MAINFRAME::OnEnterFilteringText( wxCommandEvent& aEvent )
     RefreshFootprintViewer();
 
     DisplayStatus();
+
+    m_tcFilterString->SetFocus();
+    m_tcFilterString->SetInsertionPoint( pos );
 }