input: Keep track of number of touch points inside touch struct
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
diff --git a/src/bindings.c b/src/bindings.c
index fe21ed6..7d30024 100644
--- a/src/bindings.c
+++ b/src/bindings.c
@@ -346,7 +346,7 @@
{
struct weston_binding *b;
- if (seat->num_tp != 1 || touch_type != WL_TOUCH_DOWN)
+ if (seat->touch->num_tp != 1 || touch_type != WL_TOUCH_DOWN)
return;
wl_list_for_each(b, &compositor->touch_binding_list, link) {
diff --git a/src/compositor.h b/src/compositor.h
index 9e1a825..3e878c8 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -340,6 +340,8 @@
uint32_t focus_serial;
struct wl_signal focus_signal;
+ uint32_t num_tp;
+
struct weston_touch_grab *grab;
struct weston_touch_grab default_grab;
int grab_touch_id;
@@ -493,8 +495,6 @@
struct wl_listener selection_data_source_listener;
struct wl_signal selection_signal;
- uint32_t num_tp;
-
void (*led_update)(struct weston_seat *ws, enum weston_led leds);
struct weston_xkb_info *xkb_info;
diff --git a/src/input.c b/src/input.c
index f965ba1..1b8dbae 100644
--- a/src/input.c
+++ b/src/input.c
@@ -1365,12 +1365,12 @@
case WL_TOUCH_DOWN:
weston_compositor_idle_inhibit(ec);
- seat->num_tp++;
+ touch->num_tp++;
/* the first finger down picks the view, and all further go
* to that view for the remainder of the touch session i.e.
* until all touch points are up again. */
- if (seat->num_tp == 1) {
+ if (touch->num_tp == 1) {
ev = weston_compositor_pick_view(ec, x, y, &sx, &sy);
weston_touch_set_focus(seat, ev);
} else if (touch->focus) {
@@ -1381,12 +1381,12 @@
* there is no focused surface.
*/
weston_log("touch event received with %d points down"
- "but no surface focused\n", seat->num_tp);
+ "but no surface focused\n", touch->num_tp);
return;
}
grab->interface->down(grab, time, touch_id, sx, sy);
- if (seat->num_tp == 1) {
+ if (touch->num_tp == 1) {
touch->grab_serial =
wl_display_get_serial(ec->wl_display);
touch->grab_touch_id = touch_id;
@@ -1406,10 +1406,10 @@
break;
case WL_TOUCH_UP:
weston_compositor_idle_release(ec);
- seat->num_tp--;
+ touch->num_tp--;
grab->interface->up(grab, time, touch_id);
- if (seat->num_tp == 0)
+ if (touch->num_tp == 0)
weston_touch_set_focus(seat, NULL);
break;
}
@@ -2062,7 +2062,6 @@
seat->compositor = ec;
seat->modifier_state = 0;
- seat->num_tp = 0;
seat->seat_name = strdup(seat_name);
wl_list_insert(ec->seat_list.prev, &seat->link);
diff --git a/src/shell.c b/src/shell.c
index dfcb525..00e0f1c 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -1457,7 +1457,7 @@
(struct weston_touch_move_grab *) container_of(
grab, struct shell_touch_grab, grab);
- if (grab->touch->seat->num_tp == 0) {
+ if (grab->touch->num_tp == 0) {
shell_touch_grab_end(&move->base);
free(move);
}