[PATCH weston 2/6] input: Keep track of number of touch points inside touch struct

Jonas Ådahl jadahl at gmail.com
Mon Dec 2 13:05:03 PST 2013


Signed-off-by: Jonas Ådahl <jadahl at gmail.com>
---
 src/bindings.c   |  2 +-
 src/compositor.h |  4 ++--
 src/input.c      | 13 ++++++-------
 src/shell.c      |  2 +-
 4 files changed, 10 insertions(+), 11 deletions(-)

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 @@ weston_compositor_run_touch_binding(struct weston_compositor *compositor,
 {
 	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 e31d7db..95d4716 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -340,6 +340,8 @@ struct weston_touch {
 	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 weston_seat {
 	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 @@ notify_touch(struct weston_seat *seat, uint32_t time, int touch_id,
 	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 @@ notify_touch(struct weston_seat *seat, uint32_t time, int touch_id,
 			 * 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 @@ notify_touch(struct weston_seat *seat, uint32_t time, int touch_id,
 		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 @@ weston_seat_init(struct weston_seat *seat, struct weston_compositor *ec,
 
 	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 5eab11b..9b1e586 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -1415,7 +1415,7 @@ touch_move_grab_up(struct weston_touch_grab *grab, uint32_t time, int touch_id)
 		(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);
 	}
-- 
1.8.1.2



More information about the wayland-devel mailing list