diff lisp/wid-edit.el @ 41763:541b53a03028

(widget-button-click): Don't move point permanently: 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.
author Richard M. Stallman <rms@gnu.org>
date Sun, 02 Dec 2001 04:49:43 +0000
parents faa52db1ed51
children 6a1a8da1ad47
line wrap: on
line diff
--- a/lisp/wid-edit.el	Sun Dec 02 04:47:16 2001 +0000
+++ b/lisp/wid-edit.el	Sun Dec 02 04:49:43 2001 +0000
@@ -856,17 +856,21 @@
 
 (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 @@
 		    (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