diff --git a/input.c b/input.c index 660f359e..1caf46b3 100644 --- a/input.c +++ b/input.c @@ -304,19 +304,9 @@ keyboard_enter(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial, LOG_DBG("keyboard_enter: keyboard=%p, serial=%u, surface=%p", wl_keyboard, serial, surface); - bool term_already_focused = false; - tll_foreach(seat->wayl->seats, it) { - if (it->item.kbd_focus == term) { - term_already_focused = true; - break; - } - } - + term_kbd_focus_in(term); seat->kbd_focus = term; seat->input_serial = serial; - - if (!term_already_focused) - term_kbd_focus_in(seat->kbd_focus); } static bool @@ -386,13 +376,9 @@ keyboard_leave(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial, seat->kbd.meta = false; xkb_compose_state_reset(seat->kbd.xkb_compose_state); - if (old_focused != NULL) { - /* Tell term it's unfocused *if* no other seats still have it focused */ - tll_foreach(seat->wayl->seats, it) - if (it->item.kbd_focus == old_focused) - return; + if (old_focused != NULL) term_kbd_focus_out(old_focused); - } else { + else { /* * Sway bug - under certain conditions we get a * keyboard_leave() (and keyboard_key()) without first having diff --git a/terminal.c b/terminal.c index fa1816ae..96c83644 100644 --- a/terminal.c +++ b/terminal.c @@ -1964,7 +1964,8 @@ term_has_kbd_focus(struct terminal *term) void term_kbd_focus_in(struct terminal *term) { - assert(term_has_kbd_focus(term)); + if (term_has_kbd_focus(term)) + return; if (term->focus_events) term_to_slave(term, "\033[I", 3); @@ -1973,7 +1974,8 @@ term_kbd_focus_in(struct terminal *term) void term_kbd_focus_out(struct terminal *term) { - assert(!term_has_kbd_focus(term)); + if (term_has_kbd_focus(term)) + return; if (term->focus_events) term_to_slave(term, "\033[O", 3);