diff --git a/display/color_temp.go b/display/color_temp.go index 6e3a1df1..84a494fd 100644 --- a/display/color_temp.go +++ b/display/color_temp.go @@ -238,6 +238,9 @@ func (m *Manager) saveColorTempValueInCfg(value int32) { func (m *Manager) saveColorTempModeInCfg(mode int32) { m.modifySuitableUserMonitorModeConfig(func(cfg *UserMonitorModeConfig) { cfg.ColorTemperatureMode = mode + if cfg.ColorTemperatureMode != ColorTemperatureModeNone { + cfg.ColorTemperatureModeOn = cfg.ColorTemperatureMode + } }) err := m.saveUserConfig() if err != nil { diff --git a/display/display.go b/display/display.go index 8b029141..d32928d9 100644 --- a/display/display.go +++ b/display/display.go @@ -100,6 +100,33 @@ func Start(service *dbusutil.Service) error { if err != nil { return err } + so := service.GetServerObject(m) + if so != nil { + err = so.SetWriteCallback(m, "ColorTemperatureEnabled", func(write *dbusutil.PropertyWrite) *dbus.Error { + value, ok := write.Value.(bool) + if !ok { + err = errors.New("Type is not bool") + logger.Warning(err) + return dbusutil.ToError(err) + } + ok = m.setPropColorTemperatureEnabled(value) + if !ok { + err = errors.New("Set ColorTemperatureEnabled failed!") + logger.Warning(err) + return dbusutil.ToError(err) + } + cfg := m.getSuitableUserMonitorModeConfig(m.DisplayMode) + if cfg == nil { + cfg = getDefaultUserMonitorModeConfig() + } + mode := ColorTemperatureModeNone + if value { + mode = cfg.ColorTemperatureModeOn + } + err = m.setColorTempMode(mode) + return dbusutil.ToError(err) + }) + } err = service.RequestName(dbusServiceName) if err != nil { diff --git a/display/displayconf.go b/display/displayconf.go index 06526eb7..f9796091 100644 --- a/display/displayconf.go +++ b/display/displayconf.go @@ -72,6 +72,7 @@ const ( type UserMonitorModeConfig struct { ColorTemperatureMode int32 ColorTemperatureManual int32 + ColorTemperatureModeOn int32 //记录用户开启色温时的模式 // 以后如果有必要 // Monitors UserMonitorConfigs } @@ -83,6 +84,9 @@ func (c *UserMonitorModeConfig) fix() { if !isValidColorTempValue(c.ColorTemperatureManual) { c.ColorTemperatureManual = defaultTemperatureManual } + if c.ColorTemperatureMode != ColorTemperatureModeNone { + c.ColorTemperatureModeOn = c.ColorTemperatureMode + } } func (c *UserMonitorModeConfig) clone() *UserMonitorModeConfig { @@ -97,6 +101,8 @@ func getDefaultUserMonitorModeConfig() *UserMonitorModeConfig { return &UserMonitorModeConfig{ ColorTemperatureMode: defaultTemperatureMode, ColorTemperatureManual: defaultTemperatureManual, + // TODO: 如果配置缺失,需要一个色温使能的模式 + ColorTemperatureModeOn: ColorTemperatureModeAuto, } }