Fixes for rendering windows in Global workspace mode

* Render window and active indicator at correct position relative to
  where the output is within the space.
* Show active indicator around whole window, not only part of window on
  focused output.
This commit is contained in:
Ian Douglas Scott 2023-03-10 16:20:17 -08:00
parent 8a188cb39e
commit 3804c67557
3 changed files with 11 additions and 4 deletions

View file

@ -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,

View file

@ -406,6 +406,10 @@ impl Workspace {
.chain(self.tiling_layer.mapped().map(|(_, w, _)| w))
}
pub fn outputs(&self) -> impl Iterator<Item = &Output> {
self.floating_layer.space.outputs()
}
pub fn windows(&self) -> impl Iterator<Item = CosmicSurface> + '_ {
self.floating_layer
.windows()