use iced::{event, keyboard, Event, Subscription};
use iced_core::keyboard::key::Named;
use iced_futures::event::listen_raw;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum Message {
Escape,
FocusNext,
FocusPrevious,
Fullscreen,
Search,
}
pub fn subscription() -> Subscription<Message> {
listen_raw(|event, status, _| {
if event::Status::Ignored != status {
return None;
}
match event {
Event::Keyboard(keyboard::Event::KeyPressed {
key: keyboard::Key::Named(key),
modifiers,
..
}) => match key {
Named::Tab => {
return Some(if modifiers.shift() {
Message::FocusPrevious
} else {
Message::FocusNext
});
}
Named::Escape => {
return Some(Message::Escape);
}
Named::F11 => {
return Some(Message::Fullscreen);
}
_ => (),
},
Event::Keyboard(keyboard::Event::KeyPressed {
key: keyboard::Key::Character(c),
modifiers,
..
}) if c == "f" && modifiers.control() => {
return Some(Message::Search);
}
_ => (),
}
None
})
}