Created attachment 203676 [details] 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.
Thank you for the analysis and patch Bojan CC Philip and Jordan who added virtual scrolling support a while back :)