Re: [hackers] [st][PATCH] mouse drag: don't stop sending drag events prematurely

From: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
Date: Sun, 24 Nov 2019 11:12:11 +0100

On Sat, Nov 23, 2019 at 08:29:39PM +0100, Harm te Hennepe wrote:
> ST stopped sending mouse drag events after any ButtonRelease event was
> received. For example if you were dragging and then scrolled the mouse,
> the dragging events stopped.
>
> Fixed this by locking the dragging button to the first button pressed.
> ST will keep sending drag events for that button until that button is
> released.
> ---
> x.c | 18 ++++++++++--------
> 1 file changed, 10 insertions(+), 8 deletions(-)
>
> diff --git a/x.c b/x.c
> index bc3ad5a..b53ede6 100644
> --- a/x.c
> +++ b/x.c
> _AT_@ -246,8 +246,6 @@ static char *opt_line = NULL;
> static char *opt_name = NULL;
> static char *opt_title = NULL;
>
> -static int oldbutton = 3; /* button event on startup: 3 = release */
> -
> void
> clipcopy(const Arg *dummy)
> {
> _AT_@ -362,6 +360,7 @@ mousereport(XEvent *e)
> button = e->xbutton.button, state = e->xbutton.state;
> char buf[40];
> static int ox, oy;
> + static int dragbutton = -1; /* -1 = off */
>
> /* from urxvt */
> if (e->xbutton.type == MotionNotify) {
> _AT_@ -370,10 +369,10 @@ mousereport(XEvent *e)
> if (!IS_SET(MODE_MOUSEMOTION) && !IS_SET(MODE_MOUSEMANY))
> return;
> /* MOUSE_MOTION: no reporting if no button is pressed */
> - if (IS_SET(MODE_MOUSEMOTION) && oldbutton == 3)
> + if (IS_SET(MODE_MOUSEMOTION) && dragbutton == -1)
> return;
>
> - button = oldbutton + 32;
> + button = dragbutton + 32;
> ox = x;
> oy = y;
> } else {
> _AT_@ -385,11 +384,14 @@ mousereport(XEvent *e)
> button += 64 - 3;
> }
> if (e->xbutton.type == ButtonPress) {
> - oldbutton = button;
> - ox = x;
> - oy = y;
> + if (dragbutton == -1) {
> + dragbutton = button;
> + ox = x;
> + oy = y;
> + }
> } else if (e->xbutton.type == ButtonRelease) {
> - oldbutton = 3;
> + if (button == dragbutton)
> + dragbutton = -1;
> /* MODE_MOUSEX10: no button release reporting */
> if (IS_SET(MODE_MOUSEX10))
> return;
> --
> 2.20.1
>
>

Hi,

I cannot reproduce this issue while selecting text and scrolling or when
selecting text and pressing and releasing the right-mouse button for example.

Also I think the patch looks good by itself, but maybe would then break some
other use-case?

Can you try this against the git version without any patches (and maybe give more
information about the used programs)?

-- 
Kind regards,
Hiltjo
Received on Sun Nov 24 2019 - 11:12:11 CET

This archive was generated by hypermail 2.3.0 : Sun Nov 24 2019 - 11:12:31 CET