1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Merge pull request #6070 from dmitrylyzo/fix-hotkeys

Make hotkeys strict and prevent default actions for handled ones
This commit is contained in:
Bill Thornton 2024-09-20 14:47:33 -04:00 committed by GitHub
commit 37c8370d57
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 108 additions and 42 deletions

View file

@ -1195,9 +1195,13 @@ export default function (view) {
function onKeyDown(e) {
clickedElement = e.target;
const key = keyboardnavigation.getKeyName(e);
const isKeyModified = e.ctrlKey || e.altKey || e.metaKey;
// Skip modified keys
if (isKeyModified) return;
const key = keyboardnavigation.getKeyName(e);
const btnPlayPause = osdBottomElement.querySelector('.btnPause');
if (e.keyCode === 32) {
@ -1219,8 +1223,10 @@ export default function (view) {
switch (key) {
case 'ArrowLeft':
case 'ArrowRight':
showOsd(nowPlayingPositionSlider);
nowPlayingPositionSlider.dispatchEvent(new KeyboardEvent(e.type, e));
if (!e.shiftKey) {
showOsd(nowPlayingPositionSlider);
nowPlayingPositionSlider.dispatchEvent(new KeyboardEvent(e.type, e));
}
return;
case 'Enter':
playbackManager.playPause(currentPlayer);
@ -1230,7 +1236,7 @@ export default function (view) {
}
if (layoutManager.tv && keyboardnavigation.isNavigationKey(key)) {
showOsd();
if (!e.shiftKey) showOsd();
return;
}
@ -1248,50 +1254,71 @@ export default function (view) {
break;
case 'k':
case 'K':
playbackManager.playPause(currentPlayer);
showOsd(btnPlayPause);
if (!e.shiftKey) {
e.preventDefault();
playbackManager.playPause(currentPlayer);
showOsd(btnPlayPause);
}
break;
case 'ArrowUp':
case 'Up':
playbackManager.volumeUp(currentPlayer);
if (!e.shiftKey) {
e.preventDefault();
playbackManager.volumeUp(currentPlayer);
}
break;
case 'ArrowDown':
case 'Down':
playbackManager.volumeDown(currentPlayer);
if (!e.shiftKey) {
e.preventDefault();
playbackManager.volumeDown(currentPlayer);
}
break;
case 'l':
case 'L':
case 'ArrowRight':
case 'Right':
playbackManager.fastForward(currentPlayer);
showOsd(btnFastForward);
if (!e.shiftKey) {
e.preventDefault();
playbackManager.fastForward(currentPlayer);
showOsd(btnFastForward);
}
break;
case 'j':
case 'J':
case 'ArrowLeft':
case 'Left':
playbackManager.rewind(currentPlayer);
showOsd(btnRewind);
if (!e.shiftKey) {
e.preventDefault();
playbackManager.rewind(currentPlayer);
showOsd(btnRewind);
}
break;
case 'f':
case 'F':
if (!e.ctrlKey && !e.metaKey) {
if (!e.shiftKey) {
e.preventDefault();
playbackManager.toggleFullscreen(currentPlayer);
}
break;
case 'm':
case 'M':
playbackManager.toggleMute(currentPlayer);
if (!e.shiftKey) {
e.preventDefault();
playbackManager.toggleMute(currentPlayer);
}
break;
case 'p':
case 'P':
if (e.shiftKey) {
e.preventDefault();
playbackManager.previousTrack(currentPlayer);
}
break;
case 'n':
case 'N':
if (e.shiftKey) {
e.preventDefault();
playbackManager.nextTrack(currentPlayer);
}
break;
@ -1314,10 +1341,16 @@ export default function (view) {
}
break;
case 'Home':
playbackManager.seekPercent(0, currentPlayer);
if (!e.shiftKey) {
e.preventDefault();
playbackManager.seekPercent(0, currentPlayer);
}
break;
case 'End':
playbackManager.seekPercent(100, currentPlayer);
if (!e.shiftKey) {
e.preventDefault();
playbackManager.seekPercent(100, currentPlayer);
}
break;
case '0':
case '1':
@ -1328,32 +1361,45 @@ export default function (view) {
case '6':
case '7':
case '8':
case '9': {
if (!isKeyModified) {
const percent = parseInt(key, 10) * 10;
playbackManager.seekPercent(percent, currentPlayer);
}
case '9': { // no Shift
e.preventDefault();
const percent = parseInt(key, 10) * 10;
playbackManager.seekPercent(percent, currentPlayer);
break;
}
case '>':
case '>': // Shift+.
e.preventDefault();
playbackManager.increasePlaybackRate(currentPlayer);
break;
case '<':
case '<': // Shift+,
e.preventDefault();
playbackManager.decreasePlaybackRate(currentPlayer);
break;
case 'PageUp':
playbackManager.nextChapter(currentPlayer);
if (!e.shiftKey) {
e.preventDefault();
playbackManager.nextChapter(currentPlayer);
}
break;
case 'PageDown':
playbackManager.previousChapter(currentPlayer);
if (!e.shiftKey) {
e.preventDefault();
playbackManager.previousChapter(currentPlayer);
}
break;
case 'g':
case 'G':
subtitleSyncOverlay?.decrementOffset();
if (!e.shiftKey) {
e.preventDefault();
subtitleSyncOverlay?.decrementOffset();
}
break;
case 'h':
case 'H':
subtitleSyncOverlay?.incrementOffset();
if (!e.shiftKey) {
e.preventDefault();
subtitleSyncOverlay?.incrementOffset();
}
break;
}
}