From f5901389e067dccbf6cc4428a3d890f82e082b6f Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Sun, 3 May 2026 06:52:51 +0200 Subject: [PATCH] fix(macos): restore traffic lights on player exit --- lib/widgets/video_controls/parts/visibility.dart | 2 ++ lib/widgets/video_controls/video_controls.dart | 3 +++ 2 files changed, 5 insertions(+) diff --git a/lib/widgets/video_controls/parts/visibility.dart b/lib/widgets/video_controls/parts/visibility.dart index f0f1bd16..8e151a83 100644 --- a/lib/widgets/video_controls/parts/visibility.dart +++ b/lib/widgets/video_controls/parts/visibility.dart @@ -249,10 +249,12 @@ extension _PlexVideoControlsVisibilityMethods on _PlexVideoControlsState { } void _updateTrafficLightVisibility() async { + final generation = ++_trafficLightVisibilityGeneration; // When maximized or fullscreen, always keep traffic lights visible so the // user can reach them without the controls-hide-on-mouse-leave race. // In normal windowed mode, toggle with controls as before. final isMaximizedOrFullscreen = await windowManager.isMaximized() || await windowManager.isFullScreen(); + if (!mounted || generation != _trafficLightVisibilityGeneration) return; final visible = isMaximizedOrFullscreen || _forceShowControls ? true : _showControls; await MacOSWindowService.setTrafficLightsVisible(visible); } diff --git a/lib/widgets/video_controls/video_controls.dart b/lib/widgets/video_controls/video_controls.dart index 841f59cd..ad33b29a 100644 --- a/lib/widgets/video_controls/video_controls.dart +++ b/lib/widgets/video_controls/video_controls.dart @@ -362,6 +362,7 @@ class _PlexVideoControlsState extends State with WindowListen Timer? _lockIconTimer; bool get _clickVideoTogglesPlayback => _settings.read(SettingsService.clickVideoTogglesPlayback); bool _isContentStripVisible = false; // Whether the swipe-up content strip is showing + int _trafficLightVisibilityGeneration = 0; // GlobalKey to access DesktopVideoControls state for focus management final GlobalKey _desktopControlsKey = GlobalKey(); @@ -524,6 +525,8 @@ class _PlexVideoControlsState extends State with WindowListen } if (Platform.isMacOS) { _pipService.isPipActive.removeListener(_onMacPipChanged); + _trafficLightVisibilityGeneration++; + unawaited(MacOSWindowService.setTrafficLightsVisible(true)); } super.dispose(); }