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> <property name="title">{{ tr(key="sc-gen-close-window") }}</property>
</object> </object>
</child> </child>
<child>
<object class="GtkShortcutsShortcut">
<property name="accelerator">F10</property>
<property name="title">{{ tr(key="sc-gen-menu") }}</property>
</object>
</child>
<child> <child>
<object class="GtkShortcutsShortcut"> <object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;Ctrl&gt;q</property> <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,15,"GtkShortcutsShortcut",None,3,None,None,None,3,None),
(2,16,"GtkShortcutsGroup",None,2,None,None,None,1,None), (2,16,"GtkShortcutsGroup",None,2,None,None,None,1,None),
(2,17,"GtkShortcutsShortcut",None,16,None,None,None,None,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>
<object_property> <object_property>
(2,2,"GtkShortcutsSection","section-name","Video Player",None,None,None,None,None,None,None,None,None), (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,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","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,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","accelerator","F10",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","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,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","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,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","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> </object_property>
</cambalache-project> </cambalache-project>

View File

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

View File

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

View File

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