mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-19 20:40:41 -07:00
(widget-button-click): Fix last change.
This commit is contained in:
parent
bdadfce345
commit
eaaf76b67d
1 changed files with 25 additions and 15 deletions
|
|
@ -851,16 +851,23 @@ Recommended as a parent keymap for modes using widgets.")
|
|||
"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 @@ Recommended as a parent keymap for modes using widgets.")
|
|||
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 @@ Recommended as a parent keymap for modes using widgets.")
|
|||
(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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue