Skip to content

Commit 9f4327a

Browse files
authored
Merge pull request #1220 from lawson85/Add-keyboard-shortcuts
feat: add keyboard shortcuts
1 parent b82c71e commit 9f4327a

File tree

2 files changed

+54
-4
lines changed

2 files changed

+54
-4
lines changed

src/gui/mod.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ use widgets::navigation_menu::nav_menu;
1919

2020
use iced::widget::column;
2121
use iced::{Alignment, Element, Length, Settings, Task, window::Settings as Window};
22+
use iced::{Subscription, event, keyboard};
23+
2224
#[cfg(feature = "self-update")]
2325
use std::path::PathBuf;
2426

@@ -96,6 +98,30 @@ impl UadGui {
9698
)
9799
}
98100

101+
fn subscription(&self) -> Subscription<Message> {
102+
event::listen_with(|event, _status, _env| match event {
103+
iced::Event::Keyboard(keyboard::Event::KeyPressed { key, modifiers, .. }) => {
104+
if modifiers.control() && modifiers.shift() {
105+
match key {
106+
keyboard::Key::Character(c) if c == "r" => {
107+
Some(Message::RebootButtonPressed)
108+
}
109+
keyboard::Key::Character(c) if c == "5" => {
110+
Some(Message::RefreshButtonPressed)
111+
}
112+
keyboard::Key::Character(c) if c == "a" => Some(Message::AppsPress),
113+
keyboard::Key::Character(c) if c == "i" => Some(Message::AboutPressed),
114+
keyboard::Key::Character(c) if c == "s" => Some(Message::SettingsPressed),
115+
_ => None,
116+
}
117+
} else {
118+
None
119+
}
120+
}
121+
_ => None,
122+
})
123+
}
124+
99125
#[allow(
100126
clippy::too_many_lines,
101127
reason = "Root GUI update orchestrates many flows"
@@ -389,6 +415,7 @@ impl UadGui {
389415
iced::application(UadGui::new, UadGui::update, UadGui::view)
390416
.title(UadGui::title)
391417
.theme(UadGui::theme)
418+
.subscription(UadGui::subscription)
392419
.settings(Settings {
393420
id: Some(String::from(NAME)),
394421
default_text_size: iced::Pixels(16.0),

src/gui/widgets/navigation_menu.rs

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ pub use crate::gui::views::list::{List as AppsView, LoadingState as ListLoadingS
77
use crate::gui::{Message, style, widgets::text};
88
use iced::widget::{Space, button, container, pick_list, row, tooltip};
99
use iced::{Alignment, Element, Font, Length, Renderer, alignment, font};
10-
1110
/// resources/assets/icons.ttf, loaded in [`crate::gui::UadGui`]
1211
pub const ICONS: Font = Font {
1312
family: font::Family::Name("icomoon"),
@@ -28,12 +27,24 @@ pub fn nav_menu<'a>(
2827
)
2928
.on_press(Message::RefreshButtonPressed);
3029

31-
let apps_refresh_tooltip = tooltip(apps_refresh_btn, "Refresh apps", tooltip::Position::Bottom)
32-
.style(style::Container::Tooltip)
33-
.gap(4);
30+
let apps_refresh_tooltip = tooltip(
31+
apps_refresh_btn,
32+
"Refresh apps (Ctrl+Shift+5)",
33+
tooltip::Position::Bottom,
34+
)
35+
.style(style::Container::Tooltip)
36+
.gap(4);
3437

3538
let reboot_btn = button_primary("Reboot").on_press(Message::RebootButtonPressed);
3639

40+
let reboot_btn = tooltip(
41+
reboot_btn,
42+
"Reboot device (Ctrl+Shift+R)",
43+
tooltip::Position::Bottom,
44+
)
45+
.style(style::Container::Tooltip)
46+
.gap(4);
47+
3748
let uad_version_text = if let Some(r) = &self_update_state.latest_release {
3849
match self_update_state.status {
3950
SelfUpdateStatus::Failed => text(format!("Failed to update to {}", r.tag_name)),
@@ -60,8 +71,16 @@ pub fn nav_menu<'a>(
6071

6172
let apps_btn = button_primary("Apps").on_press(Message::AppsPress);
6273

74+
let apps_btn = tooltip(apps_btn, "(Ctrl+Shift+A)", tooltip::Position::Bottom)
75+
.style(style::Container::Tooltip)
76+
.gap(4);
77+
6378
let about_btn = button_primary("About").on_press(Message::AboutPressed);
6479

80+
let about_btn = tooltip(about_btn, "(Ctrl+Shift+I)", tooltip::Position::Bottom)
81+
.style(style::Container::Tooltip)
82+
.gap(4);
83+
6584
let settings_btn = button_primary(
6685
text("\u{E994}")
6786
.font(ICONS)
@@ -70,6 +89,10 @@ pub fn nav_menu<'a>(
7089
)
7190
.on_press(Message::SettingsPressed);
7291

92+
let settings_btn = tooltip(settings_btn, "(Ctrl+Shift+S)", tooltip::Position::Bottom)
93+
.style(style::Container::Tooltip)
94+
.gap(4);
95+
7396
let device_list_text = match apps_view.loading_state {
7497
ListLoadingState::FindingPhones => text("Finding connected devices..."),
7598
_ => text("No devices/emulators found"),

0 commit comments

Comments
 (0)