oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git

Add scrolling layout animations

Commit
00a27e6f4de787a15e7b5b22ff11a5ec737c8b84
Parent
1ee9ed1
Author
tonybtw <tonybtw@tonybtw.com>
Date
2026-01-11 04:48:37

Diff

diff --git a/src/window_manager.rs b/src/window_manager.rs
index 26b9499..06b3f72 100644
--- a/src/window_manager.rs
+++ b/src/window_manager.rs
@@ -867,7 +867,9 @@ impl WindowManager {
 
         let tiled_count = tiled_windows.len();
         if tiled_count <= visible_count {
-            if let Some(m) = self.monitors.get_mut(monitor_index) {
+            if animate && monitor.scroll_offset != 0 {
+                self.scroll_animation.start(monitor.scroll_offset, 0, &self.animation_config);
+            } else if let Some(m) = self.monitors.get_mut(monitor_index) {
                 m.scroll_offset = 0;
             }
             return Ok(());
@@ -2313,7 +2315,7 @@ impl WindowManager {
         }
 
         if self.layout.name() == "scrolling" {
-            self.scroll_to_window(window, false)?;
+            self.scroll_to_window(window, true)?;
         }
 
         self.apply_layout()?;
@@ -4721,6 +4723,9 @@ impl WindowManager {
                 let visible = self.visible_windows_on_monitor(self.selected_monitor);
                 if let Some(&new_win) = visible.last() {
                     self.focus(Some(new_win))?;
+                    if self.layout.name() == "scrolling" {
+                        self.scroll_to_window(new_win, true)?;
+                    }
                 } else if let Some(monitor) = self.monitors.get_mut(self.selected_monitor) {
                     monitor.selected_client = None;
                 }