diff --git a/scanslicer/main.py b/scanslicer/main.py index 391a082..db0408c 100644 --- a/scanslicer/main.py +++ b/scanslicer/main.py @@ -92,3 +92,40 @@ def _read_portal_dark_preference(): if color_scheme == 2: return False return None + + +# apply_dark_theme_if_requested: function definition for ScanSlicer behavior. +def apply_dark_theme_if_requested(app): + theme_value = os.environ.get("GTK_THEME", "").lower() + dark_theme_requested = "dark" in theme_value + if not dark_theme_requested: + portal_pref = _read_portal_dark_preference() + if portal_pref is not None: + dark_theme_requested = portal_pref + + if not dark_theme_requested: + try: + dark_theme_requested = app.styleHints().colorScheme() == Qt.ColorScheme.Dark + except Exception: + dark_theme_requested = False + + if not dark_theme_requested: + return + + # Some container/desktop combinations do not propagate GTK dark theme + # correctly to Qt widgets; enforce a dark palette when dark mode is requested. + app.setStyle("Fusion") + palette = QPalette() + palette.setColor(QPalette.Window, QColor(53, 53, 53)) + palette.setColor(QPalette.WindowText, QColor(255, 255, 255)) + palette.setColor(QPalette.Base, QColor(35, 35, 35)) + palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53)) + palette.setColor(QPalette.ToolTipBase, QColor(35, 35, 35)) + palette.setColor(QPalette.ToolTipText, QColor(255, 255, 255)) + palette.setColor(QPalette.Text, QColor(255, 255, 255)) + palette.setColor(QPalette.Button, QColor(53, 53, 53)) + palette.setColor(QPalette.ButtonText, QColor(255, 255, 255)) + palette.setColor(QPalette.BrightText, QColor(255, 0, 0)) + palette.setColor(QPalette.Highlight, QColor(42, 130, 218)) + palette.setColor(QPalette.HighlightedText, QColor(255, 255, 255)) + app.setPalette(palette)