feat: add missing kb interactivity

This commit is contained in:
drendog 2025-11-02 13:11:28 +01:00
parent 9252b93196
commit 7e2aa6dd3e
Signed by: dwenya
GPG key ID: 8DD77074645332D0
7 changed files with 45 additions and 6 deletions

View file

@ -1,10 +1,11 @@
use layer_shika_domain::prelude::{ use layer_shika_domain::prelude::{
AnchorEdges, Layer, Margins, WindowConfig as DomainWindowConfig, AnchorEdges, KeyboardInteractivity as DomainKeyboardInteractivity, Layer, Margins,
WindowConfig as DomainWindowConfig,
}; };
use slint_interpreter::ComponentDefinition; use slint_interpreter::ComponentDefinition;
use smithay_client_toolkit::reexports::protocols_wlr::layer_shell::v1::client::{ use smithay_client_toolkit::reexports::protocols_wlr::layer_shell::v1::client::{
zwlr_layer_shell_v1::{self}, zwlr_layer_shell_v1::{self},
zwlr_layer_surface_v1::{Anchor, KeyboardInteractivity}, zwlr_layer_surface_v1::{Anchor, KeyboardInteractivity as WaylandKeyboardInteractivity},
}; };
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
@ -12,7 +13,7 @@ pub(crate) struct LayerSurfaceParams {
pub anchor: Anchor, pub anchor: Anchor,
pub margin: Margins, pub margin: Margins,
pub exclusive_zone: i32, pub exclusive_zone: i32,
pub keyboard_interactivity: KeyboardInteractivity, pub keyboard_interactivity: WaylandKeyboardInteractivity,
pub height: u32, pub height: u32,
} }
@ -22,7 +23,7 @@ pub struct WaylandWindowConfig {
pub layer: zwlr_layer_shell_v1::Layer, pub layer: zwlr_layer_shell_v1::Layer,
pub margin: Margins, pub margin: Margins,
pub anchor: Anchor, pub anchor: Anchor,
pub keyboard_interactivity: KeyboardInteractivity, pub keyboard_interactivity: WaylandKeyboardInteractivity,
pub exclusive_zone: i32, pub exclusive_zone: i32,
pub scale_factor: f32, pub scale_factor: f32,
pub namespace: String, pub namespace: String,
@ -40,7 +41,9 @@ impl WaylandWindowConfig {
layer: convert_layer(domain_config.layer), layer: convert_layer(domain_config.layer),
margin: domain_config.margin, margin: domain_config.margin,
anchor: convert_anchor(domain_config.anchor), anchor: convert_anchor(domain_config.anchor),
keyboard_interactivity: KeyboardInteractivity::OnDemand, keyboard_interactivity: convert_keyboard_interactivity(
domain_config.keyboard_interactivity,
),
exclusive_zone: domain_config.exclusive_zone, exclusive_zone: domain_config.exclusive_zone,
scale_factor: domain_config.scale_factor, scale_factor: domain_config.scale_factor,
namespace: domain_config.namespace, namespace: domain_config.namespace,
@ -76,3 +79,13 @@ const fn convert_anchor(anchor: AnchorEdges) -> Anchor {
result result
} }
const fn convert_keyboard_interactivity(
mode: DomainKeyboardInteractivity,
) -> WaylandKeyboardInteractivity {
match mode {
DomainKeyboardInteractivity::None => WaylandKeyboardInteractivity::None,
DomainKeyboardInteractivity::Exclusive => WaylandKeyboardInteractivity::Exclusive,
DomainKeyboardInteractivity::OnDemand => WaylandKeyboardInteractivity::OnDemand,
}
}

View file

@ -1,7 +1,9 @@
use crate::Result; use crate::Result;
use crate::system::WindowingSystem; use crate::system::WindowingSystem;
use layer_shika_adapters::platform::slint_interpreter::ComponentDefinition; use layer_shika_adapters::platform::slint_interpreter::ComponentDefinition;
use layer_shika_domain::prelude::{AnchorEdges, Layer, Margins, WindowConfig}; use layer_shika_domain::prelude::{
AnchorEdges, KeyboardInteractivity, Layer, Margins, WindowConfig,
};
pub struct NeedsComponent; pub struct NeedsComponent;
pub struct HasComponent { pub struct HasComponent {
@ -73,6 +75,12 @@ impl LayerShika<HasComponent> {
self self
} }
#[must_use]
pub const fn with_keyboard_interactivity(mut self, mode: KeyboardInteractivity) -> Self {
self.config.keyboard_interactivity = mode;
self
}
pub fn build(self) -> Result<WindowingSystem> { pub fn build(self) -> Result<WindowingSystem> {
WindowingSystem::new(self.state.component_definition, self.config) WindowingSystem::new(self.state.component_definition, self.config)
} }

View file

@ -13,6 +13,7 @@ pub use layer_shika_adapters::close_current_popup;
pub use layer_shika_adapters::platform::{slint, slint_interpreter}; pub use layer_shika_adapters::platform::{slint, slint_interpreter};
pub use layer_shika_adapters::{clear_popup_config, get_popup_config, set_popup_config}; pub use layer_shika_adapters::{clear_popup_config, get_popup_config, set_popup_config};
pub use layer_shika_domain::value_objects::anchor::AnchorEdges; pub use layer_shika_domain::value_objects::anchor::AnchorEdges;
pub use layer_shika_domain::value_objects::keyboard_interactivity::KeyboardInteractivity;
pub use layer_shika_domain::value_objects::popup_positioning_mode::PopupPositioningMode; pub use layer_shika_domain::value_objects::popup_positioning_mode::PopupPositioningMode;
pub mod calloop { pub mod calloop {

View file

@ -1,4 +1,5 @@
use crate::value_objects::anchor::AnchorEdges; use crate::value_objects::anchor::AnchorEdges;
use crate::value_objects::keyboard_interactivity::KeyboardInteractivity;
use crate::value_objects::layer::Layer; use crate::value_objects::layer::Layer;
use crate::value_objects::margins::Margins; use crate::value_objects::margins::Margins;
@ -11,6 +12,7 @@ pub struct WindowConfig {
pub namespace: String, pub namespace: String,
pub layer: Layer, pub layer: Layer,
pub anchor: AnchorEdges, pub anchor: AnchorEdges,
pub keyboard_interactivity: KeyboardInteractivity,
} }
impl WindowConfig { impl WindowConfig {
@ -24,6 +26,7 @@ impl WindowConfig {
scale_factor: 1.0, scale_factor: 1.0,
layer: Layer::default(), layer: Layer::default(),
anchor: AnchorEdges::default(), anchor: AnchorEdges::default(),
keyboard_interactivity: KeyboardInteractivity::default(),
} }
} }
} }

View file

@ -8,5 +8,6 @@ pub use crate::errors::{DomainError, Result};
pub use crate::surface_dimensions::SurfaceDimensions; pub use crate::surface_dimensions::SurfaceDimensions;
pub use crate::value_objects::anchor::AnchorEdges; pub use crate::value_objects::anchor::AnchorEdges;
pub use crate::value_objects::dimensions::WindowHeight; pub use crate::value_objects::dimensions::WindowHeight;
pub use crate::value_objects::keyboard_interactivity::KeyboardInteractivity;
pub use crate::value_objects::layer::Layer; pub use crate::value_objects::layer::Layer;
pub use crate::value_objects::margins::Margins; pub use crate::value_objects::margins::Margins;

View file

@ -0,0 +1,12 @@
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum KeyboardInteractivity {
None,
Exclusive,
OnDemand,
}
impl Default for KeyboardInteractivity {
fn default() -> Self {
Self::OnDemand
}
}

View file

@ -1,5 +1,6 @@
pub mod anchor; pub mod anchor;
pub mod dimensions; pub mod dimensions;
pub mod keyboard_interactivity;
pub mod layer; pub mod layer;
pub mod margins; pub mod margins;
pub mod popup_config; pub mod popup_config;