From a73518d96373cbea303b47c81268883d2a0e7f6e Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Tue, 20 Jan 2026 22:25:52 +0100 Subject: [PATCH] fix: left/right focuses seekbar close #275 --- .../desktop_video_controls.dart | 5 +++ .../video_controls/video_controls.dart | 31 ++++++++++++++++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/lib/widgets/video_controls/desktop_video_controls.dart b/lib/widgets/video_controls/desktop_video_controls.dart index 73f3574b..1535e884 100644 --- a/lib/widgets/video_controls/desktop_video_controls.dart +++ b/lib/widgets/video_controls/desktop_video_controls.dart @@ -181,6 +181,11 @@ class DesktopVideoControlsState extends State { _playPauseFocusNode.requestFocus(); } + /// Request focus on the timeline (called when controls shown via LEFT/RIGHT) + void requestTimelineFocus() { + _timelineFocusNode.requestFocus(); + } + /// Get focus node for volume control FocusNode get volumeFocusNode => _volumeFocusNode; diff --git a/lib/widgets/video_controls/video_controls.dart b/lib/widgets/video_controls/video_controls.dart index d68fa67e..2be7fb09 100644 --- a/lib/widgets/video_controls/video_controls.dart +++ b/lib/widgets/video_controls/video_controls.dart @@ -1200,6 +1200,24 @@ class _PlexVideoControlsState extends State with WindowListen } } + /// Show controls and focus timeline on LEFT/RIGHT input (TV/desktop) + void _showControlsWithTimelineFocus() { + if (!_showControls) { + setState(() { + _showControls = true; + }); + if (Platform.isMacOS) { + _updateTrafficLightVisibility(); + } + } + _startHideTimer(); + + // Request focus on timeline after controls are shown + WidgetsBinding.instance.addPostFrameCallback((_) { + _desktopControlsKey.currentState?.requestTimelineFocus(); + }); + } + /// Hide controls when navigating up from timeline (keyboard mode) void _hideControlsFromKeyboard() { if (_showControls) { @@ -1278,12 +1296,17 @@ class _PlexVideoControlsState extends State with WindowListen return KeyEventResult.handled; } - // On desktop, show controls and focus play/pause on directional input - // Only handle navigation if video player navigation is enabled + // On desktop/TV, show controls on directional input + // LEFT/RIGHT focuses timeline for seeking, UP/DOWN focuses play/pause if (!isMobile && _isDirectionalKey(key) && _videoPlayerNavigationEnabled) { - // If controls are hidden, show them and focus play/pause if (!_showControls) { - _showControlsWithFocus(); + final isHorizontal = key == LogicalKeyboardKey.arrowLeft || + key == LogicalKeyboardKey.arrowRight; + if (isHorizontal) { + _showControlsWithTimelineFocus(); + } else { + _showControlsWithFocus(); + } return KeyEventResult.handled; } // If controls are shown, let the event propagate to the focused control