Subject: bug#16647: Imprecisions with window-resizing cursors

From: [email-masked] (N. Jackson)
Date: Sun, 23 Feb 2014 22:01:50 -0400

At 06:53 -0400 on Sunday 2014-02-23, martin rudalics wrote:

>> Moving the mouse from the left, towards the right window, the mouse
>> cursor changes to the <=> immediately I cross the left edge of the
>> vertical line. The right window is selected immediately the mouse cursor
>> crosses the right edge of the the vertical line. _However_, the mouse
>> cursor stays as a <=> for a few pixels more movement to the right, and
>> it is at this time that, if it is clicked, it doesn't do anything, as
>> per Evgeni's original bug.
>
> Hmmm...  It's the most concrete description of the problem I read so far
> but it still doesn't help me explaining it :-(
>
> How does this behave when you do
>
> (set-frame-parameter nil 'bottom-divider-width 10)
>
> and move from an upper to the lower window and vice-versa?
>
> martin

Badly.

First impressions: Before splitting the window horizontally (with the
backwardsly-named split-window-vertically), I notice that I get the
changed mouse cursor indicating that I can resize the window whenever I
cross the mode line / bottom divider, but, in fact, I am only able to
use it (to increase the size of the minibuffer) when the minibuffer is
active. When the minibuffer is inactive, I can't resize it, yet the
mouse cursor still changes indicating that I can. Presumably this is a
bug.

Okay, continuing:

    emacs -Q
    M-: (set-frame-parameter nil 'bottom-divider-width 10) RET
    M-: (setq mouse-autoselect-window t)
    M-x split-window-vertically

Moving the mouse cursor upwards from the bottom window towards the top
window, as soon as I reach the bottom of the bottom divider the focus
changes to the upper window and the resizing mouse cursor appear. The
resizing cursor continues to be displayed until I cross the top of the
mode line into the top window. (Reasonable behaviour.)

Moving the mouse cursor downwards from the top window to the bottom
window, when I am about half way down the mode line the resizing cursor
appears and continues to be displayed until I cross the bottom of the
bottom divider into the bottom window, when the focus changes to the
lower window and the mouse cursor resumes its normal form. (Reasonable
behaviour.)

But:

    emacs -Q
    M-: (set-frame-parameter nil 'bottom-divider-width 10) RET
    M-: (setq mouse-autoselect-window t)
    Drag the window divider up a few pixels (but less than one line)

Moving the mouse cursor upwards is as before. 

Moving the mouse cursor downwards is as before except that when it
crosses the bottom of the bottom divider into the bottom window, the
focus changes to the bottom window, _but_ the resizing mouse cursor
continues to be displayed well in to the bottom window, but will not
resize the window if clicked on there -- indeed clicking on it, I can
select text in the bottom window while it is still displayed as a
resizing cursor!

At 19:29 -0400 on Sunday 2014-02-23, E. Sabof wrote:

> To me it looks like some code expects a full "character" movement, before it registers a change in location.

I get a similar impression. Noticing that split-window-below is
documented to take only an argument that is an integral number of lines
(it does something when passed a decimal fraction but I can't figure out
what it is -- I thought it might then treat the argument as pixels but
that's not it), I wondered if the code assumes that the split can only
be an integral number of lines below the top of the window above, or
something, and fails to take into account a fractional position?

Regards,
N.