render: Fix OR window and sticky X11 windows stacking order

This commit is contained in:
Victoria Brekenfeld 2023-12-20 21:15:53 +00:00 committed by Victoria Brekenfeld
parent f928f80f09
commit c3ecbeee3b
2 changed files with 55 additions and 46 deletions

View file

@ -17,7 +17,6 @@ use crate::{
workspace::WorkspaceHandle,
},
},
xwayland::XWaylandState,
};
use cosmic::theme::CosmicTheme;
@ -28,7 +27,7 @@ use smithay::{
backend::renderer::{
element::{
surface::WaylandSurfaceRenderElement, texture::TextureRenderElement,
utils::RescaleRenderElement, AsRenderElements, Element, Id, RenderElement,
utils::RescaleRenderElement, Element, Id, RenderElement,
},
gles::{GlesError, GlesTexture},
glow::{GlowFrame, GlowRenderer},
@ -47,7 +46,7 @@ use smithay::{
seat::WaylandFocus,
xdg_activation::{XdgActivationState, XdgActivationToken},
},
xwayland::{X11Surface, X11Wm},
xwayland::X11Wm,
};
use std::{
collections::{HashMap, HashSet, VecDeque},
@ -57,7 +56,6 @@ use std::{
},
time::{Duration, Instant},
};
use tracing::warn;
use wayland_backend::server::ClientId;
use super::{
@ -794,8 +792,6 @@ impl Workspace {
pub fn render<'a, R>(
&self,
renderer: &mut R,
override_redirect_windows: &[X11Surface],
xwm_state: Option<&'a mut XWaylandState>,
draw_focus_indicator: Option<&Seat<State>>,
overview: (OverviewMode, Option<(SwapIndicator, Option<&Tree<Data>>)>),
resize_indicator: Option<(ResizeMode, ResizeIndicator)>,
@ -828,29 +824,6 @@ impl Workspace {
layer_map.non_exclusive_zone().as_local()
};
// OR windows above all
popup_elements.extend(
override_redirect_windows
.iter()
.filter(|or| {
(*or)
.geometry()
.as_global()
.intersection(self.output.geometry())
.is_some()
})
.flat_map(|or| {
AsRenderElements::<R>::render_elements::<WorkspaceRenderElement<R>>(
or,
renderer,
(or.geometry().loc - self.output.geometry().loc.as_logical())
.to_physical_precise_round(output_scale),
Scale::from(output_scale),
1.0,
)
}),
);
if let Some(fullscreen) = self.fullscreen.as_ref() {
// fullscreen window
let bbox = fullscreen.surface.bbox().as_local();
@ -1022,18 +995,6 @@ impl Workspace {
}
}
if let Some(xwm) = xwm_state.and_then(|state| state.xwm.as_mut()) {
if let Err(err) =
xwm.update_stacking_order_upwards(window_elements.iter().rev().map(|e| e.id()))
{
warn!(
wm_id = ?xwm.id(),
?err,
"Failed to update Xwm stacking order.",
);
}
}
Ok((window_elements, popup_elements))
}
}