On Tue, Apr 5, 2011 at 1: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 > >
While this patch works, I don't like the idea of submitting what I don't understand. If somebody else wants to take a stab at figuring out why the last patch breaks things (or alternatively, why this patch fixes things) you're more than welcome. Jason --- Day xee-nee-svsh duu-'ushtlh-ts'it; nuu-wee-ya' duu-xan' 'vm-nvshtlh-ts'it. Huu-chan xuu naa~-gha. ------------------------------------------------------------------------------ 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