49 lines
1.4 KiB
Rust
49 lines
1.4 KiB
Rust
use cosmic_protocols::corner_radius::v1::server::cosmic_corner_radius_toplevel_v1;
|
|
|
|
use crate::wayland::protocols::corner_radius::{
|
|
delegate_corner_radius, CornerRadiusData, CornerRadiusHandler, CornerRadiusState,
|
|
};
|
|
|
|
use crate::state::State;
|
|
|
|
impl CornerRadiusHandler for State {
|
|
fn corner_radius_state(&mut self) -> &mut CornerRadiusState {
|
|
&mut self.common.corner_radius_state
|
|
}
|
|
|
|
fn set_corner_radius(
|
|
&mut self,
|
|
_: &cosmic_corner_radius_toplevel_v1::CosmicCornerRadiusToplevelV1,
|
|
data: &CornerRadiusData,
|
|
) {
|
|
if force_redraw(self, data).is_none() {
|
|
tracing::warn!("Failed to force redraw for corner radius change.");
|
|
}
|
|
}
|
|
|
|
fn unset_corner_radius(
|
|
&mut self,
|
|
_: &cosmic_corner_radius_toplevel_v1::CosmicCornerRadiusToplevelV1,
|
|
data: &CornerRadiusData,
|
|
) {
|
|
if force_redraw(self, data).is_none() {
|
|
tracing::warn!("Failed to force redraw for corner radius reset.");
|
|
}
|
|
}
|
|
}
|
|
|
|
fn force_redraw(state: &mut State, data: &CornerRadiusData) -> Option<()> {
|
|
let guard = data.lock().unwrap();
|
|
|
|
let toplevel = guard.toplevel.upgrade().ok()?;
|
|
|
|
let surface = state.common.xdg_shell_state.get_toplevel(&toplevel)?;
|
|
|
|
let guard = state.common.shell.read();
|
|
let output = guard.visible_output_for_surface(surface.wl_surface())?;
|
|
|
|
state.backend.schedule_render(output);
|
|
Some(())
|
|
}
|
|
|
|
delegate_corner_radius!(State);
|