[Bug 237287] [patch] moused(8) ignores button release events in virtual scroll mode

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Sun Apr 14 20:57:53 UTC 2019


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=237287

            Bug ID: 237287
           Summary: [patch] moused(8) ignores button release events in
                    virtual scroll mode
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: bin
          Assignee: bugs at FreeBSD.org
          Reporter: bojan_petrovic at fastmail.fm

Created attachment 203676
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=203676&action=edit
moused.c.diff

Sometimes when I double-click a word in an X terminal to select it and then
immediately click the middle button to paste it, the terminal is left in drag
selection mode as if the left button was not released on the second click.

This behavior can be reproduced by the following sequence when running "moused"
with "-V" option:

1. press and hold left button
2. press and hold middle button
3. release left button
4. release middle button

The X terminal will be in drag selection mode.

The debug output (grepped for "moused: button.*count") for the sequence of
events above when I run moused with virtual scrolling OFF is:

moused: button 1  count 1
moused: button 2  count 1
moused: button 1  count 0
moused: button 2  count 0

The debug output with virtual scrolling ON:

moused: button 1  count 1
moused: button 2  count 1
moused: button 2  count 1
moused: button 2  count 0

In virtual scrolling case the button 1 count never drops to 0.

In current code, the SCROLL_PREPARE mode can be entered when multiple buttons
are held pressed, and then all of them released except for the middle button:

  if (action0.button == MOUSE_BUTTON2DOWN)

In this mode button events are not emmited:

  /* Defer clicks until we aren't VirtualScroll'ing. */
  if (scroll_state == SCROLL_NOTSCROLLING)
      r_click(&action2);


Because of this, the left button release is not registered.

I've attached a patch which fixes this issue for me. It allows the virtual
scroll mode to be entered only if no other button was held before pressing
middle button.

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list