element/surface: Simplify surface feedback selection using the frame_time_filter

This commit is contained in:
Victoria Brekenfeld 2026-01-06 17:21:04 +01:00 committed by Victoria Brekenfeld
parent d17a4ead68
commit dc5a9fac66
2 changed files with 26 additions and 27 deletions

View file

@ -1,5 +1,8 @@
use crate::{
shell::focus::target::PointerFocusTarget, wayland::protocols::corner_radius::CacheableCorners,
shell::focus::target::PointerFocusTarget,
wayland::{
handlers::compositor::frame_time_filter_fn, protocols::corner_radius::CacheableCorners,
},
};
use std::{
borrow::Cow,
@ -16,7 +19,6 @@ use smithay::{
element::{
AsRenderElements, Kind, RenderElementStates,
surface::{WaylandSurfaceRenderElement, render_elements_from_surface_tree},
utils::select_dmabuf_feedback,
},
},
desktop::{
@ -674,7 +676,7 @@ impl CosmicSurface {
&self,
output: &Output,
feedback: &SurfaceDmabufFeedback,
render_element_states: &RenderElementStates,
_render_element_states: &RenderElementStates,
primary_scan_out_output: F1,
) where
F1: FnMut(&WlSurface, &SurfaceData) -> Option<Output> + Copy,
@ -682,23 +684,22 @@ impl CosmicSurface {
let is_fullscreen = self.is_fullscreen(false);
self.0
.send_dmabuf_feedback(output, primary_scan_out_output, |surface, _| {
select_dmabuf_feedback(
surface,
render_element_states,
&feedback.render_feedback,
if is_fullscreen {
feedback
.primary_scanout_feedback
.as_ref()
.unwrap_or(&feedback.render_feedback)
} else {
.send_dmabuf_feedback(output, primary_scan_out_output, |_, data| {
if is_fullscreen {
feedback
.primary_scanout_feedback
.as_ref()
.unwrap_or(&feedback.render_feedback)
} else {
if frame_time_filter_fn(data) == Kind::ScanoutCandidate {
feedback
.overlay_scanout_feedback
.as_ref()
.unwrap_or(&feedback.render_feedback)
},
)
} else {
&feedback.render_feedback
}
}
})
}