From 7ebc928dd38213ca0479992bee2c2ca909fe4d15 Mon Sep 17 00:00:00 2001 From: Cyril Date: Mon, 2 Mar 2026 10:10:31 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8(frontend)=20add=20Ctrl+Shift+/=20to?= =?UTF-8?q?=20open=20shortcuts=20settings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update toolbar hint and register shortcut to open settings on shortcuts tab --- .../rooms/livekit/prefabs/VideoConference.tsx | 11 +++++++++++ src/frontend/src/features/shortcuts/catalog.ts | 6 ++++++ .../src/features/shortcuts/useKeyboardShortcuts.ts | 5 ++++- src/frontend/src/locales/de/rooms.json | 2 +- src/frontend/src/locales/en/rooms.json | 2 +- src/frontend/src/locales/fr/rooms.json | 2 +- src/frontend/src/locales/nl/rooms.json | 2 +- 7 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/frontend/src/features/rooms/livekit/prefabs/VideoConference.tsx b/src/frontend/src/features/rooms/livekit/prefabs/VideoConference.tsx index ba409daa..47da7730 100644 --- a/src/frontend/src/features/rooms/livekit/prefabs/VideoConference.tsx +++ b/src/frontend/src/features/rooms/livekit/prefabs/VideoConference.tsx @@ -31,6 +31,9 @@ import { RecordingProvider } from '@/features/recording' import { ScreenShareErrorModal } from '../components/ScreenShareErrorModal' import { useConnectionObserver } from '../hooks/useConnectionObserver' import { useNoiseReduction } from '../hooks/useNoiseReduction' +import { useRegisterKeyboardShortcut } from '@/features/shortcuts/useRegisterKeyboardShortcut' +import { settingsStore } from '@/stores/settings' +import { SettingsDialogExtendedKey } from '@/features/settings/type' import { useVideoResolutionSubscription } from '../hooks/useVideoResolutionSubscription' import { SettingsDialogProvider } from '@/features/settings/components/SettingsDialogProvider' import { useSubtitles } from '@/features/subtitle/hooks/useSubtitles' @@ -111,6 +114,14 @@ export function VideoConference({ ...props }: VideoConferenceProps) { useConnectionObserver() useVideoResolutionSubscription() + useRegisterKeyboardShortcut({ + id: 'open-shortcuts', + handler: useCallback(() => { + settingsStore.defaultSelectedTab = SettingsDialogExtendedKey.SHORTCUTS + settingsStore.areSettingsOpen = true + }, []), + }) + const tracks = useTracks( [ { source: Track.Source.Camera, withPlaceholder: true }, diff --git a/src/frontend/src/features/shortcuts/catalog.ts b/src/frontend/src/features/shortcuts/catalog.ts index 9be21492..4f508b16 100644 --- a/src/frontend/src/features/shortcuts/catalog.ts +++ b/src/frontend/src/features/shortcuts/catalog.ts @@ -5,6 +5,7 @@ import { Shortcut } from './types' export type ShortcutCategory = 'navigation' | 'media' | 'interaction' export type ShortcutId = + | 'open-shortcuts' | 'focus-toolbar' | 'toggle-microphone' | 'toggle-camera' @@ -29,6 +30,11 @@ export type ShortcutDescriptor = { } export const shortcutCatalog: ShortcutDescriptor[] = [ + { + id: 'open-shortcuts', + category: 'navigation', + shortcut: { key: '/', ctrlKey: true, shiftKey: true }, + }, { id: 'focus-toolbar', category: 'navigation', diff --git a/src/frontend/src/features/shortcuts/useKeyboardShortcuts.ts b/src/frontend/src/features/shortcuts/useKeyboardShortcuts.ts index bd034a2e..918fa953 100644 --- a/src/frontend/src/features/shortcuts/useKeyboardShortcuts.ts +++ b/src/frontend/src/features/shortcuts/useKeyboardShortcuts.ts @@ -19,7 +19,10 @@ export const useKeyboardShortcuts = () => { shiftKey, altKey, }) - const shortcut = shortcutsSnap.shortcuts.get(shortcutKey) + let shortcut = shortcutsSnap.shortcuts.get(shortcutKey) + if (!shortcut && shortcutKey === 'ctrl+shift+?') { + shortcut = shortcutsSnap.shortcuts.get('ctrl+shift+/') + } if (!shortcut) return e.preventDefault() await shortcut() diff --git a/src/frontend/src/locales/de/rooms.json b/src/frontend/src/locales/de/rooms.json index 70ff94cd..6452bd2c 100644 --- a/src/frontend/src/locales/de/rooms.json +++ b/src/frontend/src/locales/de/rooms.json @@ -590,7 +590,7 @@ }, "participantTileFocus": { "containerLabel": "Optionen für {{name}}", - "toolbarHint": "F2: zur Symbolleiste unten.", + "toolbarHint": "Ctrl+Shift+/: Direkt auf die Tastenkürzel zugreifen.", "pin": { "enable": "Anheften", "disable": "Lösen" diff --git a/src/frontend/src/locales/en/rooms.json b/src/frontend/src/locales/en/rooms.json index 390cdb9b..a2a79ee8 100644 --- a/src/frontend/src/locales/en/rooms.json +++ b/src/frontend/src/locales/en/rooms.json @@ -590,7 +590,7 @@ }, "participantTileFocus": { "containerLabel": "Options for {{name}}", - "toolbarHint": "F2: go to the bottom toolbar.", + "toolbarHint": "Ctrl+Shift+/: access shortcuts directly.", "pin": { "enable": "Pin", "disable": "Unpin" diff --git a/src/frontend/src/locales/fr/rooms.json b/src/frontend/src/locales/fr/rooms.json index f8bbc3bd..95c4f514 100644 --- a/src/frontend/src/locales/fr/rooms.json +++ b/src/frontend/src/locales/fr/rooms.json @@ -590,7 +590,7 @@ }, "participantTileFocus": { "containerLabel": "Options pour {{name}}", - "toolbarHint": "F2 : raccourci barre d'outils en bas.", + "toolbarHint": "Ctrl+Shift+/ : accéder directement aux raccourcis.", "pin": { "enable": "Épingler", "disable": "Annuler l'épinglage" diff --git a/src/frontend/src/locales/nl/rooms.json b/src/frontend/src/locales/nl/rooms.json index c635f1dd..bbc612e9 100644 --- a/src/frontend/src/locales/nl/rooms.json +++ b/src/frontend/src/locales/nl/rooms.json @@ -590,7 +590,7 @@ }, "participantTileFocus": { "containerLabel": "Opties voor {{name}}", - "toolbarHint": "F2: naar de werkbalk onderaan.", + "toolbarHint": "Ctrl+Shift+/: direct toegang tot de sneltoetsen.", "pin": { "enable": "Pinnen", "disable": "Losmaken"