diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-02-10 08:03:39 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-02-10 07:29:33 -0800 |
| commit | 1d883931b4ae7704128f02fd566486fb02351196 (patch) | |
| tree | 575124aeaa26ee6a0ccff0c55a3facda9dfe9944 /src/layout/workspace.rs | |
| parent | b65fad09d8f5253a28ee7ad9d293583641fc2c36 (diff) | |
| download | niri-1d883931b4ae7704128f02fd566486fb02351196.tar.gz niri-1d883931b4ae7704128f02fd566486fb02351196.tar.bz2 niri-1d883931b4ae7704128f02fd566486fb02351196.zip | |
Account for border in contents_under()
Fixes pointer clicks going through window borders to a layer surface below,
also fixes window not getting activated in all cases from a border click.
Diffstat (limited to 'src/layout/workspace.rs')
| -rw-r--r-- | src/layout/workspace.rs | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index f005577d..165ae750 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -19,7 +19,9 @@ use super::scrolling::{ ScrollingSpaceRenderElement, }; use super::tile::{Tile, TileRenderSnapshot}; -use super::{ActivateWindow, InteractiveResizeData, LayoutElement, Options, RemovedTile, SizeFrac}; +use super::{ + ActivateWindow, HitType, InteractiveResizeData, LayoutElement, Options, RemovedTile, SizeFrac, +}; use crate::animation::Clock; use crate::niri_render_elements; use crate::render_helpers::renderer::NiriRenderer; @@ -1459,10 +1461,7 @@ impl<W: LayoutElement> Workspace<W> { .start_close_animation_for_tile(renderer, snapshot, tile_size, tile_pos, blocker); } - pub fn window_under( - &self, - pos: Point<f64, Logical>, - ) -> Option<(&W, Option<Point<f64, Logical>>)> { + pub fn window_under(&self, pos: Point<f64, Logical>) -> Option<(&W, HitType)> { self.tiles_with_render_positions() .find_map(|(tile, tile_pos, visible)| { if !visible { @@ -1473,9 +1472,9 @@ impl<W: LayoutElement> Workspace<W> { if tile.is_in_input_region(pos_within_tile) { let win_pos = tile_pos + tile.buf_loc(); - return Some((tile.window(), Some(win_pos))); + return Some((tile.window(), HitType::Input { win_pos })); } else if tile.is_in_activation_region(pos_within_tile) { - return Some((tile.window(), None)); + return Some((tile.window(), HitType::Activate)); } None |
