Fix system theme not respecting preferred dark theme. (#1673)

This commit is contained in:
Prospector
2024-04-10 18:30:46 -07:00
committed by GitHub
parent 60727656c9
commit 5b1850e161
3 changed files with 16 additions and 6 deletions

View File

@@ -722,7 +722,9 @@ function toggleBrowseMenu() {
} }
function changeTheme() { function changeTheme() {
updateTheme( updateTheme(
DARK_THEMES.includes(app.$colorMode.value) ? 'light' : cosmetics.value.preferredDarkTheme, DARK_THEMES.includes(app.$colorMode.value)
? 'light'
: cosmetics.value.preferredDarkTheme ?? 'dark',
true true
) )
} }

View File

@@ -41,7 +41,7 @@
class="theme-icon" class="theme-icon"
/> />
<MoonIcon <MoonIcon
v-else-if="cosmetics.preferredDarkTheme === option" v-else-if="(cosmetics.preferredDarkTheme ?? 'dark') === option"
v-tooltip="formatMessage(colorTheme.preferredDark)" v-tooltip="formatMessage(colorTheme.preferredDark)"
class="theme-icon" class="theme-icon"
/> />
@@ -402,14 +402,21 @@ const themeOptions = computed(() => {
onMounted(() => { onMounted(() => {
updateSystemTheme() updateSystemTheme()
window.matchMedia('(prefers-color-scheme: light)').addEventListener('change', (event) => {
setSystemTheme(event.matches)
})
}) })
function updateSystemTheme() { function updateSystemTheme() {
const colorSchemeQueryList = window.matchMedia('(prefers-color-scheme: light)') const query = window.matchMedia('(prefers-color-scheme: light)')
if (colorSchemeQueryList.matches) { setSystemTheme(query.matches)
}
function setSystemTheme(light) {
if (light) {
systemTheme.value = 'light' systemTheme.value = 'light'
} else { } else {
systemTheme.value = cosmetics.value.preferredDarkTheme systemTheme.value = cosmetics.value.preferredDarkTheme ?? 'dark'
} }
} }

View File

@@ -2,6 +2,7 @@ export default defineNuxtPlugin(async (nuxtApp) => {
await useAuth() await useAuth()
await useUser() await useUser()
const themeStore = useTheme() const themeStore = useTheme()
const cosmetics = useCosmetics()
nuxtApp.hook('app:mounted', () => { nuxtApp.hook('app:mounted', () => {
if (process.client && themeStore.value.preference === 'system') { if (process.client && themeStore.value.preference === 'system') {
@@ -12,7 +13,7 @@ export default defineNuxtPlugin(async (nuxtApp) => {
if (e.matches) { if (e.matches) {
updateTheme('light') updateTheme('light')
} else { } else {
updateTheme('dark') updateTheme(cosmetics.value.preferredDarkTheme ?? 'dark')
} }
} }
} }