feat: add missing setters on layer surface

This commit is contained in:
drendog 2025-12-03 19:35:56 +01:00
parent 28c87310aa
commit 042ac8550f
Signed by: dwenya
GPG key ID: 8DD77074645332D0
2 changed files with 40 additions and 2 deletions

View file

@ -27,6 +27,11 @@ pub mod platform {
} }
pub mod wayland { pub mod wayland {
pub use smithay_client_toolkit::reexports::protocols_wlr::layer_shell::v1::client::zwlr_layer_surface_v1::Anchor; pub use smithay_client_toolkit::reexports::protocols_wlr::layer_shell::v1::client::{
zwlr_layer_shell_v1::Layer as WaylandLayer,
zwlr_layer_surface_v1::{
Anchor, KeyboardInteractivity as WaylandKeyboardInteractivity,
},
};
} }
} }

View file

@ -11,12 +11,15 @@ use layer_shika_adapters::platform::calloop::{
use layer_shika_adapters::platform::slint_interpreter::{ use layer_shika_adapters::platform::slint_interpreter::{
CompilationResult, ComponentInstance, Value, CompilationResult, ComponentInstance, Value,
}; };
use layer_shika_adapters::platform::wayland::Anchor; use layer_shika_adapters::platform::wayland::{Anchor, WaylandKeyboardInteractivity, WaylandLayer};
use layer_shika_adapters::{ use layer_shika_adapters::{
AppState, ShellWindowConfig, WaylandWindowConfig, WindowState, WindowingSystemFacade, AppState, ShellWindowConfig, WaylandWindowConfig, WindowState, WindowingSystemFacade,
}; };
use layer_shika_domain::config::WindowConfig; use layer_shika_domain::config::WindowConfig;
use layer_shika_domain::errors::DomainError; use layer_shika_domain::errors::DomainError;
use layer_shika_domain::value_objects::keyboard_interactivity::KeyboardInteractivity;
use layer_shika_domain::value_objects::layer::Layer;
use layer_shika_domain::value_objects::margins::Margins;
use std::cell::RefCell; use std::cell::RefCell;
use std::collections::HashMap; use std::collections::HashMap;
use std::os::unix::io::AsFd; use std::os::unix::io::AsFd;
@ -41,6 +44,36 @@ impl LayerSurfaceHandle<'_> {
self.window_state.layer_surface().set_exclusive_zone(zone); self.window_state.layer_surface().set_exclusive_zone(zone);
} }
pub fn set_margins(&self, margins: Margins) {
self.window_state.layer_surface().set_margin(
margins.top,
margins.right,
margins.bottom,
margins.left,
);
}
pub fn set_keyboard_interactivity(&self, mode: KeyboardInteractivity) {
let wayland_mode = match mode {
KeyboardInteractivity::None => WaylandKeyboardInteractivity::None,
KeyboardInteractivity::Exclusive => WaylandKeyboardInteractivity::Exclusive,
KeyboardInteractivity::OnDemand => WaylandKeyboardInteractivity::OnDemand,
};
self.window_state
.layer_surface()
.set_keyboard_interactivity(wayland_mode);
}
pub fn set_layer(&self, layer: Layer) {
let wayland_layer = match layer {
Layer::Background => WaylandLayer::Background,
Layer::Bottom => WaylandLayer::Bottom,
Layer::Top => WaylandLayer::Top,
Layer::Overlay => WaylandLayer::Overlay,
};
self.window_state.layer_surface().set_layer(wayland_layer);
}
pub fn commit(&self) { pub fn commit(&self) {
self.window_state.commit_surface(); self.window_state.commit_surface();
} }