Subject: bug#4023: mwheel.el uses (point) instead of point-before-scroll

From: gabriele balducci <[email-masked]>
Date: Mon, 03 Aug 2009 18:26:51 +0200

Hello,

apologies if I am wrong.

Just upgraded emacs to 23.1 and noted the following issue, related
(apparently) to mwheel.el.

Here is how to (hopefully) reproduce the problem.

In an emacs window (under X):

=> set the point with mouse-1
=> select a region with mouse-3 some lines below
=> now scroll down with the mouse wheel so that the bottom of the
   selected region scrolls `out' of the upper edge of the emacs window
   (the highlighted region must disappear)
=> extend the region by mouse-3 again
=> paste the region with mouse-2 somewhere (e.g. in a clean buffer)

    Result:
    only the text between the *visible* top of the window and the end of
    the region has been pasted. I.e. all works as if the beginning of
    the selected region had moved the first line of the visible portion
    of the buffer.

This contrasts with the behavior in emacs-22.3, where extending the
region while scrolling down with the wheel used to work as expected
(by me): the contents of the region started from the point set with
mouse-1 at the beginning.

The (correct) behavior in 23.1 is obtained if scrolling is performed
with the side bar, instead of the wheel (and also if the scroll with
the wheel does not make the bottom of the region fly out of the upper
window edge)

Actually, the following new lines have appeared in mwheel.el from 22.3
to 23.1:

         (opoint (with-current-buffer buffer
                   (when (eq (car-safe transient-mark-mode) 'only)
                     (point))))

and I seem to understand that this is the origin of the problem.

In fact, the following change:

diff -c ./emacs-23.1/lisp/mwheel.el.ORIG ./emacs-23.1/lisp/mwheel.el
*** ./emacs-23.1/lisp/mwheel.el.ORIG    Mon Aug  3 17:05:23 2009
--- ./emacs-23.1/lisp/mwheel.el Mon Aug  3 17:05:23 2009
***************
*** 195,201 ****
         (buffer (window-buffer curwin))
         (opoint (with-current-buffer buffer
                   (when (eq (car-safe transient-mark-mode) 'only)
!                    (point))))
           (mods
          (delq 'click (delq 'double (delq 'triple (event-modifiers event)))))
           (amt (assoc mods mouse-wheel-scroll-amount)))
--- 195,201 ----
         (buffer (window-buffer curwin))
         (opoint (with-current-buffer buffer
                   (when (eq (car-safe transient-mark-mode) 'only)
!                    point-before-scroll)))
           (mods
          (delq 'click (delq 'double (delq 'triple (event-modifiers event)))))
           (amt (assoc mods mouse-wheel-scroll-amount)))

fixes everything for me.

Do not know if this is the best solution (I am only an occasional lisp
programmer); I do not even know if the object of my report is actually
a problem or instead is something wanted (if so, I would be surprised).

Apologies for the length of the message and a BIG THANKS for emacs, of
course!

ciao
gabriele

-----

In GNU Emacs 23.1.1 (x86_64-unknown-linux-gnu, GTK+ Version 2.17.6)
 of 2009-08-03 on dschgrazlin1
Windowing system distributor `The XFree86 Project, Inc', version 11.0.40800000
configured using `configure  '--prefix=/usr''

Important settings:
  value of $LC_ALL: C
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: C
  value of $XMODIFIERS: nil
  locale-coding-system: nil
  default-enable-multibyte-characters: t

Major mode: Text

Minor modes in effect:
  show-paren-mode: t
  tooltip-mode: t
  tool-bar-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  global-auto-composition-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t