diff --git a/src/backend/udev.rs b/src/backend/udev.rs index b2250c74a..01fcd26c6 100644 --- a/src/backend/udev.rs +++ b/src/backend/udev.rs @@ -1065,9 +1065,18 @@ impl Udev { .connector_saved_states .get(&OutputName(output.name())) { - let ConnectorSavedState { loc, tags, scale } = saved_state; - output.with_state_mut(|state| state.tags.clone_from(tags)); - pinnacle.change_output_state(self, &output, None, None, *scale, Some(*loc)); + let ConnectorSavedState { + loc, + tags, + scale, + powered, + } = saved_state.clone(); + + output.with_state_mut(|state| state.tags.clone_from(&tags)); + pinnacle.change_output_state(self, &output, None, None, scale, Some(loc)); + if let Some(powered) = powered { + self.set_output_powered(&output, &pinnacle.loop_handle, powered); + } } else { pinnacle.signal_state.output_connect.signal(&output); } diff --git a/src/config.rs b/src/config.rs index 99f0cac3e..10dc3fe0b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -296,6 +296,8 @@ pub struct ConnectorSavedState { pub tags: IndexSet, /// The output's previous scale pub scale: Option, + /// The output's previous powered state + pub powered: Option, // TODO: transform } diff --git a/src/output.rs b/src/output.rs index 2471ff2f8..2692dc8fc 100644 --- a/src/output.rs +++ b/src/output.rs @@ -334,6 +334,7 @@ impl Pinnacle { loc: output.current_location(), tags: output.with_state(|state| state.tags.clone()), scale: Some(output.current_scale()), + powered: Some(output.with_state(|state| state.powered)), }, ); @@ -381,6 +382,7 @@ impl Pinnacle { loc: output.current_location(), tags: output.with_state(|state| state.tags.clone()), scale: Some(output.current_scale()), + powered: Some(output.with_state(|state| state.powered)), }, );