Add keybinding to open preferences (Ctrl + ,)
This commit is contained in:
@@ -21,6 +21,7 @@ use crate::{
|
||||
locales::tera_tr,
|
||||
media_details::MediaDetails,
|
||||
meson_config::APP_ID,
|
||||
preferences::Preferences,
|
||||
servers::server_list::{ServerList, ServerListOutput},
|
||||
tr,
|
||||
utils::{main_window::MAIN_APP_WINDOW_NAME, shift_state::shift_state_controller},
|
||||
@@ -71,6 +72,7 @@ pub struct App {
|
||||
video_player: OnceCell<Controller<VideoPlayer>>,
|
||||
server: Option<config::Server>,
|
||||
account: Option<config::Account>,
|
||||
preferences: Option<Controller<Preferences>>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
@@ -86,6 +88,7 @@ pub enum AppInput {
|
||||
SignOut,
|
||||
SetThemeDark(bool),
|
||||
PagePopped(Option<String>),
|
||||
ShowPreferences,
|
||||
}
|
||||
|
||||
#[relm4::component(pub)]
|
||||
@@ -180,11 +183,12 @@ impl Component for App {
|
||||
video_player: OnceCell::new(),
|
||||
server: None,
|
||||
account: None,
|
||||
preferences: None,
|
||||
};
|
||||
|
||||
let widgets = view_output!();
|
||||
|
||||
model.register_actions();
|
||||
model.register_actions(&sender);
|
||||
|
||||
if config.general.restore_most_recent_login {
|
||||
if let Some(MostRecentLogin {
|
||||
@@ -331,6 +335,14 @@ impl Component for App {
|
||||
_ => {}
|
||||
};
|
||||
}
|
||||
AppInput::ShowPreferences => {
|
||||
self.preferences = Some(
|
||||
Preferences::builder()
|
||||
.transient_for(root)
|
||||
.launch(())
|
||||
.detach(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
self.update_view(widgets, sender);
|
||||
@@ -338,7 +350,7 @@ impl Component for App {
|
||||
}
|
||||
|
||||
impl App {
|
||||
fn register_actions(&self) {
|
||||
fn register_actions(&self, sender: &ComponentSender<Self>) {
|
||||
let app = relm4::main_application();
|
||||
app.set_accels_for_action("win.show-help-overlay", &["<Ctrl>question"]);
|
||||
app.set_accels_for_action("window.close", &["<Ctrl>w"]);
|
||||
@@ -350,7 +362,16 @@ impl App {
|
||||
});
|
||||
app.set_accelerators_for_action::<QuitAction>(&["<Ctrl>q"]);
|
||||
|
||||
let preferences_action: RelmAction<PreferencesAction> = RelmAction::new_stateless({
|
||||
let sender = sender.clone();
|
||||
move |_| {
|
||||
sender.input(AppInput::ShowPreferences);
|
||||
}
|
||||
});
|
||||
app.set_accelerators_for_action::<PreferencesAction>(&["<Ctrl>comma"]);
|
||||
|
||||
group.add_action(quit_action);
|
||||
group.add_action(preferences_action);
|
||||
group.register_for_main_application();
|
||||
}
|
||||
}
|
||||
@@ -388,4 +409,5 @@ fn convert_library_output(output: LibraryOutput) -> AppInput {
|
||||
}
|
||||
|
||||
relm4::new_action_group!(AppActionGroup, "app");
|
||||
relm4::new_stateless_action!(PreferencesAction, AppActionGroup, "preferences");
|
||||
relm4::new_stateless_action!(QuitAction, AppActionGroup, "quit");
|
||||
|
@@ -7,11 +7,12 @@ use relm4::{
|
||||
prelude::*,
|
||||
};
|
||||
|
||||
use crate::app::AppInput;
|
||||
use crate::app::APP_BROKER;
|
||||
use crate::{
|
||||
borgar::sign_out_dialog::SignOutDialog,
|
||||
config::{Account, Server},
|
||||
jellyfin_api::api_client::ApiClient,
|
||||
preferences::Preferences,
|
||||
tr,
|
||||
utils::main_window::get_main_window,
|
||||
};
|
||||
@@ -26,7 +27,6 @@ pub struct BorgarMenuAuth {
|
||||
|
||||
pub struct BorgarMenu {
|
||||
auth: Option<BorgarMenuAuth>,
|
||||
preferences: Option<Controller<Preferences>>,
|
||||
sign_out_dialog: Option<Controller<SignOutDialog>>,
|
||||
about: Option<Controller<About>>,
|
||||
}
|
||||
@@ -34,7 +34,6 @@ pub struct BorgarMenu {
|
||||
#[derive(Debug)]
|
||||
pub enum BorgarMenuInput {
|
||||
SignOut,
|
||||
Preferences,
|
||||
About,
|
||||
}
|
||||
|
||||
@@ -81,7 +80,6 @@ impl Component for BorgarMenu {
|
||||
) -> ComponentParts<Self> {
|
||||
let model = BorgarMenu {
|
||||
auth,
|
||||
preferences: None,
|
||||
sign_out_dialog: None,
|
||||
about: None,
|
||||
};
|
||||
@@ -92,12 +90,11 @@ impl Component for BorgarMenu {
|
||||
|
||||
let mut group = RelmActionGroup::<BorgarMenuActionGroup>::new();
|
||||
|
||||
let preferences_action: RelmAction<PreferencesAction> = RelmAction::new_stateless({
|
||||
let sender = sender.clone();
|
||||
move |_| {
|
||||
sender.input(BorgarMenuInput::Preferences);
|
||||
}
|
||||
});
|
||||
let preferences_action: RelmAction<PreferencesAction> =
|
||||
RelmAction::new_stateless(move |_| {
|
||||
APP_BROKER.send(AppInput::ShowPreferences);
|
||||
});
|
||||
app.set_accelerators_for_action::<PreferencesAction>(&["<Ctrl>comma"]);
|
||||
|
||||
let keyboard_shortcuts_action: RelmAction<KeyboardShortcutsAction> =
|
||||
RelmAction::new_stateless(move |_| {
|
||||
@@ -106,7 +103,6 @@ impl Component for BorgarMenu {
|
||||
.expect("Error getting show-help-overlay action")
|
||||
.activate(None);
|
||||
});
|
||||
|
||||
app.set_accelerators_for_action::<KeyboardShortcutsAction>(&["<Ctrl>question"]);
|
||||
|
||||
let about_action: RelmAction<AboutAction> = RelmAction::new_stateless({
|
||||
@@ -154,14 +150,6 @@ impl Component for BorgarMenu {
|
||||
.detach(),
|
||||
);
|
||||
}
|
||||
BorgarMenuInput::Preferences => {
|
||||
self.preferences = Some(
|
||||
Preferences::builder()
|
||||
.transient_for(root)
|
||||
.launch(())
|
||||
.detach(),
|
||||
);
|
||||
}
|
||||
BorgarMenuInput::About => {
|
||||
self.about = Some(About::builder().transient_for(root).launch(()).detach())
|
||||
}
|
||||
|
Reference in New Issue
Block a user