From 43c05518064d6b6dc9a24cf2bded216ab84508f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sat, 29 Feb 2020 12:09:28 +0100 Subject: [PATCH] wayland: store pointer to window instance in all surfaces --- input.c | 8 +++++++- search.c | 2 ++ wayland.c | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/input.c b/input.c index 6a2bd0bf..d77061eb 100644 --- a/input.c +++ b/input.c @@ -676,7 +676,8 @@ wl_pointer_enter(void *data, struct wl_pointer *wl_pointer, assert(surface != NULL); struct wayland *wayl = data; - struct terminal *term = wayl_terminal_from_surface(wayl, surface); + struct wl_window *win = wl_surface_get_user_data(surface); + struct terminal *term = win->term; LOG_DBG("pointer-enter: surface = %p, new-moused = %p", surface, term); @@ -743,6 +744,11 @@ wl_pointer_leave(void *data, struct wl_pointer *wl_pointer, "compositor sent pointer_leave event without a pointer_enter " "event: surface=%p", surface); } else { + if (surface != NULL) { + /* Sway 1.4 sends this event with a NULL surface when we destroy the window */ + const struct wl_window *win = wl_surface_get_user_data(surface); + assert(old_moused == win->term); + } old_moused->active_surface = TERM_SURF_NONE; term_xcursor_update(old_moused); } diff --git a/search.c b/search.c index 590c7577..c0c33f3b 100644 --- a/search.c +++ b/search.c @@ -75,6 +75,8 @@ search_begin(struct terminal *term) struct wl_window *win = term->window; struct wayland *wayl = term->wl; win->search_surface = wl_compositor_create_surface(wayl->compositor); + wl_surface_set_user_data(win->search_surface, term->window); + win->search_sub_surface = wl_subcompositor_get_subsurface( wayl->sub_compositor, win->search_surface, win->surface); wl_subsurface_set_desync(win->search_sub_surface); diff --git a/wayland.c b/wayland.c index 9b8cb258..e5249a1d 100644 --- a/wayland.c +++ b/wayland.c @@ -51,6 +51,7 @@ csd_instantiate(struct wl_window *win) wayl->sub_compositor, win->csd.surface[i], win->surface); wl_subsurface_set_sync(win->csd.sub_surface[i]); + wl_surface_set_user_data(win->csd.surface[i], win); wl_surface_commit(win->csd.surface[i]); } }