diff --git a/src/ifs/head_management.rs b/src/ifs/head_management.rs index fbb30b70..d8b54b6a 100644 --- a/src/ifs/head_management.rs +++ b/src/ifs/head_management.rs @@ -335,7 +335,6 @@ impl HeadManagers { let pos = node.global.pos.get(); state.position = pos.position(); state.size = pos.size(); - state.mode = node.global.mode.get(); for head in self.managers.lock().values() { skip_in_transaction!(head); if let Some(ext) = &head.ext.compositor_space_info_v1 { @@ -343,6 +342,14 @@ impl HeadManagers { ext.send_size(state); head.session.schedule_done(); } + } + } + + pub fn handle_mode_change(&self, mode: Mode) { + let state = &mut *self.state.borrow_mut(); + state.mode = mode; + for head in self.managers.lock().values() { + skip_in_transaction!(head); if let Some(ext) = &head.ext.mode_info_v1 { ext.send_mode(state); head.session.schedule_done(); diff --git a/src/state.rs b/src/state.rs index 18e1bc3a..1b31ed52 100644 --- a/src/state.rs +++ b/src/state.rs @@ -466,6 +466,9 @@ impl ConnectorData { self.head_managers .handle_colors_change(s.color_space, s.transfer_function); } + if old.mode != s.mode { + self.head_managers.handle_mode_change(s.mode); + } if let Some(output) = state.outputs.get(&self.connector.id()) && let Some(node) = &output.node {