diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-02-18 18:56:09 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-02-18 19:06:40 +0300 |
| commit | dca187de37164df2584f7388cd0bb6429337a580 (patch) | |
| tree | 2599407cbd167ce4e643f4ec3cf6ce9c0872ed67 /src/layout/scrolling.rs | |
| parent | fe660a253b445163ff243d7eab842d40937a6bd1 (diff) | |
| download | niri-dca187de37164df2584f7388cd0bb6429337a580.tar.gz niri-dca187de37164df2584f7388cd0bb6429337a580.tar.bz2 niri-dca187de37164df2584f7388cd0bb6429337a580.zip | |
Don't snap after DnD scroll if view position didn't change
Otherwise, any DnD breaks temporarily centered columns.
Diffstat (limited to 'src/layout/scrolling.rs')
| -rw-r--r-- | src/layout/scrolling.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/layout/scrolling.rs b/src/layout/scrolling.rs index f1819a08..8a86f7bf 100644 --- a/src/layout/scrolling.rs +++ b/src/layout/scrolling.rs @@ -3232,6 +3232,26 @@ impl<W: LayoutElement> ScrollingSpace<W> { true } + pub fn dnd_scroll_gesture_end(&mut self) { + let ViewOffset::Gesture(gesture) = &mut self.view_offset else { + return; + }; + + if gesture.dnd_last_event_time.is_some() && gesture.tracker.pos() == 0. { + // DnD didn't scroll anything, so preserve the current view position (rather than + // snapping the window). + self.view_offset = ViewOffset::Static(gesture.delta_from_tracker); + + if !self.columns.is_empty() { + // Just in case, make sure the active window remains on screen. + self.animate_view_offset_to_column(None, self.active_column_idx, None); + } + return; + } + + self.view_offset_gesture_end(false, None); + } + pub fn interactive_resize_begin(&mut self, window: W::Id, edges: ResizeEdge) -> bool { if self.interactive_resize.is_some() { return false; |
