@ -763,6 +763,7 @@ pub type DynQueryCallback<T> =
pub struct DynamicPicker < T : ui ::menu ::Item + Send > {
pub struct DynamicPicker < T : ui ::menu ::Item + Send > {
file_picker : FilePicker < T > ,
file_picker : FilePicker < T > ,
query_callback : DynQueryCallback < T > ,
query_callback : DynQueryCallback < T > ,
query : String ,
}
}
impl < T : ui ::menu ::Item + Send > DynamicPicker < T > {
impl < T : ui ::menu ::Item + Send > DynamicPicker < T > {
@ -772,6 +773,7 @@ impl<T: ui::menu::Item + Send> DynamicPicker<T> {
Self {
Self {
file_picker ,
file_picker ,
query_callback ,
query_callback ,
query : String ::new ( ) ,
}
}
}
}
}
}
@ -782,14 +784,15 @@ impl<T: Item + Send + 'static> Component for DynamicPicker<T> {
}
}
fn handle_event ( & mut self , event : & Event , cx : & mut Context ) -> EventResult {
fn handle_event ( & mut self , event : & Event , cx : & mut Context ) -> EventResult {
let prev_query = self . file_picker . picker . prompt . line ( ) . to_owned ( ) ;
let event_result = self . file_picker . handle_event ( event , cx ) ;
let event_result = self . file_picker . handle_event ( event , cx ) ;
let current_query = self . file_picker . picker . prompt . line ( ) ;
let current_query = self . file_picker . picker . prompt . line ( ) ;
if *current_query = = prev_query | | matches! ( event_result , EventResult ::Ignored ( _ ) ) {
if !matches! ( event , Event ::IdleTimeout ) | | self . query = = * current_query {
return event_result ;
return event_result ;
}
}
self . query . clone_from ( current_query ) ;
let new_options = ( self . query_callback ) ( current_query . to_owned ( ) , cx . editor ) ;
let new_options = ( self . query_callback ) ( current_query . to_owned ( ) , cx . editor ) ;
cx . jobs . callback ( async move {
cx . jobs . callback ( async move {