fix(wayland): pointer_motion works when inactive
This commit is contained in:
@@ -147,19 +147,10 @@ impl PanelItem {
|
|||||||
calling_client: Arc<Client>,
|
calling_client: Arc<Client>,
|
||||||
data: &[u8],
|
data: &[u8],
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let panel_item = match PanelItem::from_node(node) {
|
let Some(panel_item) = PanelItem::from_node(node) else { return Ok(()) };
|
||||||
Some(panel_item) => panel_item,
|
|
||||||
None => return Ok(()),
|
|
||||||
};
|
|
||||||
let cursor = panel_item.seat_data.cursor.lock();
|
let cursor = panel_item.seat_data.cursor.lock();
|
||||||
let cursor = match &*cursor {
|
let Some(cursor) = &*cursor else { return Ok(())};
|
||||||
Some(core_surface) => core_surface,
|
let Some(core_surface) = cursor.lock().core_surface.upgrade() else { return Ok(()) };
|
||||||
None => return Ok(()),
|
|
||||||
};
|
|
||||||
let core_surface = match cursor.lock().core_surface.upgrade() {
|
|
||||||
Some(core_surface) => core_surface,
|
|
||||||
None => return Ok(()),
|
|
||||||
};
|
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
struct SurfaceMaterialInfo<'a> {
|
struct SurfaceMaterialInfo<'a> {
|
||||||
@@ -263,9 +254,6 @@ impl PanelItem {
|
|||||||
|
|
||||||
fn pointer_motion_flex(node: &Node, _calling_client: Arc<Client>, data: &[u8]) -> Result<()> {
|
fn pointer_motion_flex(node: &Node, _calling_client: Arc<Client>, data: &[u8]) -> Result<()> {
|
||||||
let Some(panel_item) = PanelItem::from_node(node) else { return Ok(()) };
|
let Some(panel_item) = PanelItem::from_node(node) else { return Ok(()) };
|
||||||
if !panel_item.seat_data.pointer_active() {
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
let Some(core_surface) = panel_item.core_surface.upgrade() else { return Ok(()) };
|
let Some(core_surface) = panel_item.core_surface.upgrade() else { return Ok(()) };
|
||||||
let Some(wl_surface) = core_surface.wl_surface() else { return Ok(()) };
|
let Some(wl_surface) = core_surface.wl_surface() else { return Ok(()) };
|
||||||
let Some(pointer) = panel_item.seat_data.pointer() else { return Ok(()) };
|
let Some(pointer) = panel_item.seat_data.pointer() else { return Ok(()) };
|
||||||
@@ -276,12 +264,11 @@ impl PanelItem {
|
|||||||
let mut position: Vector2<f64> = deserialize(data)?;
|
let mut position: Vector2<f64> = deserialize(data)?;
|
||||||
position.x = position.x.clamp(0.0, pointer_surface_size.x as f64);
|
position.x = position.x.clamp(0.0, pointer_surface_size.x as f64);
|
||||||
position.y = position.y.clamp(0.0, pointer_surface_size.y as f64);
|
position.y = position.y.clamp(0.0, pointer_surface_size.y as f64);
|
||||||
let mut pointer_active = panel_item.seat_data.pointer_active.lock();
|
if panel_item.seat_data.pointer_active() {
|
||||||
if *pointer_active {
|
|
||||||
pointer.motion(0, position.x, position.y);
|
pointer.motion(0, position.x, position.y);
|
||||||
} else {
|
} else {
|
||||||
pointer.enter(0, &wl_surface, position.x, position.y);
|
pointer.enter(0, &wl_surface, position.x, position.y);
|
||||||
*pointer_active = true;
|
*panel_item.seat_data.pointer_active.lock() = true;
|
||||||
}
|
}
|
||||||
pointer.frame();
|
pointer.frame();
|
||||||
core_surface.flush_clients();
|
core_surface.flush_clients();
|
||||||
|
|||||||
Reference in New Issue
Block a user