From eff4ca2f1971c47047b048fd77124a48bd8f5fb2 Mon Sep 17 00:00:00 2001 From: Bradley Eaton Date: Mon, 30 Jun 2025 16:07:37 +0100 Subject: [PATCH] Use keyboard key names for navigation on controller. --- src/controllers/playback/video/index.js | 6 --- src/elements/emby-slider/emby-slider.js | 6 --- src/plugins/bookPlayer/plugin.js | 6 --- src/plugins/pdfPlayer/plugin.js | 6 --- src/scripts/keyboardNavigation.js | 52 ++++++++++--------------- 5 files changed, 20 insertions(+), 56 deletions(-) diff --git a/src/controllers/playback/video/index.js b/src/controllers/playback/video/index.js index 37e9b27a7..c0be4c579 100644 --- a/src/controllers/playback/video/index.js +++ b/src/controllers/playback/video/index.js @@ -1243,12 +1243,6 @@ export default function (view) { if (layoutManager.tv && !currentVisibleMenu) { // Change the behavior of some keys when the OSD is hidden switch (key) { - case 'NavigationLeft': - case 'NavigationRight': - case 'GamepadLeftThumbLeft': - case 'GamepadLeftThumbRight': - case 'GamepadDPadLeft': - case 'GamepadDPadRight': case 'ArrowLeft': case 'ArrowRight': if (!e.shiftKey) { diff --git a/src/elements/emby-slider/emby-slider.js b/src/elements/emby-slider/emby-slider.js index 5ae0cc12e..e4575ecaf 100644 --- a/src/elements/emby-slider/emby-slider.js +++ b/src/elements/emby-slider/emby-slider.js @@ -527,18 +527,12 @@ function stepKeyboard(elem, delta) { */ function onKeyDown(e) { switch (keyboardnavigation.getKeyName(e)) { - case 'NavigationLeft': - case 'GamepadDPadLeft': - case 'GamepadLeftThumbLeft': case 'ArrowLeft': case 'Left': stepKeyboard(this, -normalizeSliderStep(this, this.keyboardStepDown)); e.preventDefault(); e.stopPropagation(); break; - case 'NavigationRight': - case 'GamepadDPadRight': - case 'GamepadLeftThumbRight': case 'ArrowRight': case 'Right': stepKeyboard(this, normalizeSliderStep(this, this.keyboardStepUp)); diff --git a/src/plugins/bookPlayer/plugin.js b/src/plugins/bookPlayer/plugin.js index a0f7b4959..1e0ad2a00 100644 --- a/src/plugins/bookPlayer/plugin.js +++ b/src/plugins/bookPlayer/plugin.js @@ -138,18 +138,12 @@ export class BookPlayer { if (!this.loaded) return; switch (key) { - case 'NavigationRight': - case 'GamepadDPadRight': - case 'GamepadLeftThumbRight': case 'l': case 'ArrowRight': case 'Right': e.preventDefault(); this.next(); break; - case 'NavigationLeft': - case 'GamepadDPadLeft': - case 'GamepadLeftThumbLeft': case 'j': case 'ArrowLeft': case 'Left': diff --git a/src/plugins/pdfPlayer/plugin.js b/src/plugins/pdfPlayer/plugin.js index 17558ec97..f77c01364 100644 --- a/src/plugins/pdfPlayer/plugin.js +++ b/src/plugins/pdfPlayer/plugin.js @@ -97,18 +97,12 @@ export class PdfPlayer { const key = keyboardnavigation.getKeyName(e); switch (key) { - case 'NavigationRight': - case 'GamepadDPadRight': - case 'GamepadLeftThumbRight': case 'l': case 'ArrowRight': case 'Right': e.preventDefault(); this.next(); break; - case 'NavigationLeft': - case 'GamepadDPadLeft': - case 'GamepadLeftThumbLeft': case 'j': case 'ArrowLeft': case 'Left': diff --git a/src/scripts/keyboardNavigation.js b/src/scripts/keyboardNavigation.js index d2f9882ea..ac21b112e 100644 --- a/src/scripts/keyboardNavigation.js +++ b/src/scripts/keyboardNavigation.js @@ -24,25 +24,30 @@ const KeyNames = { // UWP WebView section start -- // Navigation Up/Down/Left/Right is part of TVJS directionalnavigation-1.0.0.0.js // Unsure what this is used for. Media remote? - 138: 'NavigationUp', - 139: 'NavigationDown', - 140: 'NavigationLeft', - 141: 'NavigationRight', + 138: 'ArrowUp', + 139: 'ArrowDown', + 140: 'ArrowLeft', + 141: 'ArrowRight', + 195: 'GamepadA', // Currently Xbox UWP WebView 2 sends code 27 (Escape instead) despite being undocumented // Desktop UWP unchanged - 196: 'GamepadB', - 203: 'GamepadDPadUp', - 204: 'GamepadDPadDown', - 205: 'GamepadDPadLeft', - 206: 'GamepadDPadRight', + // GamepadB + 196: 'Escape', + + // DPad Up/Down/Left/Right + 203: 'ArrowUp', + 204: 'ArrowDown', + 205: 'ArrowLeft', + 206: 'ArrowRight', + // Currently Xbox UWP WebView 2 sends Arrow keycodes despite being undocumented // Desktop UWP unchanged - // Left Thumbstick - 211: 'GamepadLeftThumbUp', - 212: 'GamepadLeftThumbDown', - 214: 'GamepadLeftThumbLeft', - 213: 'GamepadLeftThumbRight', + // Left Thumbstick Up/Down/Left/Right + 211: 'ArrowUp', + 212: 'ArrowDown', + 214: 'ArrowLeft', + 213: 'ArrowRight', // End of UWP WebView Section // MediaRewind (Tizen/WebOS) @@ -68,11 +73,7 @@ const KeyNames = { /** * Keys used for keyboard navigation. */ -const NavigationKeys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'BrowserHome', 'Find', - 'NavigationUp', 'NavigationDown', 'NavigationLeft', 'NavigationRight', - 'GamepadDPadUp', 'GamepadDPadDown', 'GamepadDPadLeft', 'GamepadDPadRight', - 'GamepadLeftThumbUp', 'GamepadLeftThumbDown', 'GamepadLeftThumbLeft', 'GamepadLeftThumbRight']; - +const NavigationKeys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'BrowserHome', 'Find']; /** * Keys used for media playback control. */ @@ -173,9 +174,6 @@ export function enable() { let capture = true; switch (key) { - case 'NavigationLeft': - case 'GamepadDPadLeft': - case 'GamepadLeftThumbLeft': case 'ArrowLeft': if (!isInteractiveElement(document.activeElement)) { inputManager.handleCommand('left'); @@ -183,15 +181,9 @@ export function enable() { capture = false; } break; - case 'NavigationUp': - case 'GamepadDPadUp': - case 'GamepadLeftThumbUp': case 'ArrowUp': inputManager.handleCommand('up'); break; - case 'NavigationRight': - case 'GamepadDPadRight': - case 'GamepadLeftThumbRight': case 'ArrowRight': if (!isInteractiveElement(document.activeElement)) { inputManager.handleCommand('right'); @@ -199,9 +191,6 @@ export function enable() { capture = false; } break; - case 'NavigationDown': - case 'GamepadDPadDown': - case 'GamepadLeftThumbDown': case 'ArrowDown': inputManager.handleCommand('down'); break; @@ -209,7 +198,6 @@ export function enable() { case 'GamepadA': inputManager.handleCommand('select'); break; - case 'GamepadB': case 'Back': inputManager.handleCommand('back'); break;