Reset touch focus in unmap
Otherwise, there will be race condition of visiting invalid surface data.
This commit is contained in:
parent
dce3dacc37
commit
a2bb7919de
@ -988,6 +988,8 @@ weston_surface_unmap(struct weston_surface *surface)
|
||||
NULL,
|
||||
wl_fixed_from_int(0),
|
||||
wl_fixed_from_int(0));
|
||||
if (seat->touch && seat->touch->focus == surface)
|
||||
weston_touch_set_focus(seat, NULL);
|
||||
}
|
||||
|
||||
weston_surface_schedule_repaint(surface);
|
||||
|
@ -371,6 +371,9 @@ weston_touch_create(void);
|
||||
void
|
||||
weston_touch_destroy(struct weston_touch *touch);
|
||||
void
|
||||
weston_touch_set_focus(struct weston_seat *seat,
|
||||
struct weston_surface *surface);
|
||||
void
|
||||
weston_touch_start_grab(struct weston_touch *device,
|
||||
struct weston_touch_grab *grab);
|
||||
void
|
||||
|
@ -983,8 +983,8 @@ notify_keyboard_focus_out(struct weston_seat *seat)
|
||||
weston_keyboard_end_grab(keyboard);
|
||||
}
|
||||
|
||||
static void
|
||||
touch_set_focus(struct weston_seat *seat, struct weston_surface *surface)
|
||||
WL_EXPORT void
|
||||
weston_touch_set_focus(struct weston_seat *seat, struct weston_surface *surface)
|
||||
{
|
||||
struct wl_resource *resource;
|
||||
|
||||
@ -1045,7 +1045,7 @@ notify_touch(struct weston_seat *seat, uint32_t time, int touch_id,
|
||||
* until all touch points are up again. */
|
||||
if (seat->num_tp == 1) {
|
||||
es = weston_compositor_pick_surface(ec, x, y, &sx, &sy);
|
||||
touch_set_focus(seat, es);
|
||||
weston_touch_set_focus(seat, es);
|
||||
} else if (touch->focus) {
|
||||
es = (struct weston_surface *) touch->focus;
|
||||
weston_surface_from_global_fixed(es, x, y, &sx, &sy);
|
||||
@ -1074,7 +1074,7 @@ notify_touch(struct weston_seat *seat, uint32_t time, int touch_id,
|
||||
|
||||
grab->interface->up(grab, time, touch_id);
|
||||
if (seat->num_tp == 0)
|
||||
touch_set_focus(seat, NULL);
|
||||
weston_touch_set_focus(seat, NULL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user