winit/wayland: Add action to update layer shell input zone
This commit is contained in:
parent
ea4f704f0f
commit
49f1c2250b
2 changed files with 35 additions and 2 deletions
|
|
@ -137,6 +137,12 @@ pub enum Action {
|
||||||
/// keyboard interactivity of the layer surface
|
/// keyboard interactivity of the layer surface
|
||||||
keyboard_interactivity: KeyboardInteractivity,
|
keyboard_interactivity: KeyboardInteractivity,
|
||||||
},
|
},
|
||||||
|
InputZone {
|
||||||
|
/// id of the layer surface
|
||||||
|
id: Id,
|
||||||
|
/// input zone
|
||||||
|
zone: Option<Vec<Rectangle>>,
|
||||||
|
},
|
||||||
/// layer of the layer surface
|
/// layer of the layer surface
|
||||||
Layer {
|
Layer {
|
||||||
/// id of the layer surface
|
/// id of the layer surface
|
||||||
|
|
@ -176,11 +182,15 @@ impl fmt::Debug for Action {
|
||||||
),
|
),
|
||||||
Action::KeyboardInteractivity { id, keyboard_interactivity } => write!(
|
Action::KeyboardInteractivity { id, keyboard_interactivity } => write!(
|
||||||
f,
|
f,
|
||||||
"Action::LayerSurfaceAction::Margin {{ id: {:#?}, keyboard_interactivity: {:?} }}", id, keyboard_interactivity
|
"Action::LayerSurfaceAction::KeyboardInteractivity {{ id: {:#?}, keyboard_interactivity: {:?} }}", id, keyboard_interactivity
|
||||||
|
),
|
||||||
|
Action::InputZone { id, zone } => write!(
|
||||||
|
f,
|
||||||
|
"Action::LayerSurfaceAction::InputZone {{ id: {:#?}, zone: {:?} }}", id, zone
|
||||||
),
|
),
|
||||||
Action::Layer { id, layer } => write!(
|
Action::Layer { id, layer } => write!(
|
||||||
f,
|
f,
|
||||||
"Action::LayerSurfaceAction::Margin {{ id: {:#?}, layer: {:?} }}", id, layer
|
"Action::LayerSurfaceAction::Layer {{ id: {:#?}, layer: {:?} }}", id, layer
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1139,6 +1139,29 @@ impl SctkState {
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
platform_specific::wayland::layer_surface::Action::InputZone { id, zone } => {
|
||||||
|
if let Some(layer_surface) = self.layer_surfaces.iter_mut().find(|l| l.id == id) {
|
||||||
|
if let Some(zone) = &zone {
|
||||||
|
let region = self
|
||||||
|
.compositor_state
|
||||||
|
.wl_compositor()
|
||||||
|
.create_region(&self.queue_handle, ());
|
||||||
|
for rect in zone {
|
||||||
|
region.add(
|
||||||
|
rect.x.round() as i32,
|
||||||
|
rect.y.round() as i32,
|
||||||
|
rect.width.round() as i32,
|
||||||
|
rect.height.round() as i32,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
layer_surface.surface.set_input_region(Some(®ion));
|
||||||
|
region.destroy();
|
||||||
|
} else{
|
||||||
|
layer_surface.surface.set_input_region(None);
|
||||||
|
}
|
||||||
|
_ = self.to_commit.insert(id, layer_surface.surface.wl_surface().clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
platform_specific::wayland::layer_surface::Action::Layer { id, layer } => {
|
platform_specific::wayland::layer_surface::Action::Layer { id, layer } => {
|
||||||
if let Some(layer_surface) = self.layer_surfaces.iter_mut().find(|l| l.id == id) {
|
if let Some(layer_surface) = self.layer_surfaces.iter_mut().find(|l| l.id == id) {
|
||||||
layer_surface.layer = layer;
|
layer_surface.layer = layer;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue