Auto show/hide controls in fullscreen based on activity

This commit is contained in:
Peter Stockings
2026-03-05 13:06:50 +11:00
parent ce87a817ea
commit b59d08d098

View File

@@ -7,7 +7,8 @@ from PyQt6.QtWidgets import (
QPushButton, QFrame, QSlider, QTextEdit, QTextBrowser, QApplication, QToolTip
)
from PyQt6.QtCore import Qt, pyqtSignal, QTimer
from PyQt6.QtGui import QIcon
from PyQt6.QtGui import QIcon, QCursor
import uuid
from vlc_player import VLCSyncPlayer
@@ -125,10 +126,10 @@ class RoomWidget(QWidget):
self.video_frame.setAttribute(Qt.WidgetAttribute.WA_NativeWindow, True)
# Controls Bar
controls = QFrame()
controls.setObjectName("controlsBar")
controls.setFixedHeight(60)
controls_layout = QHBoxLayout(controls)
self.controls_bar = QFrame()
self.controls_bar.setObjectName("controlsBar")
self.controls_bar.setFixedHeight(60)
controls_layout = QHBoxLayout(self.controls_bar)
self.play_btn = QPushButton("")
self.play_btn.setFixedSize(40, 40)
@@ -172,7 +173,7 @@ class RoomWidget(QWidget):
video_layout.addWidget(self.topbar)
video_layout.addWidget(self.video_frame)
video_layout.addWidget(controls)
video_layout.addWidget(self.controls_bar)
# --- Right Side: Chat ---
self.chat_container = QFrame()
@@ -276,6 +277,18 @@ class RoomWidget(QWidget):
self.play_btn.clicked.connect(self.toggle_playback)
# Fullscreen auto-hide timer
self._fs_hide_timer = QTimer()
self._fs_hide_timer.setSingleShot(True)
self._fs_hide_timer.setInterval(3000)
self._fs_hide_timer.timeout.connect(self._hide_fullscreen_controls)
# Mouse movement polling (needed because VLC's native window eats mouse events)
self._last_mouse_pos = None
self._mouse_poll_timer = QTimer()
self._mouse_poll_timer.setInterval(200)
self._mouse_poll_timer.timeout.connect(self._check_mouse_movement)
def get_seekbar_tooltip(self, value):
length_ms = self.vlc_player.get_length()
if length_ms > 0:
@@ -320,11 +333,35 @@ class RoomWidget(QWidget):
self.fullscreen_btn.setText("")
self.chat_container.show()
self.topbar.show()
self.controls_bar.show()
self._fs_hide_timer.stop()
self._mouse_poll_timer.stop()
self.setCursor(QCursor(Qt.CursorShape.ArrowCursor))
else:
top_window.showFullScreen()
self.fullscreen_btn.setText("🗗")
self.chat_container.hide()
self.topbar.hide()
self._last_mouse_pos = QCursor.pos()
self._fs_hide_timer.start()
self._mouse_poll_timer.start()
def _hide_fullscreen_controls(self):
if self.window().isFullScreen():
self.controls_bar.hide()
self.setCursor(QCursor(Qt.CursorShape.BlankCursor))
def _show_fullscreen_controls(self):
self.controls_bar.show()
self.setCursor(QCursor(Qt.CursorShape.ArrowCursor))
self._fs_hide_timer.start()
def _check_mouse_movement(self):
pos = QCursor.pos()
if pos != self._last_mouse_pos:
self._last_mouse_pos = pos
if not self.controls_bar.isVisible():
self._show_fullscreen_controls()
def toggle_mute(self):
current_vol = self.vlc_player.get_volume()