Add keybinding to open menu (F10)
This commit is contained in:
@@ -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"><Ctrl>q</property>
|
<property name="accelerator"><Ctrl>q</property>
|
||||||
|
11
delfin.cmb
11
delfin.cmb
@@ -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","<Ctrl>w",None,None,None,None,None,None,None,None,None),
|
(2,14,"GtkShortcutsShortcut","accelerator","<Ctrl>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","<Ctrl>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","<Ctrl>f",None,None,None,None,None,None,None,None,None),
|
(2,17,"GtkShortcutsShortcut","accelerator","<Ctrl>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","<Ctrl>r",None,None,None,None,None,None,None,None,None),
|
(2,18,"GtkShortcutsShortcut","accelerator","<Ctrl>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","<Ctrl>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>
|
||||||
|
@@ -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");
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
|
||||||
# =======
|
# =======
|
||||||
|
Reference in New Issue
Block a user