diff --git a/core/renderwindow.go b/core/renderwindow.go index 86c1f42630..4b8a609495 100644 --- a/core/renderwindow.go +++ b/core/renderwindow.go @@ -527,14 +527,10 @@ func (w *renderWindow) handleWindowEvents(e events.Event) { if DebugSettings.WindowEventTrace { log.Println("Win: ScreenUpdate", w.name, screenConfig()) } - if !TheApp.Platform().IsMobile() { // native desktop - if TheApp.NScreens() > 0 { - AppearanceSettings.Apply() - UpdateAll() - theWindowGeometrySaver.restoreAll() - } - } else { - w.resized() + if TheApp.NScreens() > 0 { + AppearanceSettings.Apply() + UpdateAll() + theWindowGeometrySaver.restoreAll() } } } diff --git a/system/driver/offscreen/app.go b/system/driver/offscreen/app.go index c14d414b7a..5e34722c1a 100644 --- a/system/driver/offscreen/app.go +++ b/system/driver/offscreen/app.go @@ -57,7 +57,6 @@ func (a *App) NewWindow(opts *system.NewWindowOptions) (system.Window, error) { w.Event.WindowResize() w.Event.Window(events.WinShow) - w.Event.Window(events.ScreenUpdate) w.Event.Window(events.WinFocus) go w.WinLoop() diff --git a/system/driver/web/app.go b/system/driver/web/app.go index 47c2a13f53..e93413a8fb 100644 --- a/system/driver/web/app.go +++ b/system/driver/web/app.go @@ -88,7 +88,6 @@ func (a *App) SetSystemWindow() { a.Resize() a.InitDrawer() a.Event.Window(events.WinShow) - a.Event.Window(events.ScreenUpdate) a.Event.Window(events.WinFocus) } @@ -218,6 +217,7 @@ func (a *App) Cursor(win system.Window) system.Cursor { } func (a *App) IsDark() bool { + // See https://stackoverflow.com/a/57795495 return js.Global().Get("matchMedia").Truthy() && js.Global().Call("matchMedia", "(prefers-color-scheme: dark)").Get("matches").Truthy() } diff --git a/system/driver/web/event.go b/system/driver/web/event.go index ab1bef25d2..73afca19b1 100644 --- a/system/driver/web/event.go +++ b/system/driver/web/event.go @@ -37,6 +37,12 @@ func (a *App) AddEventListeners() { AddEventListener(g, "beforeinput", a.OnBeforeInput) AddEventListener(g.Get("visualViewport"), "resize", a.OnResize) AddEventListener(g, "blur", a.OnBlur) + + // See https://stackoverflow.com/a/57795495 + if g.Get("matchMedia").Truthy() { + pcs := g.Call("matchMedia", "(prefers-color-scheme: dark)") + AddEventListener(pcs, "change", a.OnThemeChange) + } } func AddEventListener(v js.Value, nm string, fn func(this js.Value, args []js.Value) any, opts ...map[string]any) { @@ -270,3 +276,8 @@ func (a *App) OnBlur(this js.Value, args []js.Value) any { a.KeyMods = 0 return nil } + +func (a *App) OnThemeChange(this js.Value, args []js.Value) any { + a.Event.Window(events.ScreenUpdate) + return nil +}