]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/mouse.el (mouse-set-region): Handle spurious drag events.
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 27 May 2014 05:01:49 +0000 (01:01 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 27 May 2014 05:01:49 +0000 (01:01 -0400)
(mouse-drag-track): Annotate `mouse-drag-start' so we know we moved.

Fixes: debbugs:17562
lisp/ChangeLog
lisp/mouse.el

index 594feb08980666f8a20f3f786ec7a9cc8b39add8..080e11ad01fd1035cd3fe8765d14bf4349c8ba86 100644 (file)
@@ -1,3 +1,8 @@
+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.
@@ -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  <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.
index 15f89291af91c586ffbd0c7ed4dfe2bb327a7177..d1ab6c24565ce6e6aad9ca0b1ecdc52b2c790c89 100644 (file)
@@ -550,13 +550,20 @@ command alters the kill ring or not."
        (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 @@ The region will be defined with mark and point."
          (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)