Mercurial > emacs
changeset 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 | 9ebf70e688cd |
children | 5120deb8797a |
files | lisp/wid-edit.el |
diffstat | 1 files changed, 12 insertions(+), 7 deletions(-) [+] |
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