Revamp desktop usability and multiline fields

This commit is contained in:
2026-08-10 22:06:16 +02:00
parent 40b15a9713
commit aeb18b488f
12 changed files with 1283 additions and 545 deletions

View File

@@ -8,7 +8,9 @@ use muda::{
use crate::action::{self, ActionContext, MenuGroup, UiAction};
pub struct NativeMenu {
_menu: Menu,
menu: Menu,
window_menu: Submenu,
help_menu: Submenu,
items: Vec<(UiAction, MenuItem)>,
}
@@ -16,6 +18,8 @@ impl NativeMenu {
pub fn install(context: ActionContext) -> Result<Self, muda::Error> {
let menu = Menu::new();
let mut items = Vec::new();
let mut window_menu = None;
let mut help_menu = None;
for group in MenuGroup::ALL {
let submenu = Submenu::new(group.label(), true);
match group {
@@ -50,10 +54,27 @@ impl NativeMenu {
}
_ => append_actions(&submenu, group, context, &mut items)?,
}
if group == MenuGroup::Window {
window_menu = Some(submenu.clone());
} else if group == MenuGroup::Help {
help_menu = Some(submenu.clone());
}
menu.append(&submenu)?;
}
menu.init_for_nsapp();
Ok(Self { _menu: menu, items })
let native = Self {
menu,
window_menu: window_menu.expect("the Window menu is registered"),
help_menu: help_menu.expect("the Help menu is registered"),
items,
};
native.activate();
Ok(native)
}
pub fn activate(&self) {
self.menu.init_for_nsapp();
self.window_menu.set_as_windows_menu_for_nsapp();
self.help_menu.set_as_help_menu_for_nsapp();
}
pub fn sync(&self, context: ActionContext) {
@@ -117,6 +138,7 @@ fn accelerator(action: UiAction) -> Option<Accelerator> {
let (modifiers, code) = match action {
UiAction::Settings => (command, Code::Comma),
UiAction::NewEntry => (command, Code::KeyN),
UiAction::NewFolder => (command | Modifiers::SHIFT, Code::KeyN),
UiAction::OpenFolder => (command, Code::KeyO),
UiAction::Save => (command, Code::KeyS),
UiAction::CloseWindow => (command, Code::KeyW),
@@ -129,22 +151,20 @@ fn accelerator(action: UiAction) -> Option<Accelerator> {
UiAction::SearchContents => (command | Modifiers::SHIFT, Code::KeyF),
UiAction::CommandPalette => (command, Code::KeyK),
UiAction::Refresh => (command, Code::KeyR),
UiAction::ReloadEntry => (command | Modifiers::SHIFT, Code::KeyR),
UiAction::EditEntry => (command, Code::KeyE),
UiAction::Lock => (command, Code::KeyL),
UiAction::Help => (Modifiers::empty(), Code::F1),
UiAction::About
| UiAction::InitializeStore
| UiAction::NewFolder
| UiAction::CopyField
| UiAction::CopyEditedField
| UiAction::TogglePaneFocus
| UiAction::OpenEntry
| UiAction::ReloadEntry
| UiAction::EditEntry
| UiAction::GeneratePassword
| UiAction::MoveEntry
| UiAction::CopyEntry
| UiAction::DeleteEntry
| UiAction::ToggleReveal
| UiAction::GenerateOtp
| UiAction::CopyOtp
| UiAction::ImportOtp