add autofocus, move label to placeholder, add search and clear icons

This commit is contained in:
sanua356 2026-08-16 10:30:57 +03:00
parent 9a4f78aa75
commit 6273fe6505

View file

@ -395,6 +395,7 @@ pub enum Message {
OpenWithBrowse, OpenWithBrowse,
OpenWithDialog(Option<Entity>), OpenWithDialog(Option<Entity>),
OpenWithSelection(usize), OpenWithSelection(usize),
OpenWithSearchClear,
#[cfg(all(feature = "wayland", feature = "desktop-applet"))] #[cfg(all(feature = "wayland", feature = "desktop-applet"))]
Overlap(window::Id, OverlapNotifyEvent), Overlap(window::Id, OverlapNotifyEvent),
Paste(Option<Entity>), Paste(Option<Entity>),
@ -3835,7 +3836,8 @@ impl Application for App {
let Some(path) = item.path_opt() else { let Some(path) = item.path_opt() else {
continue; continue;
}; };
return self.push_dialog( return Task::batch([
self.push_dialog(
DialogPage::OpenWith { DialogPage::OpenWith {
path: path.clone(), path: path.clone(),
mime: item.mime.clone(), mime: item.mime.clone(),
@ -3849,7 +3851,9 @@ impl Application for App {
search_app_name: String::new(), search_app_name: String::new(),
}, },
Some(CONFIRM_OPEN_WITH_BUTTON_ID.clone()), Some(CONFIRM_OPEN_WITH_BUTTON_ID.clone()),
); ),
widget::text_input::focus(self.dialog_text_input.clone()),
]);
} }
} }
} }
@ -3858,6 +3862,14 @@ impl Application for App {
*selected = index; *selected = index;
} }
} }
Message::OpenWithSearchClear => {
if let Some(DialogPage::OpenWith {
search_app_name, ..
}) = self.dialog_pages.front_mut()
{
*search_app_name = String::new();
}
}
Message::Paste(entity_opt) => { Message::Paste(entity_opt) => {
let entity = entity_opt.unwrap_or_else(|| self.tab_model.active()); let entity = entity_opt.unwrap_or_else(|| self.tab_model.active());
if let Some(tab) = self.tab_model.data_mut::<Tab>(entity) if let Some(tab) = self.tab_model.data_mut::<Tab>(entity)
@ -6049,10 +6061,9 @@ impl Application for App {
widget::button::standard(fl!("cancel")).on_press(Message::DialogCancel), widget::button::standard(fl!("cancel")).on_press(Message::DialogCancel),
) )
.control( .control(
widget::column::with_children([ widget::search_input(fl!("search-application"), search_app_name)
widget::text::body(fl!("search-application")).into(),
widget::text_input("", search_app_name)
.id(self.dialog_text_input.clone()) .id(self.dialog_text_input.clone())
.on_clear(Message::OpenWithSearchClear)
.on_input(move |search_app_name| { .on_input(move |search_app_name| {
Message::DialogUpdate(DialogPage::OpenWith { Message::DialogUpdate(DialogPage::OpenWith {
path: path.clone(), path: path.clone(),
@ -6061,10 +6072,7 @@ impl Application for App {
store_opt: store_opt.clone(), store_opt: store_opt.clone(),
search_app_name, search_app_name,
}) })
}) }),
.into(),
])
.spacing(space_xxs),
) )
.control(widget::scrollable(column).height({ .control(widget::scrollable(column).height({
let max_size = self let max_size = self