workspace: Update xwayland render order
This commit is contained in:
parent
4f93222586
commit
ae42c5ede9
2 changed files with 37 additions and 23 deletions
|
|
@ -171,24 +171,6 @@ where
|
||||||
fps,
|
fps,
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
|
||||||
if let Ok((_, states)) = result.as_ref() {
|
|
||||||
for xwm in state
|
|
||||||
.xwayland_state
|
|
||||||
.values_mut()
|
|
||||||
.flat_map(|state| state.xwm.as_mut())
|
|
||||||
{
|
|
||||||
if let Err(err) = xwm.update_stacking_order_upwards(states.states.keys()) {
|
|
||||||
slog_scope::warn!(
|
|
||||||
"Failed to update Xwm ({:?}) stacking order: {}",
|
|
||||||
xwm.id(),
|
|
||||||
err
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -278,7 +260,12 @@ where
|
||||||
|
|
||||||
elements.extend(
|
elements.extend(
|
||||||
workspace
|
workspace
|
||||||
.render_output::<R>(renderer, output, &state.shell.override_redirect_windows)
|
.render_output::<R>(
|
||||||
|
renderer,
|
||||||
|
output,
|
||||||
|
&state.shell.override_redirect_windows,
|
||||||
|
state.xwayland_state.values_mut(),
|
||||||
|
)
|
||||||
.map_err(|_| OutputNoMode)?
|
.map_err(|_| OutputNoMode)?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(Into::into),
|
.map(Into::into),
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ use crate::{
|
||||||
workspace::WorkspaceHandle,
|
workspace::WorkspaceHandle,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
xwayland::XWaylandState,
|
||||||
};
|
};
|
||||||
|
|
||||||
use indexmap::IndexSet;
|
use indexmap::IndexSet;
|
||||||
|
|
@ -392,11 +393,12 @@ impl Workspace {
|
||||||
self.floating_layer.mapped().any(|m| m == mapped)
|
self.floating_layer.mapped().any(|m| m == mapped)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn render_output<R>(
|
pub fn render_output<'a, R>(
|
||||||
&self,
|
&self,
|
||||||
renderer: &mut R,
|
renderer: &mut R,
|
||||||
output: &Output,
|
output: &Output,
|
||||||
override_redirect_windows: &[super::OverrideRedirectWindow],
|
override_redirect_windows: &[super::OverrideRedirectWindow],
|
||||||
|
xwm_state: impl Iterator<Item = &'a mut XWaylandState>,
|
||||||
) -> Result<Vec<WorkspaceRenderElement<R>>, OutputNotMapped>
|
) -> Result<Vec<WorkspaceRenderElement<R>>, OutputNotMapped>
|
||||||
where
|
where
|
||||||
R: Renderer + ImportAll + ImportMem + AsGlowRenderer,
|
R: Renderer + ImportAll + ImportMem + AsGlowRenderer,
|
||||||
|
|
@ -458,6 +460,18 @@ impl Workspace {
|
||||||
>(
|
>(
|
||||||
fullscreen, renderer, (0, 0).into(), output_scale.into()
|
fullscreen, renderer, (0, 0).into(), output_scale.into()
|
||||||
));
|
));
|
||||||
|
|
||||||
|
for xwm in xwm_state.flat_map(|state| state.xwm.as_mut()) {
|
||||||
|
if let Err(err) =
|
||||||
|
xwm.update_stacking_order_upwards(render_elements.iter().rev().map(|e| e.id()))
|
||||||
|
{
|
||||||
|
slog_scope::warn!(
|
||||||
|
"Failed to update Xwm ({:?}) stacking order: {}",
|
||||||
|
xwm.id(),
|
||||||
|
err
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// TODO: Handle modes like
|
// TODO: Handle modes like
|
||||||
// - keyboard window swapping
|
// - keyboard window swapping
|
||||||
|
|
@ -559,10 +573,8 @@ impl Workspace {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
render_elements.extend(window_elements.into_iter());
|
|
||||||
|
|
||||||
// OR windows below all
|
// OR windows below all
|
||||||
render_elements.extend(
|
window_elements.extend(
|
||||||
override_redirect_windows
|
override_redirect_windows
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|or| {
|
.filter(|or| {
|
||||||
|
|
@ -583,6 +595,21 @@ impl Workspace {
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
for xwm in xwm_state.flat_map(|state| state.xwm.as_mut()) {
|
||||||
|
if let Err(err) =
|
||||||
|
xwm.update_stacking_order_upwards(window_elements.iter().rev().map(|e| e.id()))
|
||||||
|
{
|
||||||
|
slog_scope::warn!(
|
||||||
|
"Failed to update Xwm ({:?}) stacking order: {}",
|
||||||
|
xwm.id(),
|
||||||
|
err
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
render_elements.extend(window_elements.into_iter());
|
||||||
|
|
||||||
// bottom and background layer surfaces
|
// bottom and background layer surfaces
|
||||||
{
|
{
|
||||||
render_elements.extend(
|
render_elements.extend(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue