wayland: store pointer to window instance in all surfaces

This commit is contained in:
Daniel Eklöf 2020-02-29 12:09:28 +01:00
parent 1091d1c078
commit 43c0551806
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 10 additions and 1 deletions

View file

@ -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);
}

View file

@ -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);

View file

@ -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]);
}
}