WCAG: Add reduce_motion config, bridge property, OS detection

Config default, reduceMotion Q_PROPERTY on UIBridge, Windows
SystemParametersInfo detection for prefers-reduced-motion.
This commit is contained in:
Your Name
2026-02-18 21:02:27 +02:00
parent d40c83cc45
commit a70e76b4ab
3 changed files with 32 additions and 1 deletions

15
main.py
View File

@@ -80,6 +80,21 @@ try:
except:
pass
# Detect Windows "Reduce Motion" preference
try:
import ctypes
SPI_GETCLIENTAREAANIMATION = 0x1042
animation_enabled = ctypes.c_bool(True)
ctypes.windll.user32.SystemParametersInfoW(
SPI_GETCLIENTAREAANIMATION, 0,
ctypes.byref(animation_enabled), 0
)
if not animation_enabled.value:
ConfigManager().data["reduce_motion"] = True
ConfigManager().save()
except Exception:
pass
# Configure Logging
class QmlLoggingHandler(logging.Handler, QObject):
sig_log = Signal(str)

View File

@@ -58,7 +58,10 @@ DEFAULT_SETTINGS = {
# Low VRAM Mode
"unload_models_after_use": False # If True, models are unloaded immediately to free VRAM
"unload_models_after_use": False, # If True, models are unloaded immediately to free VRAM
# Accessibility
"reduce_motion": False # Disable animations for WCAG 2.3.3
}
class ConfigManager:

View File

@@ -111,6 +111,7 @@ class UIBridge(QObject):
settingChanged = Signal(str, 'QVariant')
modelStatesChanged = Signal() # Notify UI to re-check isModelDownloaded
llmDownloadRequested = Signal()
reduceMotionChanged = Signal(bool)
def __init__(self, parent=None):
super().__init__(parent)
@@ -130,6 +131,7 @@ class UIBridge(QObject):
self._app_vram_mb = 0.0
self._app_vram_percent = 0.0
self._is_destroyed = False
self._reduce_motion = bool(ConfigManager().get("reduce_motion"))
# Start QThread Stats Worker
self.stats_worker = StatsWorker()
@@ -277,6 +279,8 @@ class UIBridge(QObject):
ConfigManager().set(key, value)
if key == "ui_scale":
self.uiScale = float(value)
if key == "reduce_motion":
self.reduceMotion = bool(value)
self.settingChanged.emit(key, value) # Notify listeners (e.g. Overlay)
@Property(float, notify=uiScaleChanged)
@@ -288,6 +292,15 @@ class UIBridge(QObject):
self._ui_scale = val
self.uiScaleChanged.emit(val)
@Property(bool, notify=reduceMotionChanged)
def reduceMotion(self): return self._reduce_motion
@reduceMotion.setter
def reduceMotion(self, val):
if self._reduce_motion != val:
self._reduce_motion = val
self.reduceMotionChanged.emit(val)
@Property(float, notify=appCpuChanged)
def appCpu(self): return self._app_cpu