diff --git a/src/backend/render/mod.rs b/src/backend/render/mod.rs index e08f2b5e..73b4b93b 100644 --- a/src/backend/render/mod.rs +++ b/src/backend/render/mod.rs @@ -290,7 +290,8 @@ where .unwrap() .borrow() .is_some(); - let active_output = &last_active_seat.active_output() == output; + let active_output = last_active_seat.active_output(); + let is_active_space = workspace.outputs().any(|o| o == &active_output); elements.extend( workspace @@ -299,7 +300,7 @@ where output, &state.shell.override_redirect_windows, state.xwayland_state.as_mut(), - (!move_active && active_output).then_some(&last_active_seat), + (!move_active && is_active_space).then_some(&last_active_seat), state.config.static_conf.active_hint, exclude_workspace_overview, ) diff --git a/src/shell/layout/floating/mod.rs b/src/shell/layout/floating/mod.rs index cc519011..2c3499ba 100644 --- a/src/shell/layout/floating/mod.rs +++ b/src/shell/layout/floating/mod.rs @@ -361,12 +361,14 @@ impl FloatingLayout { puffin::profile_function!(); let output_scale = output.current_scale().fractional_scale(); + let output_loc = self.space.output_geometry(output).unwrap().loc; + self.space .elements_for_output(output) .rev() .flat_map(|elem| { let render_location = - self.space.element_location(elem).unwrap() - elem.geometry().loc; + self.space.element_location(elem).unwrap() - output_loc - elem.geometry().loc; let mut elements = elem.render_elements( renderer, render_location.to_physical_precise_round(output_scale), @@ -377,7 +379,7 @@ impl FloatingLayout { let element = IndicatorShader::element( renderer, Rectangle::from_loc_and_size( - self.space.element_location(elem).unwrap(), + self.space.element_location(elem).unwrap() - output_loc, elem.geometry().size, ), indicator_thickness, diff --git a/src/shell/workspace.rs b/src/shell/workspace.rs index 1eef4669..d48d38ec 100644 --- a/src/shell/workspace.rs +++ b/src/shell/workspace.rs @@ -406,6 +406,10 @@ impl Workspace { .chain(self.tiling_layer.mapped().map(|(_, w, _)| w)) } + pub fn outputs(&self) -> impl Iterator { + self.floating_layer.space.outputs() + } + pub fn windows(&self) -> impl Iterator + '_ { self.floating_layer .windows()