From a066edab0b6b2d3a19959c5e5d1e1668c6bccc8c Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Tue, 22 Nov 2022 15:48:36 +0100 Subject: [PATCH] move: Fix window offset --- src/shell/layout/floating/grabs/moving.rs | 25 +++++++++++++---------- src/shell/workspace.rs | 1 - 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/shell/layout/floating/grabs/moving.rs b/src/shell/layout/floating/grabs/moving.rs index 4c12ae05..5b5ef2aa 100644 --- a/src/shell/layout/floating/grabs/moving.rs +++ b/src/shell/layout/floating/grabs/moving.rs @@ -33,7 +33,6 @@ pub struct MoveGrabState { window: CosmicMapped, initial_cursor_location: Point, initial_window_location: Point, - initial_output_location: Point, } impl MoveGrabState { @@ -47,8 +46,7 @@ impl MoveGrabState { { let cursor_at = seat.get_pointer().unwrap().current_location(); let delta = cursor_at - self.initial_cursor_location; - let location = - self.initial_output_location.to_f64() + self.initial_window_location.to_f64() + delta; + let location = self.initial_window_location.to_f64() + delta; let mut window_geo = self.window.geometry(); window_geo.loc += location.to_i32_round(); @@ -120,13 +118,11 @@ impl MoveSurfaceGrab { seat: &Seat, initial_cursor_location: Point, initial_window_location: Point, - initial_output_location: Point, ) -> MoveSurfaceGrab { let grab_state = MoveGrabState { window: window.clone(), initial_cursor_location, initial_window_location, - initial_output_location, }; *seat @@ -160,11 +156,9 @@ impl MoveSurfaceGrab { { if grab_state.window.alive() { let delta = handle.current_location() - grab_state.initial_cursor_location; - let window_location = (grab_state.initial_window_location.to_f64() - + grab_state.initial_output_location.to_f64() - - output.geometry().loc.to_f64() - + delta) - .to_i32_round(); + let window_location = (grab_state.initial_window_location.to_f64() + delta) + .to_i32_round() + - output.geometry().loc; let workspace_handle = state.common.shell.active_space(&output).handle; for (window, _) in grab_state.window.windows() { @@ -180,12 +174,21 @@ impl MoveSurfaceGrab { .toplevel_enter_output(&window, &output); } + let offset = state + .common + .shell + .active_space(&output) + .floating_layer + .space + .output_geometry(&output) + .unwrap() + .loc; state .common .shell .active_space_mut(&output) .floating_layer - .map_internal(grab_state.window, &output, Some(window_location)); + .map_internal(grab_state.window, &output, Some(window_location + offset)); } } diff --git a/src/shell/workspace.rs b/src/shell/workspace.rs index 95c0eba6..b8b610ca 100644 --- a/src/shell/workspace.rs +++ b/src/shell/workspace.rs @@ -354,7 +354,6 @@ impl Workspace { seat, pos, initial_window_location, - output.geometry().loc, )) } else { None // TODO