aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/handlers/xdg_shell.rs2
-rw-r--r--src/input/mod.rs8
-rw-r--r--src/input/move_grab.rs1
-rw-r--r--src/input/resize_grab.rs1
-rw-r--r--src/input/spatial_movement_grab.rs1
-rw-r--r--src/niri.rs6
6 files changed, 6 insertions, 13 deletions
diff --git a/src/handlers/xdg_shell.rs b/src/handlers/xdg_shell.rs
index ac078f86..0ac82d79 100644
--- a/src/handlers/xdg_shell.rs
+++ b/src/handlers/xdg_shell.rs
@@ -148,7 +148,6 @@ impl XdgShellHandler for State {
PointerOrTouchStartData::Pointer(start_data) => {
let grab = MoveGrab::new(start_data, window);
pointer.set_grab(self, grab, serial, Focus::Clear);
- self.niri.pointer_grab_ongoing = true;
}
PointerOrTouchStartData::Touch(start_data) => {
let touch = self.niri.seat.get_touch().unwrap();
@@ -246,7 +245,6 @@ impl XdgShellHandler for State {
PointerOrTouchStartData::Pointer(start_data) => {
let grab = ResizeGrab::new(start_data, window);
pointer.set_grab(self, grab, serial, Focus::Clear);
- self.niri.pointer_grab_ongoing = true;
}
PointerOrTouchStartData::Touch(start_data) => {
let touch = self.niri.seat.get_touch().unwrap();
diff --git a/src/input/mod.rs b/src/input/mod.rs
index 888631e2..5800b8a4 100644
--- a/src/input/mod.rs
+++ b/src/input/mod.rs
@@ -1320,8 +1320,13 @@ impl State {
self.niri.tablet_cursor_location = None;
// Check if we have an active pointer constraint.
+ //
+ // FIXME: ideally this should use the pointer focus with up-to-date global location.
let mut pointer_confined = None;
if let Some(under) = &self.niri.pointer_contents.surface {
+ // No need to check if the pointer focus surface matches, because here we're checking
+ // for an already-active constraint, and the constraint is deactivated when the focused
+ // surface changes.
let pos_within_surface = pos - under.1;
let mut pointer_locked = false;
@@ -1583,7 +1588,6 @@ impl State {
};
let grab = MoveGrab::new(start_data, window.clone());
pointer.set_grab(self, grab, serial, Focus::Clear);
- self.niri.pointer_grab_ongoing = true;
self.niri
.cursor_manager
.set_cursor_image(CursorImageStatus::Named(CursorIcon::Move));
@@ -1649,7 +1653,6 @@ impl State {
};
let grab = ResizeGrab::new(start_data, window.clone());
pointer.set_grab(self, grab, serial, Focus::Clear);
- self.niri.pointer_grab_ongoing = true;
self.niri.cursor_manager.set_cursor_image(
CursorImageStatus::Named(edges.cursor_icon()),
);
@@ -1685,7 +1688,6 @@ impl State {
};
let grab = SpatialMovementGrab::new(start_data, output);
pointer.set_grab(self, grab, serial, Focus::Clear);
- self.niri.pointer_grab_ongoing = true;
self.niri
.cursor_manager
.set_cursor_image(CursorImageStatus::Named(CursorIcon::AllScroll));
diff --git a/src/input/move_grab.rs b/src/input/move_grab.rs
index 96230f33..a11a09cf 100644
--- a/src/input/move_grab.rs
+++ b/src/input/move_grab.rs
@@ -34,7 +34,6 @@ impl MoveGrab {
state.niri.layout.interactive_move_end(&self.window);
// FIXME: only redraw the window output.
state.niri.queue_redraw_all();
- state.niri.pointer_grab_ongoing = false;
state
.niri
.cursor_manager
diff --git a/src/input/resize_grab.rs b/src/input/resize_grab.rs
index 535bae32..5b58c7b0 100644
--- a/src/input/resize_grab.rs
+++ b/src/input/resize_grab.rs
@@ -22,7 +22,6 @@ impl ResizeGrab {
fn on_ungrab(&mut self, state: &mut State) {
state.niri.layout.interactive_resize_end(&self.window);
- state.niri.pointer_grab_ongoing = false;
state
.niri
.cursor_manager
diff --git a/src/input/spatial_movement_grab.rs b/src/input/spatial_movement_grab.rs
index 5a0e6a8a..7e6d81d0 100644
--- a/src/input/spatial_movement_grab.rs
+++ b/src/input/spatial_movement_grab.rs
@@ -50,7 +50,6 @@ impl SpatialMovementGrab {
state.niri.queue_redraw(&output);
}
- state.niri.pointer_grab_ongoing = false;
state
.niri
.cursor_manager
diff --git a/src/niri.rs b/src/niri.rs
index c3f267c2..dae46938 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -282,8 +282,6 @@ pub struct Niri {
/// various tooltips from sticking around.
pub pointer_hidden: bool,
pub pointer_inactivity_timer: Option<RegistrationToken>,
- // FIXME: this should be able to be removed once PointerFocus takes grabs into account.
- pub pointer_grab_ongoing: bool,
pub tablet_cursor_location: Option<Point<f64, Logical>>,
pub gesture_swipe_3f_cumulative: Option<(f64, f64)>,
pub vertical_wheel_tracker: ScrollTracker,
@@ -1877,7 +1875,6 @@ impl Niri {
pointer_contents: PointContents::default(),
pointer_hidden: false,
pointer_inactivity_timer: None,
- pointer_grab_ongoing: false,
tablet_cursor_location: None,
gesture_swipe_3f_cumulative: None,
vertical_wheel_tracker: ScrollTracker::new(120),
@@ -4526,8 +4523,7 @@ impl Niri {
let Some((surface, surface_loc)) = &self.pointer_contents.surface else {
return;
};
-
- if self.pointer_grab_ongoing {
+ if Some(surface) != pointer.current_focus().as_ref() {
return;
}