Subject: Re: bug#12419: Mouse click changes layout

From: Daniel Pfeiffer <[email-masked]>
Date: Sun, 23 Sep 2012 23:56:06 +0200

Hi Martin,

thanks for going into so much detail!

la 09/23/2012 11:21 AM martin rudalics skribis:
> >> Can you try the attached patch?
> >
> > I now did, but in neither split direction anything seems to have changed
> > from what I described before.
>
> Let's look at your first scenario with emacs -Q: Do
>
> C-x 2
>
> C-x o
>
> and in the lower window insert the form
>
> (message (make-string 1000 ?a))
>
> so the buffer *scratch* now contains this text:
>
>
> ;; This buffer is for notes you don't want to save, and for Lisp evaluation.
> ;; If you want to create a file, visit that file with C-x C-f,
> ;; then enter the text in that file's own buffer.
>
> (message (make-string 1000 ?a))
>
>
> Now evaluate the form inserted - the minibuffer window resizes and the
> divider line between the upper and lower normal window moves up. Still
> in the lower window press the left mouse button down (but don't release
> it) with the mouse pointer on the "1" of the "1000".  Now release the
> left mouse button and the region starting with the word "notes" up to
> the space before "1000" gets higlighted.
>
> This is the behavior I observe with an unpatched Emacs trunk. With the
> patch, the divider line between the upper and lower window does not move
> and there's no region highlighting when I release the mouse button.

Well, you have me dumbfounded here.  To be honest I actually tried your patch 
in my configured Emacs.  Since it didn't seem to catch on, I even opened the 
file, and reevaluated the defun you patched. Now however I can no longer 
reproduce it even there :-(  Shame on me, I'm clueless...

However my first informatics lesson the professor told us: the most common bug 
is being off by one.  That is alas still the case with your patch: After C-x 2 
the lower window is one row higher than the upper one.  After our little 
experiment, it's the other way round, with this result:  When letting go of 
the mouse, I still marked to the line above, which is now in the position of 
my mouse-down event.  Sounds like an integer division rounding problem, though 
I don't see such a thing in your patch.  If both windows together have an even 
number of rows (by resizing the frame) it's fine.

If however I split either of the two windows again (even the top one, which is 
out of reach of the resizing echo area) the disturbing new before-your-patch 
behaviour comes back.

> The second scenario you sketched is
>
> > Independently of resizing, something similar happens for sideways
> > scrolling: Split *scratch* vertically, click on the v of visit, nothing
> > happens (that's where it dffers).  But then move the mouse 1 char right,
> > this triggers a sideways scroll.  The mouse is now over the e of file.
> > When letting go, it marks "visit that fil" but worse, it scrolls yet
> > again by the same amount, so that the mouse is now at the end of the
> > line, far from the text it marked.
>
> I suppose what you mean here with emacs -Q is:
>
> C-x 3
>
> Now if I click in any of the two windows on the "v" of the word "visit",
> I get the same sideways scroll behavior with my Emacs 23.3, Emacs 24.1
> and the current trunk regardless of how long I keep the button pressed.

The point is moving the mouse over to the i, which causes the 1st scroll, and 
then letting go, which causes the scrolled region to be marked, plus it causes 
a 2nd scroll by the same amount.  So the point is now far from the highlighted 
part.  I guess this comes from a different code location.  Only the user 
experience feels to me like both cases should be consistent with one another.

coralament / best Grötens / liebe Grüße / best regards / elkorajn salutojn
Daniel Pfeiffer

-- 
lerne / learn / apprends / lär dig / ucz się    Esperanto:
                     http://lernu.net  /  http://ikurso.net