emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 6b0e23412d: Improve momentum pixel scrolling on a non-selected wi


From: Po Lu
Subject: master 6b0e23412d: Improve momentum pixel scrolling on a non-selected window
Date: Mon, 21 Feb 2022 22:35:50 -0500 (EST)

branch: master
commit 6b0e23412d367a3b90db01de9456431158525938
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Improve momentum pixel scrolling on a non-selected window
    
    * lisp/pixel-scroll.el (pixel-scroll-kinetic-state): New
    argument `window'.
    (pixel-scroll-start-momentum): Don't select the window under
    the event when calculating velocity or redisplaying.
---
 lisp/pixel-scroll.el | 102 ++++++++++++++++++++++++++-------------------------
 1 file changed, 52 insertions(+), 50 deletions(-)

diff --git a/lisp/pixel-scroll.el b/lisp/pixel-scroll.el
index 54724ca328..463e106c7a 100644
--- a/lisp/pixel-scroll.el
+++ b/lisp/pixel-scroll.el
@@ -699,11 +699,12 @@ wheel."
                      (message (error-message-string '(end-of-buffer))))))))))
       (mwheel-scroll event nil))))
 
-(defun pixel-scroll-kinetic-state ()
-  "Return the kinetic scroll state of the current window.
+(defun pixel-scroll-kinetic-state (&optional window)
+  "Return the kinetic scroll state of WINDOW.
+If WINDOW is nil, return the state of the current window.
 It is a vector of the form [ VELOCITY TIME SIGN ]."
-  (or (window-parameter nil 'kinetic-state)
-      (set-window-parameter nil 'kinetic-state
+  (or (window-parameter window 'kinetic-state)
+      (set-window-parameter window 'kinetic-state
                             (vector (make-ring 30) nil nil))))
 
 (defun pixel-scroll-accumulate-velocity (delta)
@@ -737,53 +738,54 @@ It is a vector of the form [ VELOCITY TIME SIGN ]."
   (when pixel-scroll-precision-use-momentum
     (let ((window (mwheel-event-window event))
           (state nil))
-      (with-selected-window window
-        (setq state (pixel-scroll-kinetic-state))
-        (when (and (aref state 1)
-                   (listp (aref state 0)))
-          (condition-case nil
-              (while-no-input
-                (unwind-protect (progn
-                                  (aset state 0 
(pixel-scroll-calculate-velocity state))
-                                  (when (> (abs (aref state 0))
-                                           
pixel-scroll-precision-momentum-min-velocity)
-                                    (let* ((velocity (aref state 0))
-                                           (original-velocity velocity)
-                                           (time-spent 0))
-                                      (if (> velocity 0)
-                                          (while (and (> velocity 0)
-                                                      (<= time-spent
-                                                          
pixel-scroll-precision-momentum-seconds))
-                                            (when (> (round velocity) 0)
-                                              
(pixel-scroll-precision-scroll-up (round velocity)))
-                                            (setq velocity (- velocity
-                                                              (/ 
original-velocity
-                                                                 (/ 
pixel-scroll-precision-momentum-seconds
-                                                                    
pixel-scroll-precision-momentum-tick))))
-                                            (redisplay t)
-                                            (sit-for 
pixel-scroll-precision-momentum-tick)
-                                            (setq time-spent (+ time-spent
-                                                                
pixel-scroll-precision-momentum-tick))))
-                                      (while (and (< velocity 0)
-                                                  (<= time-spent
-                                                      
pixel-scroll-precision-momentum-seconds))
-                                        (when (> (round (abs velocity)) 0)
+      (setq state (pixel-scroll-kinetic-state window))
+      (when (and (aref state 1)
+                 (listp (aref state 0)))
+        (condition-case nil
+            (while-no-input
+              (unwind-protect (progn
+                                (aset state 0 (pixel-scroll-calculate-velocity 
state))
+                                (when (> (abs (aref state 0))
+                                         
pixel-scroll-precision-momentum-min-velocity)
+                                  (let* ((velocity (aref state 0))
+                                         (original-velocity velocity)
+                                         (time-spent 0))
+                                    (if (> velocity 0)
+                                        (while (and (> velocity 0)
+                                                    (<= time-spent
+                                                        
pixel-scroll-precision-momentum-seconds))
+                                          (when (> (round velocity) 0)
+                                            (with-selected-window window
+                                              
(pixel-scroll-precision-scroll-up (round velocity))))
+                                          (setq velocity (- velocity
+                                                            (/ 
original-velocity
+                                                               (/ 
pixel-scroll-precision-momentum-seconds
+                                                                  
pixel-scroll-precision-momentum-tick))))
+                                          (redisplay t)
+                                          (sit-for 
pixel-scroll-precision-momentum-tick)
+                                          (setq time-spent (+ time-spent
+                                                              
pixel-scroll-precision-momentum-tick))))
+                                    (while (and (< velocity 0)
+                                                (<= time-spent
+                                                    
pixel-scroll-precision-momentum-seconds))
+                                      (when (> (round (abs velocity)) 0)
+                                        (with-selected-window window
                                           (pixel-scroll-precision-scroll-down 
(round
-                                                                               
(abs velocity))))
-                                        (setq velocity (+ velocity
-                                                          (/ (abs 
original-velocity)
-                                                             (/ 
pixel-scroll-precision-momentum-seconds
-                                                                
pixel-scroll-precision-momentum-tick))))
-                                        (redisplay t)
-                                        (sit-for 
pixel-scroll-precision-momentum-tick)
-                                        (setq time-spent (+ time-spent
-                                                            
pixel-scroll-precision-momentum-tick))))))
-                  (aset state 0 (make-ring 30))
-                  (aset state 1 nil)))
-            (beginning-of-buffer
-             (message (error-message-string '(beginning-of-buffer))))
-            (end-of-buffer
-             (message (error-message-string '(end-of-buffer))))))))))
+                                                                               
(abs velocity)))))
+                                      (setq velocity (+ velocity
+                                                        (/ (abs 
original-velocity)
+                                                           (/ 
pixel-scroll-precision-momentum-seconds
+                                                              
pixel-scroll-precision-momentum-tick))))
+                                      (redisplay t)
+                                      (sit-for 
pixel-scroll-precision-momentum-tick)
+                                      (setq time-spent (+ time-spent
+                                                          
pixel-scroll-precision-momentum-tick))))))
+                (aset state 0 (make-ring 30))
+                (aset state 1 nil)))
+          (beginning-of-buffer
+           (message (error-message-string '(beginning-of-buffer))))
+          (end-of-buffer
+           (message (error-message-string '(end-of-buffer)))))))))
 
 (defun pixel-scroll-interpolate-down ()
   "Interpolate a scroll downwards by one page."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]