From: Richard M. Stallman Date: Sun, 1 Nov 1998 18:17:40 +0000 (+0000) Subject: (mouse-drag-region): Fake up a mouse-motion event X-Git-Tag: emacs-20.4~1338 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2e3329a5371dfd2ca761a438f7b228162d42f319;p=emacs.git (mouse-drag-region): Fake up a mouse-motion event if we did not get one for the final move. --- diff --git a/lisp/mouse.el b/lisp/mouse.el index be760126499..b0044a4a991 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -585,8 +585,27 @@ remains active. Otherwise, it remains until the next input event." (setq end-of-range (overlay-start mouse-drag-overlay))) ((>= mouse-row bottom) (mouse-scroll-subr start-window (1+ (- mouse-row bottom)) - mouse-drag-overlay start-point) +a mouse-drag-overlay start-point) (setq end-of-range (overlay-end mouse-drag-overlay)))))))))) + ;; In case we did not get a mouse-motion event + ;; for the final move of the mouse before a drag event + ;; pretend that we did get one. + (when (and (memq 'drag (event-modifiers (car-safe event))) + (setq end (event-end event) + end-point (posn-point end)) + (eq (posn-window end) start-window) + (integer-or-marker-p end-point)) + + ;; Go to START-POINT first, so that when we move to END-POINT, + ;; if it's in the middle of intangible text, + ;; point jumps in the direction away from START-POINT. + (goto-char start-point) + (goto-char end-point) + (if (zerop (% click-count 3)) + (setq end-of-range (point))) + (let ((range (mouse-start-end start-point (point) click-count))) + (move-overlay mouse-drag-overlay (car range) (nth 1 range)))) + (if (consp event) (let ((fun (key-binding (vector (car event))))) ;; Run the binding of the terminating up-event, if possible.