[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r117162: * lisp/mouse.el (mouse-set-region): Handle
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] trunk r117162: * lisp/mouse.el (mouse-set-region): Handle spurious drag events. |
Date: |
Tue, 27 May 2014 05:01:55 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 117162
revision-id: address@hidden
parent: address@hidden
fixes bug: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17562
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Tue 2014-05-27 01:01:49 -0400
message:
* lisp/mouse.el (mouse-set-region): Handle spurious drag events.
(mouse-drag-track): Annotate `mouse-drag-start' so we know we moved.
modified:
lisp/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1432
lisp/mouse.el mouse.el-20091113204419-o5vbwnq5f7feedwu-123
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2014-05-26 02:28:09 +0000
+++ b/lisp/ChangeLog 2014-05-27 05:01:49 +0000
@@ -1,3 +1,8 @@
+2014-05-27 Stefan Monnier <address@hidden>
+
+ * 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 <address@hidden>
* cus-face.el (custom-face-attributes): Add :distant-foreground.
@@ -24,8 +29,8 @@
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.
@@ -88,8 +93,8 @@
2014-05-26 Dmitry Gutov <address@hidden>
- * 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.
=== modified file 'lisp/mouse.el'
--- a/lisp/mouse.el 2014-05-26 02:28:09 +0000
+++ b/lisp/mouse.el 2014-05-27 05:01:49 +0000
@@ -550,13 +550,20 @@
(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))))
@@ -820,22 +827,25 @@
(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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r117162: * lisp/mouse.el (mouse-set-region): Handle spurious drag events.,
Stefan Monnier <=