feat: propagate nested output scale
This commit is contained in:
1 parent
4f5f88b06f
commit
59ad6d40b2
2 files changed
+81
-13
No files matched your search
@@ -9,7 +9,7 @@ use smithay::{
|
||||
},
|
||||
reexports::wayland_server::{Resource, protocol::wl_surface::WlSurface},
|
||||
wayland::{
|
||||
compositor::with_states,
|
||||
compositor::{TraversalAction, with_states, with_surface_tree_downward},
|
||||
fractional_scale::{FractionalScaleHandler, with_fractional_scale},
|
||||
output::OutputHandler,
|
||||
pointer_constraints::{
|
||||
@@ -52,12 +52,43 @@ impl OutputHandler for Ferese {}
|
||||
|
||||
impl FractionalScaleHandler for Ferese {
|
||||
fn new_fractional_scale(&mut self, surface: WlSurface) {
|
||||
let scale = self
|
||||
.space
|
||||
.outputs()
|
||||
.next()
|
||||
.map(|output| output.current_scale().fractional_scale())
|
||||
.unwrap_or(1.0);
|
||||
|
||||
with_states(&surface, |states| {
|
||||
with_fractional_scale(states, |scale| scale.set_preferred_scale(1.0));
|
||||
with_fractional_scale(states, |surface_scale| {
|
||||
surface_scale.set_preferred_scale(scale);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
impl Ferese {
|
||||
pub fn update_fractional_scale(&self, scale: f64) {
|
||||
for window in self.space.elements() {
|
||||
let Some(toplevel) = window.toplevel() else {
|
||||
continue;
|
||||
};
|
||||
|
||||
with_surface_tree_downward(
|
||||
toplevel.wl_surface(),
|
||||
(),
|
||||
|_, _, &()| TraversalAction::DoChildren(()),
|
||||
|_, states, &()| {
|
||||
with_fractional_scale(states, |surface_scale| {
|
||||
surface_scale.set_preferred_scale(scale);
|
||||
});
|
||||
},
|
||||
|_, _, &()| true,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl PointerConstraintsHandler for Ferese {
|
||||
fn new_constraint(&mut self, _surface: &WlSurface, pointer: &PointerHandle<Self>) {
|
||||
self.activate_focused_pointer_constraint(pointer);
|
||||
|
||||
Reference in new issue
Block a user