mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 06:22:22 -04:00
parent
f2173fddb0
commit
f0fedf6ab8
3 changed files with 40 additions and 6 deletions
|
@ -31,7 +31,7 @@ from anki.decks import DeckDict, DeckId
|
||||||
from anki.hooks import runHook
|
from anki.hooks import runHook
|
||||||
from anki.notes import NoteId
|
from anki.notes import NoteId
|
||||||
from anki.sound import AVTag, SoundOrVideoTag
|
from anki.sound import AVTag, SoundOrVideoTag
|
||||||
from anki.utils import devMode, ids2str, int_time, isMac, isWin, split_fields
|
from anki.utils import devMode, ids2str, int_time, isLin, isMac, isWin, split_fields
|
||||||
from aqt import gui_hooks
|
from aqt import gui_hooks
|
||||||
from aqt.addons import DownloadLogEntry, check_and_prompt_for_updates, show_log_to_user
|
from aqt.addons import DownloadLogEntry, check_and_prompt_for_updates, show_log_to_user
|
||||||
from aqt.dbcheck import check_db
|
from aqt.dbcheck import check_db
|
||||||
|
@ -1005,8 +1005,17 @@ title="{}" {}>{}</button>""".format(
|
||||||
|
|
||||||
def setupStyle(self) -> None:
|
def setupStyle(self) -> None:
|
||||||
theme_manager.apply_style()
|
theme_manager.apply_style()
|
||||||
|
if isLin:
|
||||||
|
# On Linux, the check requires invoking an external binary,
|
||||||
|
# which we don't want to be doing frequently
|
||||||
|
interval_secs = 300
|
||||||
|
else:
|
||||||
|
interval_secs = 5
|
||||||
self.progress.timer(
|
self.progress.timer(
|
||||||
5 * 1000, theme_manager.apply_style_if_system_style_changed, True, False
|
interval_secs * 1000,
|
||||||
|
theme_manager.apply_style_if_system_style_changed,
|
||||||
|
True,
|
||||||
|
False,
|
||||||
)
|
)
|
||||||
|
|
||||||
def set_theme(self, theme: Theme) -> None:
|
def set_theme(self, theme: Theme) -> None:
|
||||||
|
|
|
@ -6,11 +6,12 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
from ctypes import CDLL
|
from ctypes import CDLL
|
||||||
|
|
||||||
import aqt.utils
|
import aqt.utils
|
||||||
from anki.utils import isMac, isWin
|
from anki.utils import isLin, isMac, isWin
|
||||||
|
|
||||||
|
|
||||||
def get_windows_dark_mode() -> bool:
|
def get_windows_dark_mode() -> bool:
|
||||||
|
@ -56,6 +57,26 @@ def get_macos_dark_mode() -> bool:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def get_linux_dark_mode() -> bool:
|
||||||
|
"""True if Linux system is in dark mode.
|
||||||
|
This only works if the GTK theme name contains '-dark'"""
|
||||||
|
if not isLin:
|
||||||
|
return False
|
||||||
|
try:
|
||||||
|
process = subprocess.run(
|
||||||
|
["gsettings", "get", "org.gnome.desktop.interface", "gtk-theme"],
|
||||||
|
check=True,
|
||||||
|
capture_output=True,
|
||||||
|
encoding="utf8",
|
||||||
|
)
|
||||||
|
except FileNotFoundError as e:
|
||||||
|
# swallow exceptions, as gsettings may not be installed
|
||||||
|
print(e)
|
||||||
|
return False
|
||||||
|
|
||||||
|
return "-dark" in process.stdout.lower()
|
||||||
|
|
||||||
|
|
||||||
_ankihelper_dll: CDLL | None = None
|
_ankihelper_dll: CDLL | None = None
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,12 @@ from dataclasses import dataclass
|
||||||
import aqt
|
import aqt
|
||||||
from anki.utils import isMac
|
from anki.utils import isMac
|
||||||
from aqt import QApplication, colors, gui_hooks, isWin
|
from aqt import QApplication, colors, gui_hooks, isWin
|
||||||
from aqt.platform import get_macos_dark_mode, get_windows_dark_mode, set_macos_dark_mode
|
from aqt.platform import (
|
||||||
|
get_linux_dark_mode,
|
||||||
|
get_macos_dark_mode,
|
||||||
|
get_windows_dark_mode,
|
||||||
|
set_macos_dark_mode,
|
||||||
|
)
|
||||||
from aqt.qt import (
|
from aqt.qt import (
|
||||||
QColor,
|
QColor,
|
||||||
QGuiApplication,
|
QGuiApplication,
|
||||||
|
@ -164,8 +169,7 @@ class ThemeManager:
|
||||||
elif isMac:
|
elif isMac:
|
||||||
return get_macos_dark_mode()
|
return get_macos_dark_mode()
|
||||||
else:
|
else:
|
||||||
# not supported on Linux
|
return get_linux_dark_mode()
|
||||||
return False
|
|
||||||
|
|
||||||
def apply_style_if_system_style_changed(self) -> None:
|
def apply_style_if_system_style_changed(self) -> None:
|
||||||
theme = aqt.mw.pm.theme()
|
theme = aqt.mw.pm.theme()
|
||||||
|
|
Loading…
Reference in a new issue