diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-04-24 21:24:39 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-04-25 02:00:18 -0700 |
| commit | 929eaf0d694a9f0e8aa9b436004f0d054c9e2919 (patch) | |
| tree | ba9d951fc42d70f5d5b2b9a05aa8ead4f4c5dafb /src/input/mod.rs | |
| parent | ce3103949fe07bb656970da30c87accde83852fa (diff) | |
| download | niri-929eaf0d694a9f0e8aa9b436004f0d054c9e2919.tar.gz niri-929eaf0d694a9f0e8aa9b436004f0d054c9e2919.tar.bz2 niri-929eaf0d694a9f0e8aa9b436004f0d054c9e2919.zip | |
Pass target workspace to view offset grab
Diffstat (limited to 'src/input/mod.rs')
| -rw-r--r-- | src/input/mod.rs | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/input/mod.rs b/src/input/mod.rs index d9f610be..94914afc 100644 --- a/src/input/mod.rs +++ b/src/input/mod.rs @@ -2238,7 +2238,14 @@ impl State { if button == Some(MouseButton::Middle) && !pointer.is_grabbed() { let mod_down = modifiers_from_state(mods).contains(mod_key.to_modifiers()); if mod_down { - if let Some(output) = self.niri.output_under_cursor() { + let output_ws = self.niri.output_under_cursor().and_then(|output| { + let mon = self.niri.layout.monitor_for_output(&output)?; + Some((output, mon.active_workspace_ref())) + }); + + if let Some((output, ws)) = output_ws { + let ws_id = ws.id(); + self.niri.layout.focus_output(&output); let location = pointer.current_location(); @@ -2247,7 +2254,7 @@ impl State { button: button_code, location, }; - let grab = SpatialMovementGrab::new(start_data, output); + let grab = SpatialMovementGrab::new(start_data, output, ws_id); pointer.set_grab(self, grab, serial, Focus::Clear); self.niri .cursor_manager @@ -2828,7 +2835,17 @@ impl State { if let Some(output) = self.niri.output_under_cursor() { if cx.abs() > cy.abs() { - self.niri.layout.view_offset_gesture_begin(&output, true); + let output_ws = self.niri.output_under_cursor().and_then(|output| { + let mon = self.niri.layout.monitor_for_output(&output)?; + Some((output, mon.active_workspace_ref())) + }); + + if let Some((output, ws)) = output_ws { + let ws_idx = self.niri.layout.find_workspace_by_id(ws.id()).unwrap().0; + self.niri + .layout + .view_offset_gesture_begin(&output, Some(ws_idx), true); + } } else { self.niri .layout |
