From 3ea4e389eb66dddb724e0aa86e1749af7d0468a0 Mon Sep 17 00:00:00 2001 From: bbedward Date: Mon, 23 Feb 2026 19:01:20 -0500 Subject: [PATCH] thememode: connect to loginctl PrepareForSleep event --- core/internal/server/server.go | 7 +++ core/internal/server/thememode/manager.go | 54 ++++++++++++++++------- 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/core/internal/server/server.go b/core/internal/server/server.go index ae6d51cc..8d838f5f 100644 --- a/core/internal/server/server.go +++ b/core/internal/server/server.go @@ -1599,6 +1599,13 @@ func Start(printDocs bool) error { log.Warnf("Theme mode manager unavailable: %v", err) } else { notifyCapabilityChange() + go func() { + <-loginctlReady + if loginctlManager == nil { + return + } + themeModeManager.WatchLoginctl(loginctlManager) + }() } fatalErrChan := make(chan error, 1) diff --git a/core/internal/server/thememode/manager.go b/core/internal/server/thememode/manager.go index 232c23bb..41dfdd53 100644 --- a/core/internal/server/thememode/manager.go +++ b/core/internal/server/thememode/manager.go @@ -5,6 +5,7 @@ import ( "sync" "time" + "github.com/AvengeMedia/DankMaterialShell/core/internal/server/loginctl" "github.com/AvengeMedia/DankMaterialShell/core/internal/server/wayland" "github.com/AvengeMedia/DankMaterialShell/core/pkg/syncmap" ) @@ -187,6 +188,29 @@ func (m *Manager) Close() { }) } +func (m *Manager) WatchLoginctl(lm *loginctl.Manager) { + ch := lm.Subscribe("thememode") + m.wg.Add(1) + go func() { + defer m.wg.Done() + defer lm.Unsubscribe("thememode") + for { + select { + case <-m.stopChan: + return + case state, ok := <-ch: + if !ok { + return + } + if state.PreparingForSleep { + continue + } + m.TriggerUpdate() + } + } + }() +} + func (m *Manager) schedulerLoop() { defer m.wg.Done() @@ -327,10 +351,12 @@ func statesEqual(a, b *State) bool { } func (m *Manager) computeSchedule(now time.Time, config Config) (bool, time.Time) { - if config.Mode == "location" { + switch config.Mode { + case "location": return m.computeLocationSchedule(now, config) + default: + return computeTimeSchedule(now, config) } - return computeTimeSchedule(now, config) } func computeTimeSchedule(now time.Time, config Config) (bool, time.Time) { @@ -381,10 +407,10 @@ func (m *Manager) computeLocationSchedule(now time.Time, config Config) (bool, t } times, cond := wayland.CalculateSunTimesWithTwilight(*lat, *lon, now, config.ElevationTwilight, config.ElevationDaylight) - if cond != wayland.SunNormal { - if cond == wayland.SunMidnightSun { - return true, startOfNextDay(now) - } + switch cond { + case wayland.SunMidnightSun: + return true, startOfNextDay(now) + case wayland.SunPolarNight: return false, startOfNextDay(now) } @@ -397,10 +423,10 @@ func (m *Manager) computeLocationSchedule(now time.Time, config Config) (bool, t nextDay := startOfNextDay(now) nextTimes, nextCond := wayland.CalculateSunTimesWithTwilight(*lat, *lon, nextDay, config.ElevationTwilight, config.ElevationDaylight) - if nextCond != wayland.SunNormal { - if nextCond == wayland.SunMidnightSun { - return true, startOfNextDay(nextDay) - } + switch nextCond { + case wayland.SunMidnightSun: + return true, startOfNextDay(nextDay) + case wayland.SunPolarNight: return false, startOfNextDay(nextDay) } @@ -413,13 +439,7 @@ func startOfNextDay(t time.Time) time.Time { } func validateHourMinute(hour, minute int) bool { - if hour < 0 || hour > 23 { - return false - } - if minute < 0 || minute > 59 { - return false - } - return true + return hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59 } func (m *Manager) ValidateSchedule(startHour, startMinute, endHour, endMinute int) error {