mirror of
https://codeberg.org/waydeer/layer-shika.git
synced 2025-11-03 16:54:24 +00:00
feat: add missing kb interactivity
This commit is contained in:
parent
9252b93196
commit
7e2aa6dd3e
7 changed files with 45 additions and 6 deletions
|
|
@ -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,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
12
domain/src/value_objects/keyboard_interactivity.rs
Normal file
12
domain/src/value_objects/keyboard_interactivity.rs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue