From 1da99f4003c100180b4821afc4e32e35c86dfdb4 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Fri, 5 Jul 2024 20:12:56 +0400 Subject: Implement focus-follows-mouse max-scroll-amount --- src/layout/workspace.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/layout/workspace.rs') diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index c5ddfd21..625f4d5c 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -1391,6 +1391,37 @@ impl Workspace { } } + pub fn scroll_amount_to_activate(&self, window: &W::Id) -> f64 { + let column_idx = self + .columns + .iter() + .position(|col| col.contains(window)) + .unwrap(); + + if self.active_column_idx == column_idx { + return 0.; + } + + let current_x = self.view_pos(); + let new_view_offset = self.compute_new_view_offset_for_column( + current_x, + column_idx, + Some(self.active_column_idx), + ); + + // Consider the end of an ongoing animation because that's what compute to fit does too. + let final_x = if let Some(ViewOffsetAdjustment::Animation(anim)) = &self.view_offset_adj { + current_x - self.view_offset + anim.to() + } else { + current_x + }; + + let new_col_x = self.column_x(column_idx); + let from_view_offset = final_x - new_col_x; + + (from_view_offset - new_view_offset).abs() / self.working_area.size.w + } + pub fn activate_window(&mut self, window: &W::Id) { let column_idx = self .columns -- cgit