Track displayed surface visibility for idle inhibition

This commit is contained in:
Samuel Onoja committed 2026-10-02 07:57:15 +01:00
1 parent aa54ab1b2b
commit 6b2974d0fa
11 files changed
+206 -3

No files matched your search

+19
View File
@@ -71,12 +71,31 @@ impl CompositorHandler for Ferese {
self.record_client_commit(&window);
}
}
if !is_sync_subsurface(surface) {
let mut surfaces = Vec::new();
smithay::desktop::utils::with_surfaces_surface_tree(surface, |surface, _| surfaces.push(surface.clone()));
for surface in surfaces {
let mapped = smithay::backend::renderer::utils::with_renderer_surface_state(&surface, |state| {
state.buffer().is_some()
})
.unwrap_or(false);
if !mapped {
smithay::desktop::utils::with_surfaces_surface_tree(&surface, |child, _| {
self.display_presentation.remove_surface(&child.into());
});
}
}
self.refresh_idle_inhibition();
}
layer_shell::handle_commit(self, surface);
xdg_shell::handle_commit(&mut self.popups, &mut self.space, surface);
crate::backends::direct::render_surface(self, surface);
}
fn destroyed(&mut self, surface: &WlSurface) {
self.display_presentation.remove_surface(&surface.into());
if self.session_lock.active {
self.session_lock
.surfaces
+1 -1
View File
@@ -96,7 +96,7 @@ impl IdleInhibitHandler for Ferese {
fn inhibit(&mut self, surface: WlSurface) {
let count = self.idle_inhibitors.entry(surface).or_default();
*count = count.saturating_add(1);
self.idle_notifier_state.set_is_inhibited(true);
self.refresh_idle_inhibition();
}
fn uninhibit(&mut self, surface: WlSurface) {