On Mon, Dec 4, 2017 at 7:55 AM, Carlos Garnacho <[email protected]> wrote: > The tablet/stylus interfaces reused xwl_seat->focus_window, which > would leave a somewhat inconsistent state of that variable for > wl_pointer purposes (basically, everything) if the pointer happened > to lay on the same surface than the stylus while proximity_out > happens. > > We just want the stylus xwl_window to correctly determine we have > stylus focus, and to correctly translate surface-local coordinates > to root coordinates, this can be done using a different variable. > > Signed-off-by: Carlos Garnacho <[email protected]>
Makes sense: Acked-by: Jason Gerecke <[email protected]> Jason --- Now instead of four in the eights place / you’ve got three, ‘Cause you added one / (That is to say, eight) to the two, / But you can’t take seven from three, / So you look at the sixty-fours.... > --- > hw/xwayland/xwayland-input.c | 20 ++++++++++---------- > hw/xwayland/xwayland.c | 2 ++ > hw/xwayland/xwayland.h | 1 + > 3 files changed, 13 insertions(+), 10 deletions(-) > > diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c > index 68e365051..439903032 100644 > --- a/hw/xwayland/xwayland-input.c > +++ b/hw/xwayland/xwayland-input.c > @@ -1514,7 +1514,7 @@ tablet_tool_proximity_in(void *data, struct > zwp_tablet_tool_v2 *tool, > return; > > xwl_tablet_tool->proximity_in_serial = serial; > - xwl_seat->focus_window = wl_surface_get_user_data(wl_surface); > + xwl_seat->tablet_focus_window = wl_surface_get_user_data(wl_surface); > > xwl_tablet_tool_set_cursor(xwl_tablet_tool); > } > @@ -1526,7 +1526,7 @@ tablet_tool_proximity_out(void *data, struct > zwp_tablet_tool_v2 *tool) > struct xwl_seat *xwl_seat = xwl_tablet_tool->seat; > > xwl_tablet_tool->proximity_in_serial = 0; > - xwl_seat->focus_window = NULL; > + xwl_seat->tablet_focus_window = NULL; > > xwl_tablet_tool->pressure = 0; > xwl_tablet_tool->tilt_x = 0; > @@ -1568,11 +1568,11 @@ tablet_tool_motion(void *data, struct > zwp_tablet_tool_v2 *tool, > int sx = wl_fixed_to_int(x); > int sy = wl_fixed_to_int(y); > > - if (!xwl_seat->focus_window) > + if (!xwl_seat->tablet_focus_window) > return; > > - dx = xwl_seat->focus_window->window->drawable.x; > - dy = xwl_seat->focus_window->window->drawable.y; > + dx = xwl_seat->tablet_focus_window->window->drawable.x; > + dy = xwl_seat->tablet_focus_window->window->drawable.y; > > xwl_tablet_tool->x = dx + sx; > xwl_tablet_tool->y = dy + sy; > @@ -1585,7 +1585,7 @@ tablet_tool_pressure(void *data, struct > zwp_tablet_tool_v2 *tool, > struct xwl_tablet_tool *xwl_tablet_tool = data; > struct xwl_seat *xwl_seat = xwl_tablet_tool->seat; > > - if (!xwl_seat->focus_window) > + if (!xwl_seat->tablet_focus_window) > return; > > /* normalized to 65535 already */ > @@ -1605,7 +1605,7 @@ tablet_tool_tilt(void *data, struct zwp_tablet_tool_v2 > *tool, > struct xwl_tablet_tool *xwl_tablet_tool = data; > struct xwl_seat *xwl_seat = xwl_tablet_tool->seat; > > - if (!xwl_seat->focus_window) > + if (!xwl_seat->tablet_focus_window) > return; > > xwl_tablet_tool->tilt_x = wl_fixed_to_double(tilt_x); > @@ -1620,7 +1620,7 @@ tablet_tool_rotation(void *data, struct > zwp_tablet_tool_v2 *tool, > struct xwl_seat *xwl_seat = xwl_tablet_tool->seat; > double rotation = wl_fixed_to_double(angle); > > - if (!xwl_seat->focus_window) > + if (!xwl_seat->tablet_focus_window) > return; > > /* change origin (buttons facing right [libinput +90 degrees]) and > @@ -1639,7 +1639,7 @@ tablet_tool_slider(void *data, struct > zwp_tablet_tool_v2 *tool, > struct xwl_seat *xwl_seat = xwl_tablet_tool->seat; > float position = position_raw / 65535.0; > > - if (!xwl_seat->focus_window) > + if (!xwl_seat->tablet_focus_window) > return; > > xwl_tablet_tool->slider = (position * 1799.0f) - 900.0f; > @@ -1652,7 +1652,7 @@ tablet_tool_wheel(void *data, struct zwp_tablet_tool_v2 > *tool, > struct xwl_tablet_tool *xwl_tablet_tool = data; > struct xwl_seat *xwl_seat = xwl_tablet_tool->seat; > > - if (!xwl_seat->focus_window) > + if (!xwl_seat->tablet_focus_window) > return; > > xwl_tablet_tool->wheel_clicks = clicks; > diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c > index 79deead8d..638022180 100644 > --- a/hw/xwayland/xwayland.c > +++ b/hw/xwayland/xwayland.c > @@ -545,6 +545,8 @@ xwl_unrealize_window(WindowPtr window) > xorg_list_for_each_entry(xwl_seat, &xwl_screen->seat_list, link) { > if (xwl_seat->focus_window && xwl_seat->focus_window->window == > window) > xwl_seat->focus_window = NULL; > + if (xwl_seat->tablet_focus_window && > xwl_seat->tablet_focus_window->window == window) > + xwl_seat->tablet_focus_window = NULL; > if (xwl_seat->last_xwindow == window) > xwl_seat->last_xwindow = NullWindow; > if (xwl_seat->cursor_confinement_window && > diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h > index 3adee82fa..e6eb37bec 100644 > --- a/hw/xwayland/xwayland.h > +++ b/hw/xwayland/xwayland.h > @@ -154,6 +154,7 @@ struct xwl_seat { > struct zwp_tablet_seat_v2 *tablet_seat; > struct wl_array keys; > struct xwl_window *focus_window; > + struct xwl_window *tablet_focus_window; > uint32_t id; > uint32_t pointer_enter_serial; > struct xorg_list link; > -- > 2.14.3 > > _______________________________________________ > [email protected]: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: https://lists.x.org/mailman/listinfo/xorg-devel _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
