[PATCH] xwayland: Clear pending cursor frame callbacks on pointer enter
Jonas Ã…dahl
jadahl at gmail.com
Thu Feb 4 02:56:22 CET 2016
On Wed, Feb 03, 2016 at 05:46:35PM -0800, Bryce Harrington wrote:
> On Wed, Feb 03, 2016 at 04:14:09PM +0100, Rui Matos wrote:
> > The last cursor frame we commited before the pointer left one of our
> > surfaces might not have been shown. In that case we'll have a cursor
> > surface frame callback pending which we need to clear so that we can
> > continue submitting new cursor frames.
> >
> > Signed-off-by: Rui Matos <tiagomatos at gmail.com>
> > ---
> >
> > On Wed, Feb 3, 2016 at 9:30 AM, Pekka Paalanen <ppaalanen at gmail.com> wrote:
> > > Xwayland commits a wl_buffer to a cursor wl_surface with a frame
> > > callback, and the frame callback may never be emitted by the
> > > compositor, right?
> > >
> > > Is Xwayland waiting for any previous frame callback to be signalled
> > > before it commits a buffer or re-sets the cursor role on the
> > > wl_surface? Even if the commit and re-set is caused by wl_pointer.enter?
> > >
> > > Would it be a better fix to destroy any pending frame callback and
> > > commit and re-set the role unconditionally on wl_pointer.enter?
> >
> > Yes, this seems like the proper fix indeed. Thanks,
> >
> > Rui
> >
> > hw/xwayland/xwayland-input.c | 10 ++++++++++
> > 1 file changed, 10 insertions(+)
> >
> > diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
> > index 61ca70b..f9e3255 100644
> > --- a/hw/xwayland/xwayland-input.c
> > +++ b/hw/xwayland/xwayland-input.c
> > @@ -267,6 +267,16 @@ pointer_handle_enter(void *data, struct wl_pointer *pointer,
> > for (i = 0; i < dev->button->numButtons; i++)
> > if (BitIsOn(dev->button->down, i))
> > QueuePointerEvents(dev, ButtonRelease, i, 0, &mask);
> > +
> > + /* The last cursor frame we commited before the pointer left one
> > + * of our surfaces might not have been shown. In that case we'll
> > + * have a cursor surface frame callback pending which we need to
> > + * clear so that we can continue submitting new cursor frames. */
> > + if (xwl_seat->cursor_frame_cb) {
> > + wl_callback_destroy(xwl_seat->cursor_frame_cb);
> > + xwl_seat->cursor_frame_cb = NULL;
> > + xwl_seat_set_cursor(xwl_seat);
> > + }
If think it'd be better to move this to just below
"mipointer->pSpriteCursor = (CursorPtr) 1;" and skip the
xwl_seat_set_cursor(xwl_seat) call. The "pSpriteCursor = 1" thing is
another hack to avoid skipping to set the cursor on enter, and it'd be
good to keep them close. xwl_seat_set_cursor() will be called as well
indirectly by the "CheckMotion()" call.
> > }
> >
> > static void
>
> Reviewed-by: Bryce Harrington <bryce at osg.samsung.com>
>
> How noticeable/severe is this problem? Can this be left to 1.11?
This patch is for the xserver, not weston, so no need to worry about
this for the 1.10 release.
Jonas
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the xorg-devel
mailing list