+2014-05-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mouse.el (mouse-set-region): Handle spurious drag events (bug#17562).
+ (mouse-drag-track): Annotate `mouse-drag-start' so we know we moved.
+
2014-05-26 Andreas Schwab <schwab@linux-m68k.org>
* cus-face.el (custom-face-attributes): Add :distant-foreground.
Todo file, make sure we're in the right mode and the buffer local
variables are set.
(todo-make-categories-list, todo-reset-nondiary-marker)
- (todo-reset-done-string, todo-reset-comment-string): After
- processing all Todo files, kill the buffers of those files that
+ (todo-reset-done-string, todo-reset-comment-string):
+ After processing all Todo files, kill the buffers of those files that
weren't being visited before the processing.
(todo-display-as-todo-file, todo-add-to-buffer-list)
(todo-visit-files-commands): Comment out.
2014-05-26 Dmitry Gutov <dgutov@yandex.ru>
- * emacs-lisp/package.el (package--download-one-archive): Use
- `write-region' instead of `save-buffer' to avoid running various
+ * emacs-lisp/package.el (package--download-one-archive):
+ Use `write-region' instead of `save-buffer' to avoid running various
hooks. (Bug#17155)
(describe-package-1): Same. Insert newline at the end of the
buffer if appropriate.
(end (posn-point (event-end click)))
(click-count (event-click-count click)))
(let ((drag-start (terminal-parameter nil 'mouse-drag-start)))
- ;; Drag events don't come with a click count, sadly, so we hack
- ;; our way around this problem by remembering the start-event in
- ;; `mouse-drag-start' and fetching the click-count from there.
(when drag-start
+ ;; Drag events don't come with a click count, sadly, so we hack
+ ;; our way around this problem by remembering the start-event in
+ ;; `mouse-drag-start' and fetching the click-count from there.
(when (and (<= click-count 1)
(equal beg (posn-point (event-start drag-start))))
(setq click-count (event-click-count drag-start)))
+ ;; Occasionally we get spurious drag events where the user hasn't
+ ;; dragged his mouse, but instead Emacs has dragged the text under the
+ ;; user's mouse. Try to recover those cases (bug#17562).
+ (when (and (equal (posn-x-y (event-start click))
+ (posn-x-y (event-end click)))
+ (not (eq (car drag-start) 'mouse-movement)))
+ (setq end beg))
(setf (terminal-parameter nil 'mouse-drag-start) nil)))
(when (and (integerp beg) (integerp end))
(let ((range (mouse-start-end beg end (1- click-count))))
(lambda (event) (interactive "e")
(let* ((end (event-end event))
(end-point (posn-point end)))
- (unless (eq end-point start-point)
+ (unless (eq end-point start-point)
;; As soon as the user moves, we can re-enable auto-hscroll.
- (setq auto-hscroll-mode auto-hscroll-mode-saved))
- (if (and (eq (posn-window end) start-window)
- (integer-or-marker-p end-point))
- (mouse--drag-set-mark-and-point start-point
- end-point click-count)
- (let ((mouse-row (cdr (cdr (mouse-position)))))
- (cond
- ((null mouse-row))
- ((< mouse-row top)
- (mouse-scroll-subr start-window (- mouse-row top)
- nil start-point))
- ((>= mouse-row bottom)
- (mouse-scroll-subr start-window (1+ (- mouse-row bottom))
- nil start-point))))))))
+ (setq auto-hscroll-mode auto-hscroll-mode-saved)
+ ;; And remember that we have moved, so mouse-set-region can know
+ ;; its event is really a drag event.
+ (setcar start-event 'mouse-movement))
+ (if (and (eq (posn-window end) start-window)
+ (integer-or-marker-p end-point))
+ (mouse--drag-set-mark-and-point start-point
+ end-point click-count)
+ (let ((mouse-row (cdr (cdr (mouse-position)))))
+ (cond
+ ((null mouse-row))
+ ((< mouse-row top)
+ (mouse-scroll-subr start-window (- mouse-row top)
+ nil start-point))
+ ((>= mouse-row bottom)
+ (mouse-scroll-subr start-window (1+ (- mouse-row bottom))
+ nil start-point))))))))
map)
t (lambda ()
(setq track-mouse nil)