diff options
Diffstat (limited to 'src/layout/workspace.rs')
| -rw-r--r-- | src/layout/workspace.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index fa2c906a..8c8753c5 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -1609,6 +1609,34 @@ impl<W: LayoutElement> Workspace<W> { .view_offset_gesture_end(cancelled, is_touchpad) } + pub fn dnd_scroll_gesture_begin(&mut self) { + self.scrolling.dnd_scroll_gesture_begin(); + } + + pub fn dnd_scroll_gesture_scroll(&mut self, pos: Point<f64, Logical>) { + // Taken from GTK 4. + const SCROLL_EDGE_SIZE: f64 = 30.; + + // This working area intentionally does not include extra struts from Options. + let x = pos.x - self.working_area.loc.x; + let width = self.working_area.size.w; + let x = x.clamp(0., width); + + let delta = if x < SCROLL_EDGE_SIZE { + -(SCROLL_EDGE_SIZE - x) + } else if width - x < SCROLL_EDGE_SIZE { + SCROLL_EDGE_SIZE - (width - x) + } else { + 0. + }; + + self.scrolling.dnd_scroll_gesture_scroll(delta); + } + + pub fn dnd_scroll_gesture_update_time(&mut self) { + self.scrolling.dnd_scroll_gesture_scroll(0.); + } + pub fn interactive_resize_begin(&mut self, window: W::Id, edges: ResizeEdge) -> bool { if self.floating.has_window(&window) { self.floating.interactive_resize_begin(window, edges) |
