aboutsummaryrefslogtreecommitdiff
path: root/src/layout/workspace.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-02-10 08:03:39 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-02-10 07:29:33 -0800
commit1d883931b4ae7704128f02fd566486fb02351196 (patch)
tree575124aeaa26ee6a0ccff0c55a3facda9dfe9944 /src/layout/workspace.rs
parentb65fad09d8f5253a28ee7ad9d293583641fc2c36 (diff)
downloadniri-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.rs13
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