Mercurial > emacs
changeset 35858:783c81a841f6
(widget-button-click): Fix last change.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Fri, 02 Feb 2001 14:55:04 +0000 |
parents | 84bccf78a45f |
children | c9edddbb8dbf |
files | lisp/wid-edit.el |
diffstat | 1 files changed, 25 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/wid-edit.el Fri Feb 02 13:57:46 2001 +0000 +++ b/lisp/wid-edit.el Fri Feb 02 14:55:04 2001 +0000 @@ -851,16 +851,23 @@ "Invoke the button that the mouse is pointing at." (interactive "@e") (if (widget-event-point event) - (progn - (mouse-set-point event) - (let* ((pos (widget-event-point event)) - (button (get-char-property pos 'button))) - (if button + (let* ((pos (widget-event-point event)) + (button (get-char-property pos 'button))) + (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. + (progn (save-excursion + (mouse-set-point event) (let* ((overlay (widget-get button :button-overlay)) (face (overlay-get overlay 'face)) (mouse-face (overlay-get overlay 'mouse-face))) (unwind-protect + ;; Read events, including mouse-movement events + ;; until we receive a release event. Highlight/ + ;; unhighlight the button the mouse was initially + ;; on when we move over it. (let ((track-mouse t)) (save-excursion (when face ; avoid changing around image @@ -884,18 +891,25 @@ widget-button-pressed-face)) (overlay-put overlay 'face face) (overlay-put overlay 'mouse-face mouse-face)))) + + ;; When mouse is released over the button, run + ;; its action function. (when (and pos (eq (get-char-property pos 'button) button)) (widget-apply-action button event)))) (overlay-put overlay 'face face) (overlay-put overlay 'mouse-face mouse-face)))) - ;; Not on a button. Find the global command to run, and - ;; check whether it is bound to an up event. Avoid a - ;; `save-excursion' here, since a global command may - ;; to change point, e.g. like `mouse-drag-drag' does. - (let ((up t) - command) + (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 + ;; command to run, and check whether it is bound to an + ;; up event. + (mouse-set-point event) (if (memq (event-basic-type event) '(mouse-1 down-mouse-1)) (cond ((setq command ;down event (lookup-key widget-global-map [down-mouse-1])) @@ -913,10 +927,6 @@ (setq event (read-event)))) (when command (call-interactively command))))) - (unless (pos-visible-in-window-p (widget-event-point event)) - (mouse-set-point event) - (beginning-of-line) - (recenter))) (message "You clicked somewhere weird."))) (defun widget-button-press (pos &optional event)