diff --git a/input.c b/input.c index d77061eb..a7a78a5d 100644 --- a/input.c +++ b/input.c @@ -88,9 +88,11 @@ keyboard_enter(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial, assert(surface != NULL); struct wayland *wayl = data; + struct wl_window *win = wl_surface_get_user_data(surface); + struct terminal *term = win->term; + + wayl->kbd_focus = term; wayl->input_serial = serial; - wayl->kbd_focus = wayl_terminal_from_surface(wayl, surface); - assert(wayl->kbd_focus != NULL); term_kbd_focus_in(wayl->kbd_focus); term_xcursor_update(wayl->kbd_focus); @@ -147,7 +149,8 @@ keyboard_leave(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial, assert( wayl->kbd_focus == NULL || surface == NULL || /* Seen on Sway 1.2 */ - wayl_terminal_from_surface(wayl, surface) == wayl->kbd_focus); + ((const struct wl_window *)wl_surface_get_user_data(surface))->term == wayl->kbd_focus + ); struct terminal *old_focused = wayl->kbd_focus; wayl->kbd_focus = NULL; diff --git a/wayland.c b/wayland.c index e5249a1d..5d3a30df 100644 --- a/wayland.c +++ b/wayland.c @@ -1150,19 +1150,6 @@ wayl_reload_cursor_theme(struct wayland *wayl, struct terminal *term) return render_xcursor_set(term); } -struct terminal * -wayl_terminal_from_surface(struct wayland *wayl, struct wl_surface *surface) -{ - tll_foreach(wayl->terms, it) { - if (term_surface_kind(it->item, surface) != TERM_SURF_NONE) - return it->item; - } - - assert(false); - LOG_WARN("surface %p doesn't map to a terminal", surface); - return NULL; -} - void wayl_flush(struct wayland *wayl) { diff --git a/wayland.h b/wayland.h index 5ffbab2d..a18b40a3 100644 --- a/wayland.h +++ b/wayland.h @@ -205,8 +205,5 @@ void wayl_destroy(struct wayland *wayl); void wayl_flush(struct wayland *wayl); void wayl_roundtrip(struct wayland *wayl); -struct terminal *wayl_terminal_from_surface( - struct wayland *wayl, struct wl_surface *surface); - struct wl_window *wayl_win_init(struct terminal *term); void wayl_win_destroy(struct wl_window *win);