diff --git a/session/power1/lid_switch.go b/session/power1/lid_switch.go index 73f791a15..1260efe54 100644 --- a/session/power1/lid_switch.go +++ b/session/power1/lid_switch.go @@ -89,39 +89,33 @@ func (h *LidSwitchHandler) doLidStateChanged(state bool) { h.isLidOpenLast = state m := h.manager - m.setPrepareSuspend(suspendStateLidClose) - m.PropsMu.Lock() - m.lidSwitchState = lidSwitchStateClose - m.PropsMu.Unlock() - m.claimOrReleaseAmbientLight() // 合盖 if !state { - var onBattery bool - onBattery = h.manager.OnBattery + m.setPrepareSuspend(suspendStateLidClose) + m.PropsMu.Lock() + m.lidSwitchState = lidSwitchStateClose + m.PropsMu.Unlock() + m.claimOrReleaseAmbientLight() + var lidCloseAction int32 - if onBattery { + if m.OnBattery { lidCloseAction = m.BatteryLidClosedAction.Get() // 获取合盖操作 } else { lidCloseAction = m.LinePowerLidClosedAction.Get() // 获取合盖操作 } - switch lidCloseAction { - case powerActionShutdown: - m.doShutdown() - case powerActionSuspend: - m.doSuspendByFront() - case powerActionHibernate: - m.doHibernateByFront() - case powerActionTurnOffScreen: - m.doTurnOffScreen() - case powerActionDoNothing: - return - } + m.doLidClosedAction(lidCloseAction) if lidCloseAction != powerActionTurnOffScreen && !m.isWmBlackScreenActive() { m.setWmBlackScreenActive(true) } } else { // 开盖 + m.setPrepareSuspend(suspendStateLidOpen) + m.PropsMu.Lock() + m.lidSwitchState = lidSwitchStateOpen + m.PropsMu.Unlock() + m.claimOrReleaseAmbientLight() + err := h.stopAskUser() if err != nil { logger.Warning("stopAskUser error:", err) diff --git a/session/power1/manager.go b/session/power1/manager.go index a4ce9c9aa..f66ee61a1 100644 --- a/session/power1/manager.go +++ b/session/power1/manager.go @@ -527,3 +527,18 @@ func (m *Manager) listenEventToHandleIdleOff() error { return nil } + +func (m *Manager) doLidClosedAction(action int32) { + switch action { + case powerActionShutdown: + m.doShutdown() + case powerActionSuspend: + m.doSuspendByFront() + case powerActionHibernate: + m.doHibernateByFront() + case powerActionTurnOffScreen: + m.doTurnOffScreen() + case powerActionDoNothing: + return + } +} diff --git a/session/power1/manager_events.go b/session/power1/manager_events.go index d95ef8f93..9524427d4 100644 --- a/session/power1/manager_events.go +++ b/session/power1/manager_events.go @@ -53,13 +53,20 @@ func (m *Manager) initOnBatteryChangedHandler() { logger.Debug("property OnBattery changed to", onBattery) m.PropsMu.Lock() changed := m.setPropOnBattery(onBattery) + state := m.lidSwitchState m.PropsMu.Unlock() if changed { if onBattery { playSound(soundutils.EventPowerUnplug) + if state == lidSwitchStateClose { + m.doLidClosedAction(m.BatteryLidClosedAction.Get()) + } } else { playSound(soundutils.EventPowerPlug) + if state == lidSwitchStateClose { + m.doLidClosedAction(m.LinePowerLidClosedAction.Get()) + } } } })