From 729ba8b8ac10537938f2bceb7c38e3fa5780df9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 28 Nov 2019 19:26:52 +0100 Subject: [PATCH] input: pointer_button: apply same workaround as in pointer_motion Sway 1.2 has been seen to send pointer_button events without first having sent pointer_enter. --- input.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/input.c b/input.c index ca3ffb13..3a203f84 100644 --- a/input.c +++ b/input.c @@ -505,8 +505,25 @@ wl_pointer_button(void *data, struct wl_pointer *wl_pointer, struct wayland *wayl = data; struct terminal *term = wayl->moused; - assert(term != NULL); + /* Workaround buggy Sway 1.2 */ + if (term == NULL) { + static bool have_warned = false; + if (!have_warned) { + have_warned = true; + LOG_WARN("compositor sent pointer_button event without first sending pointer_enter"); + } + + if (tll_length(wayl->terms) == 1) { + /* With only one terminal we *know* which one has focus */ + term = tll_front(wayl->terms); + } else { + /* But with multiple windows we can't guess - ignore the event */ + return; + } + } + + assert(term != NULL); search_cancel(term); switch (state) {