feat(shortcuts): search by key bindings
This commit is contained in:
parent
7df9700a94
commit
908432d32b
4 changed files with 47 additions and 74 deletions
|
|
@ -3,6 +3,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use std::{
|
||||
borrow::Cow,
|
||||
collections::{BTreeMap, BTreeSet},
|
||||
path::{Path, PathBuf},
|
||||
sync::Arc,
|
||||
|
|
@ -300,7 +301,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
.min_item_width(300.0)
|
||||
})
|
||||
|
|
@ -316,7 +317,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -331,7 +332,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -346,7 +347,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -361,7 +362,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -376,7 +377,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -391,7 +392,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -406,7 +407,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.add({
|
||||
|
|
@ -421,7 +422,7 @@ fn apps() -> Section<crate::pages::Message> {
|
|||
Message::Surface,
|
||||
|a| crate::app::Message::PageMessage(crate::pages::Message::DefaultApps(a)),
|
||||
)
|
||||
.icons(&meta.icons),
|
||||
.icons(Cow::Borrowed(&meta.icons)),
|
||||
)
|
||||
})
|
||||
.apply(Element::from)
|
||||
|
|
|
|||
|
|
@ -1276,7 +1276,7 @@ pub fn display_configuration() -> Section<crate::pages::Message> {
|
|||
widget::settings::item(
|
||||
&descriptions[scale],
|
||||
dropdown::popup_dropdown(
|
||||
&DPI_SCALE_LABELS,
|
||||
DPI_SCALE_LABELS.as_slice(),
|
||||
page.cache.scale_selected,
|
||||
Message::Scale,
|
||||
cosmic::iced::window::Id::RESERVED,
|
||||
|
|
|
|||
|
|
@ -25,9 +25,11 @@ use cosmic_settings_config::shortcuts::{self, Action, Shortcuts};
|
|||
use cosmic_settings_page::Section;
|
||||
use cosmic_settings_page::{self as page, section};
|
||||
use itertools::Itertools;
|
||||
use sctk::seat::keyboard::Keysym;
|
||||
use shortcuts::action::System as SystemAction;
|
||||
use slab::Slab;
|
||||
use slotmap::{DefaultKey, Key, SecondaryMap, SlotMap};
|
||||
use std::collections::BTreeSet;
|
||||
use std::io;
|
||||
|
||||
pub struct Page {
|
||||
|
|
@ -320,6 +322,10 @@ impl Search {
|
|||
let id = self.actions.insert(action.clone());
|
||||
self.localized.insert(id, localized);
|
||||
}
|
||||
// Remove unicode isolation characters to fix searching localized text that has them.
|
||||
for (_, localized) in self.localized.iter_mut() {
|
||||
*localized = localized.replace("\u{2068}", "").replace("\u{2069}", "");
|
||||
}
|
||||
}
|
||||
|
||||
fn retrieve_custom_actions(&self) -> Vec<(Binding, Action)> {
|
||||
|
|
@ -341,10 +347,29 @@ impl Search {
|
|||
}
|
||||
|
||||
fn shortcut_models(&mut self) -> Slab<ShortcutModel> {
|
||||
let shortcut_search_actions = match Binding::from_str_partial(&self.input) {
|
||||
Ok(input_binding) => self
|
||||
.shortcuts
|
||||
.iter()
|
||||
.filter_map(|(binding, action)| {
|
||||
if input_binding.is_subset(binding) {
|
||||
Some(action)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.collect::<BTreeSet<_>>(),
|
||||
Err(_) => Default::default(),
|
||||
};
|
||||
|
||||
let input = self.input.to_lowercase();
|
||||
|
||||
self.actions
|
||||
.iter()
|
||||
.filter(|(id, _)| self.localized[*id].to_lowercase().contains(&input))
|
||||
.filter(|(id, action)| {
|
||||
self.localized[*id].to_lowercase().contains(&input)
|
||||
|| shortcut_search_actions.contains(action)
|
||||
})
|
||||
.fold(Slab::new(), |mut slab, (_, action)| {
|
||||
slab.insert(ShortcutModel::new(
|
||||
&self.defaults,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue