On Wed, Jun 25, 2014 at 02:30:15AM -0400, Stephen Chandler Paul wrote: > Because bad distance events still trigger calls to tablet_flush(), > tablet_flush() will see that the tablet is out of proximity and assume it's an > appropriate time to send a proximity-out event, even when we've already sent > one. This results in multiple proximity-out events being sent in a row instead > of just one.
can you add a test for this please, it's a bug I'd prefer not to come back in the future Cheers, Peter > > Signed-off-by: Stephen Chandler Paul <[email protected]> > --- > src/evdev-tablet.c | 12 ++++++++---- > src/evdev-tablet.h | 3 ++- > 2 files changed, 10 insertions(+), 5 deletions(-) > > diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c > index a6acca4..584b49e 100644 > --- a/src/evdev-tablet.c > +++ b/src/evdev-tablet.c > @@ -102,7 +102,7 @@ tablet_update_tool(struct tablet_dispatch *tablet, > tablet_unset_status(tablet, TABLET_TOOL_OUT_OF_PROXIMITY); > } > else > - tablet_set_status(tablet, TABLET_TOOL_OUT_OF_PROXIMITY); > + tablet_set_status(tablet, TABLET_TOOL_LEAVING_PROXIMITY); > } > > static inline double > @@ -164,7 +164,8 @@ tablet_check_notify_axes(struct tablet_dispatch *tablet, > } > > if (axis_update_needed && > - !tablet_has_status(tablet, TABLET_TOOL_OUT_OF_PROXIMITY)) > + !tablet_has_status(tablet, TABLET_TOOL_OUT_OF_PROXIMITY) && > + !tablet_has_status(tablet, TABLET_TOOL_LEAVING_PROXIMITY)) > tablet_notify_axis(base, > time, > tablet->changed_axes, > @@ -378,7 +379,7 @@ tablet_flush(struct tablet_dispatch *tablet, > struct evdev_device *device, > uint32_t time) > { > - if (tablet_has_status(tablet, TABLET_TOOL_OUT_OF_PROXIMITY)) { > + if (tablet_has_status(tablet, TABLET_TOOL_LEAVING_PROXIMITY)) { > /* Release all stylus buttons */ > tablet->button_state.stylus_buttons = 0; > tablet_set_status(tablet, TABLET_BUTTONS_RELEASED); > @@ -405,8 +406,11 @@ tablet_flush(struct tablet_dispatch *tablet, > tablet_unset_status(tablet, TABLET_BUTTONS_PRESSED); > } > > - if (tablet_has_status(tablet, TABLET_TOOL_OUT_OF_PROXIMITY)) > + if (tablet_has_status(tablet, TABLET_TOOL_LEAVING_PROXIMITY)) { > tablet_notify_proximity_out(&device->base, time); > + tablet_set_status(tablet, TABLET_TOOL_OUT_OF_PROXIMITY); > + tablet_unset_status(tablet, TABLET_TOOL_LEAVING_PROXIMITY); > + } > > /* Update state */ > memcpy(&tablet->prev_button_state, > diff --git a/src/evdev-tablet.h b/src/evdev-tablet.h > index 504b093..89cf224 100644 > --- a/src/evdev-tablet.h > +++ b/src/evdev-tablet.h > @@ -34,7 +34,8 @@ enum tablet_status { > TABLET_BUTTONS_PRESSED = 1 << 2, > TABLET_BUTTONS_RELEASED = 1 << 3, > TABLET_STYLUS_IN_CONTACT = 1 << 4, > - TABLET_TOOL_OUT_OF_PROXIMITY = 1 << 5 > + TABLET_TOOL_LEAVING_PROXIMITY = 1 << 5, > + TABLET_TOOL_OUT_OF_PROXIMITY = 1 << 6 > }; > > struct button_state { > -- > 1.8.5.5 > _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
