The "stuck" part sounds like the X/Y issue I mentioned in other email.
 I've saw it in the other button post code path if I set tablet pen to
relative mode.  In that path, some X acceleration logic causes some
negative values and does bad things.  See related comment in
wcmSendNonPadEvents() for relative mode in how it was fixed.

I can't quite explain why this patch would help though.

Chris

On Tue, Apr 5, 2011 at 3:00 PM, Jason Gerecke <killert...@gmail.com> wrote:
> The prior patch has gestures use button mapping like buttons et.al.,
> but for some reason this results in the cursor being "stuck" at the
> top left of the screen when:
>
> 1) A gesture is performed
> 2) The gesture uses a button with an associated action
> 3) The action presses a button but does not release it
>
> After much testing, I've found that this patch solves the issue and
> also works for non-gesture code.
>
> To be honest, I'm not sure why the old code didn't work but this does.
> I see only see one difference in execution (the old code executed for
> all 256 actions, '0' or not), but that change alone doesn't appear to
> fix the bug...
>
> Signed-off-by: Jason Gerecke <killert...@gmail.com>
> ---
>  src/wcmCommon.c |   61 ++++++++++++++++++++----------------------------------
>  1 files changed, 23 insertions(+), 38 deletions(-)
>
> diff --git a/src/wcmCommon.c b/src/wcmCommon.c
> index 0d3e8d8..ff70d64 100644
> --- a/src/wcmCommon.c
> +++ b/src/wcmCommon.c
> @@ -206,7 +206,7 @@ void sendAction(InputInfoPtr pInfo, int press,
>        int i;
>
>        /* Actions only trigger on press, not release */
> -       for (i = 0; press && i < nkeys; i++)
> +       for (i = 0; i < nkeys; i++)
>        {
>                unsigned int action = keys[i];
>
> @@ -219,6 +219,17 @@ void sendAction(InputInfoPtr pInfo, int press,
>                                {
>                                        int btn_no = (action & AC_CODE);
>                                        int is_press = (action & 
> AC_KEYBTNPRESS);
> +
> +                                       if (!press)
> +                                       {
> +                                               if (!is_press)
> +                                                       break;
> +                                               if (countPresses(btn_no, 
> &keys[i], nkeys - i))
> +                                                       is_press = 0;
> +                                               else
> +                                                       break;
> +                                       }
> +
>                                        xf86PostButtonEventP(pInfo->dev,
>                                                            
> is_absolute(pInfo), btn_no,
>                                                            is_press, 
> first_val, num_val,
> @@ -229,6 +240,17 @@ void sendAction(InputInfoPtr pInfo, int press,
>                                {
>                                        int key_code = (action & AC_CODE);
>                                        int is_press = (action & 
> AC_KEYBTNPRESS);
> +
> +                                       if (!press)
> +                                       {
> +                                               if (!is_press)
> +                                                       break;
> +                                               if (countPresses(key_code, 
> &keys[i], nkeys - i))
> +                                                       is_press = 0;
> +                                               else
> +                                                       break;
> +                                       }
> +
>                                        wcmEmitKeycode(pInfo->dev, key_code, 
> is_press);
>                                }
>                                break;
> @@ -239,43 +261,6 @@ void sendAction(InputInfoPtr pInfo, int press,
>                                break;
>                }
>        }
> -
> -       /* Release all non-released keys for this button. */
> -       for (i = 0; !press && i < nkeys; i++)
> -       {
> -               unsigned int action = keys[i];
> -
> -               switch ((action & AC_TYPE))
> -               {
> -                       case AC_BUTTON:
> -                               {
> -                                       int btn_no = (action & AC_CODE);
> -
> -                                       /* don't care about releases here */
> -                                       if (!(action & AC_KEYBTNPRESS))
> -                                               break;
> -
> -                                       if (countPresses(btn_no, &keys[i], 
> nkeys - i))
> -                                               
> xf86PostButtonEvent(pInfo->dev,
> -                                                               
> is_absolute(pInfo), btn_no,
> -                                                               0, first_val, 
> num_val,
> -                                                               
> VCOPY(valuators, num_val));
> -                               }
> -                               break;
> -                       case AC_KEY:
> -                               {
> -                                       int key_code = (action & AC_CODE);
> -
> -                                       /* don't care about releases here */
> -                                       if (!(action & AC_KEYBTNPRESS))
> -                                               break;
> -
> -                                       if (countPresses(key_code, &keys[i], 
> nkeys - i))
> -                                               wcmEmitKeycode(pInfo->dev, 
> key_code, 0);
> -                               }
> -               }
> -
> -       }
>  }
>
>  /*****************************************************************************
> --
> 1.7.4.1
>
>
> ------------------------------------------------------------------------------
> Xperia(TM) PLAY
> It's a major breakthrough. An authentic gaming
> smartphone on the nation's most reliable network.
> And it wants your games.
> http://p.sf.net/sfu/verizon-sfdev
> _______________________________________________
> Linuxwacom-devel mailing list
> Linuxwacom-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
>
------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to