]> git.eshelyaron.com Git - emacs.git/commitdiff
(widget-button-click): Don't move point permanently:
authorRichard M. Stallman <rms@gnu.org>
Sun, 2 Dec 2001 04:49:43 +0000 (04:49 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sun, 2 Dec 2001 04:49:43 +0000 (04:49 +0000)
Avoid mouse-set-point--instead select the window,
then do save-excursion, then move point.
Specify the buffer for get-char-property.
Don't use `@' in interactive.

lisp/wid-edit.el

index a5cd1dba5231647af1a57597a0711cd6ef52812e..c9b962ef06ac04528329aafe98e60bc04f3c36d9 100644 (file)
@@ -856,17 +856,21 @@ Recommended as a parent keymap for modes using widgets.")
 
 (defun widget-button-click (event)
   "Invoke the button that the mouse is pointing at."
-  (interactive "@e")
+  (interactive "e")
   (if (widget-event-point event)
       (let* ((pos (widget-event-point event))
-            (button (get-char-property pos 'button)))
+            (start (event-start event))
+            (button (get-char-property 
+                     pos 'button (and (windowp (posn-window start))
+                                      (window-buffer (posn-window start))))))
        (if button
            ;; Mouse click on a widget button.  Do the following
            ;; in a save-excursion so that the click on the button
            ;; doesn't change point.
            (save-selected-window
+             (select-window (posn-window (event-start event)))
              (save-excursion
-               (mouse-set-point event)
+               (goto-char (posn-point (event-start event)))
                (let* ((overlay (widget-get button :button-overlay))
                       (face (overlay-get overlay 'face))
                       (mouse-face (overlay-get overlay 'mouse-face)))
@@ -907,10 +911,11 @@ Recommended as a parent keymap for modes using widgets.")
                    (overlay-put overlay 'face face)
                    (overlay-put overlay 'mouse-face mouse-face))))
 
-               (unless (pos-visible-in-window-p (widget-event-point event))
-                 (mouse-set-point event)
-                 (beginning-of-line)
-                 (recenter)))
+             (unless (pos-visible-in-window-p (widget-event-point event))
+               (mouse-set-point event)
+               (beginning-of-line)
+               (recenter))
+             )
 
            (let ((up t) command)
              ;; Mouse click not on a widget button.  Find the global