From 8978d24f9df3188f5cbbdfccfb8b5c4f2255d982 Mon Sep 17 00:00:00 2001 From: Christian Werner Date: Sun, 6 Jul 2025 19:03:04 +0200 Subject: [PATCH] fix: improve shortcuts for German keyboard layout (#31647) Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com> --- .../js/frappe/ui/alt_keyboard_shortcuts.js | 23 ++++++++++++++++++- frappe/public/js/frappe/ui/page.js | 12 ++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/frappe/public/js/frappe/ui/alt_keyboard_shortcuts.js b/frappe/public/js/frappe/ui/alt_keyboard_shortcuts.js index 4d38989458..9f902cf7a2 100644 --- a/frappe/public/js/frappe/ui/alt_keyboard_shortcuts.js +++ b/frappe/public/js/frappe/ui/alt_keyboard_shortcuts.js @@ -95,6 +95,23 @@ function get_shortcut_for_key(key) { frappe.ui.keys.AltShortcutGroup = class AltShortcutGroup { constructor() { this.shortcuts_dict = {}; + + const locale = new Intl.Locale(navigator.language); + // Skip certain Keys for different Languages on different Platforms + switch (locale.language) { + case "de": + if (frappe.utils.is_mac()) { + this.blacklisted_letters = ["e", "l"]; + } else { + this.blacklisted_letters = ["q"]; + } + + break; + default: + this.blacklisted_letters = []; + break; + } + $current_dropdown = null; this.bind_events(); frappe.ui.keys.bind_shortcut_group_event(); @@ -179,6 +196,10 @@ frappe.ui.keys.AltShortcutGroup = class AltShortcutGroup { let is_in_global_shortcut = frappe.ui.keys.standard_shortcuts .filter((s) => !s.page) .some((s) => s.shortcut === `alt+${letter}`); - return letter in this.shortcuts_dict || is_in_global_shortcut; + return ( + letter in this.shortcuts_dict || + is_in_global_shortcut || + this.blacklisted_letters.includes(letter.toLowerCase()) + ); } }; diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js index 8721d70c7f..c069f5974c 100644 --- a/frappe/public/js/frappe/ui/page.js +++ b/frappe/public/js/frappe/ui/page.js @@ -526,11 +526,13 @@ frappe.ui.Page = class Page { $li.addClass("user-action").insertBefore(this.divider); } - // alt shortcut - frappe.ui.keys - .get_shortcut_group(parent.get(0)) - .add($link, $link.find(".menu-item-label")); - + // if an shortcut is already set, dont set an alt Shortcut + if (!shortcut) { + // alt shortcut + frappe.ui.keys + .get_shortcut_group(parent.get(0)) + .add($link, $link.find(".menu-item-label")); + } return $link; }