]> git.eshelyaron.com Git - emacs.git/commitdiff
Correct generation of touchscreen-pinch events
authorPo Lu <luangruo@yahoo.com>
Fri, 17 Nov 2023 03:16:23 +0000 (11:16 +0800)
committerPo Lu <luangruo@yahoo.com>
Fri, 17 Nov 2023 03:16:23 +0000 (11:16 +0800)
* lisp/touch-screen.el (touch-screen-pinch): Check that posn-x-y
is available before scrolling to it.
(touch-screen-handle-aux-point-update): Don't provide posns for
windows besides the window where the touch sequence started in
touchscreen-pinch events.

lisp/touch-screen.el

index cc6f30bccbe5fb4f2a5b20e57ad32b263eac368e..3e1a994402d24e5ce569b11622920f3fc07332f1 100644 (file)
@@ -925,7 +925,8 @@ text scale by the ratio therein."
         ;; position.
         (if (and (not (eq current-scale
                           text-scale-mode-amount))
-                 (posn-point posn))
+                 (posn-point posn)
+                 (cdr (posn-x-y posn)))
             (touch-screen-scroll-point-to-y (posn-point posn)
                                             (cdr (posn-x-y posn)))
           ;; Rather than scroll POSN's point to its old row, scroll the
@@ -1224,11 +1225,22 @@ last such event."
             (throw 'input-event (list 'touchscreen-pinch
                                       (if (or (<= (car centrum) 0)
                                               (<= (cdr centrum) 0))
-                                          (list window centrum nil nil nil
-                                                nil nil nil)
-                                        (posn-at-x-y (car centrum)
-                                                     (cdr centrum)
-                                                     window))
+                                          (list window nil centrum nil nil
+                                                nil nil nil nil nil)
+                                        (let ((posn (posn-at-x-y (car centrum)
+                                                                 (cdr centrum)
+                                                                 window)))
+                                          (if (eq (posn-window posn)
+                                                  window)
+                                              posn
+                                            ;; Return a placeholder
+                                            ;; outside the window if
+                                            ;; the centrum has moved
+                                            ;; beyond the confines of
+                                            ;; the window where the
+                                            ;; gesture commenced.
+                                            (list window nil centrum nil nil
+                                                  nil nil nil nil nil))))
                                       ratio
                                       (- (car centrum)
                                          (car initial-centrum))