From 783b3d6b378db0bdf2a10bfa8a6787bd4b152a5a Mon Sep 17 00:00:00 2001
From: Ryan Dwyer <ryandwyer1@gmail.com>
Date: Mon, 11 Mar 2019 18:11:01 +1000
Subject: [PATCH] Fix click behaviour

By the time seatop_allows_events was called, seatop_impl was already
NULL, causing the function to always return false. This means a press
event was sent to clients without a corresponding release event.

This patch moves the call to seatop_finish to after the
seatop_allows_events check.
---
 sway/input/cursor.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sway/input/cursor.c b/sway/input/cursor.c
index ef03c6aa..d531a20e 100644
--- a/sway/input/cursor.c
+++ b/sway/input/cursor.c
@@ -605,9 +605,6 @@ void dispatch_cursor_button(struct sway_cursor *cursor,
 
 	// Handle existing seat operation
 	if (seat_doing_seatop(seat)) {
-		if (button == seat->seatop_button && state == WLR_BUTTON_RELEASED) {
-			seatop_finish(seat, time_msec);
-		}
 		if (state == WLR_BUTTON_PRESSED) {
 			state_add_button(cursor, button);
 		} else {
@@ -616,6 +613,9 @@ void dispatch_cursor_button(struct sway_cursor *cursor,
 		if (seatop_allows_events(seat)) {
 			seat_pointer_notify_button(seat, time_msec, button, state);
 		}
+		if (button == seat->seatop_button && state == WLR_BUTTON_RELEASED) {
+			seatop_finish(seat, time_msec);
+		}
 		return;
 	}