Add keybinding to open menu (F10)

This commit is contained in:
Avery 2024-01-20 18:34:47 -05:00
parent ea93d3b090
commit 81dada9fa4
5 changed files with 50 additions and 9 deletions

View File

@ -21,6 +21,12 @@
<property name="title">{{ tr(key="sc-gen-close-window") }}</property>
</object>
</child>
<child>
<object class="GtkShortcutsShortcut">
<property name="accelerator">F10</property>
<property name="title">{{ tr(key="sc-gen-menu") }}</property>
</object>
</child>
<child>
<object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;Ctrl&gt;q</property>

View File

@ -21,7 +21,8 @@
(2,15,"GtkShortcutsShortcut",None,3,None,None,None,3,None),
(2,16,"GtkShortcutsGroup",None,2,None,None,None,1,None),
(2,17,"GtkShortcutsShortcut",None,16,None,None,None,None,None),
(2,18,"GtkShortcutsShortcut",None,16,None,None,None,1,None)
(2,18,"GtkShortcutsShortcut",None,16,None,None,None,1,None),
(2,19,"GtkShortcutsShortcut",None,3,None,None,None,3,None)
</object>
<object_property>
(2,2,"GtkShortcutsSection","section-name","Video Player",None,None,None,None,None,None,None,None,None),
@ -45,12 +46,14 @@
(2,12,"GtkShortcutsShortcut","title","{{ tr(key=\"sc-vp-frame-step\") }}",None,None,None,None,None,None,None,None,None),
(2,14,"GtkShortcutsShortcut","accelerator","&lt;Ctrl&gt;w",None,None,None,None,None,None,None,None,None),
(2,14,"GtkShortcutsShortcut","title","{{ tr(key=\"sc-gen-close-window\") }}",None,None,None,None,None,None,None,None,None),
(2,15,"GtkShortcutsShortcut","accelerator","&lt;Ctrl&gt;q",None,None,None,None,None,None,None,None,None),
(2,15,"GtkShortcutsShortcut","title","{{ tr(key=\"sc-gen-quit\") }}",None,None,None,None,None,None,None,None,None),
(2,15,"GtkShortcutsShortcut","accelerator","F10",None,None,None,None,None,None,None,None,None),
(2,15,"GtkShortcutsShortcut","title","{{ tr(key=\"sc-gen-menu\") }}",None,None,None,None,None,None,None,None,None),
(2,16,"GtkShortcutsGroup","title","{{ tr(key=\"sc-lib\") }}",None,None,None,None,None,None,None,None,None),
(2,17,"GtkShortcutsShortcut","accelerator","&lt;Ctrl&gt;f",None,None,None,None,None,None,None,None,None),
(2,17,"GtkShortcutsShortcut","title","{{ tr(key=\"sc-lib-search\") }}",None,None,None,None,None,None,None,None,None),
(2,18,"GtkShortcutsShortcut","accelerator","&lt;Ctrl&gt;r",None,None,None,None,None,None,None,None,None),
(2,18,"GtkShortcutsShortcut","title","{{ tr(key=\"sc-lib-refresh\") }}",None,None,None,None,None,None,None,None,None)
(2,18,"GtkShortcutsShortcut","title","{{ tr(key=\"sc-lib-refresh\") }}",None,None,None,None,None,None,None,None,None),
(2,19,"GtkShortcutsShortcut","accelerator","&lt;Ctrl&gt;q",None,None,None,None,None,None,None,None,None),
(2,19,"GtkShortcutsShortcut","title","{{ tr(key=\"sc-gen-quit\") }}",None,None,None,None,None,None,None,None,None)
</object_property>
</cambalache-project>

View File

@ -14,6 +14,7 @@ use std::{
use crate::{
accounts::account_list::{AccountList, AccountListInput, AccountListOutput},
borgar::borgar_menu::{BorgarMenuInput, BORGAR_MENU_SENDER},
config::{self, general::MostRecentLogin},
globals::CONFIG,
jellyfin_api::api_client::ApiClient,
@ -357,10 +358,10 @@ impl App {
let mut group = RelmActionGroup::<AppActionGroup>::new();
let quit_action: RelmAction<QuitAction> = RelmAction::new_stateless(|_| {
relm4::main_application().quit();
let menu_action: RelmAction<MenuAction> = RelmAction::new_stateless(|_| {
BORGAR_MENU_SENDER.send(BorgarMenuInput::OpenMenu).unwrap();
});
app.set_accelerators_for_action::<QuitAction>(&["<Ctrl>q"]);
app.set_accelerators_for_action::<MenuAction>(&["F10"]);
let preferences_action: RelmAction<PreferencesAction> = RelmAction::new_stateless({
let sender = sender.clone();
@ -370,8 +371,14 @@ impl App {
});
app.set_accelerators_for_action::<PreferencesAction>(&["<Ctrl>comma"]);
group.add_action(quit_action);
let quit_action: RelmAction<QuitAction> = RelmAction::new_stateless(|_| {
relm4::main_application().quit();
});
app.set_accelerators_for_action::<QuitAction>(&["<Ctrl>q"]);
group.add_action(menu_action);
group.add_action(preferences_action);
group.add_action(quit_action);
group.register_for_main_application();
}
}
@ -409,5 +416,6 @@ fn convert_library_output(output: LibraryOutput) -> AppInput {
}
relm4::new_action_group!(AppActionGroup, "app");
relm4::new_stateless_action!(MenuAction, AppActionGroup, "menu");
relm4::new_stateless_action!(PreferencesAction, AppActionGroup, "preferences");
relm4::new_stateless_action!(QuitAction, AppActionGroup, "quit");

View File

@ -2,10 +2,13 @@ use std::sync::Arc;
use gtk::gio;
use gtk::prelude::*;
use once_cell::sync::Lazy;
use relm4::{
actions::{AccelsPlus, RelmAction, RelmActionGroup},
once_cell,
prelude::*,
};
use tokio::sync::broadcast;
use crate::app::AppInput;
use crate::app::APP_BROKER;
@ -19,6 +22,9 @@ use crate::{
use super::about::About;
pub static BORGAR_MENU_SENDER: Lazy<broadcast::Sender<BorgarMenuInput>> =
Lazy::new(|| broadcast::channel(1).0);
pub struct BorgarMenuAuth {
pub api_client: Arc<ApiClient>,
pub server: Server,
@ -31,8 +37,9 @@ pub struct BorgarMenu {
about: Option<Controller<About>>,
}
#[derive(Debug)]
#[derive(Clone, Copy, Debug)]
pub enum BorgarMenuInput {
OpenMenu,
SignOut,
About,
}
@ -122,6 +129,15 @@ impl Component for BorgarMenu {
group.register_for_widget(root);
relm4::spawn({
let mut rx = BORGAR_MENU_SENDER.subscribe();
async move {
while let Ok(msg) = rx.recv().await {
sender.input(msg);
}
}
});
ComponentParts { model, widgets }
}
@ -132,7 +148,14 @@ impl Component for BorgarMenu {
sender: ComponentSender<Self>,
root: &Self::Root,
) {
if !root.is_mapped() {
return;
}
match message {
BorgarMenuInput::OpenMenu => {
root.activate();
}
BorgarMenuInput::SignOut => 'msg: {
let BorgarMenuAuth {
api_client,

View File

@ -3,6 +3,7 @@
sc-gen = General
sc-gen-shortcuts = Show shortcuts
sc-gen-close-window = Close window
sc-gen-menu = Open menu
sc-gen-quit = Quit
# Library
# =======