term: cache kbd-focused state, just like we cache visual focus state

There's one difference however, when we receive a kbd unfocus call,
*all* seats must have us unfocused before we actually change the
state.
This commit is contained in:
Daniel Eklöf 2020-07-11 09:04:46 +02:00
parent ed0cb06b48
commit 8c72e9434e
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 12 additions and 2 deletions

View file

@ -1967,13 +1967,16 @@ term_has_kbd_focus(struct terminal *term)
return false;
}
#endif
void
term_kbd_focus_in(struct terminal *term)
{
if (term_has_kbd_focus(term))
if (term->kbd_focus)
return;
term->kbd_focus = true;
if (term->focus_events)
term_to_slave(term, "\033[I", 3);
}
@ -1981,9 +1984,15 @@ term_kbd_focus_in(struct terminal *term)
void
term_kbd_focus_out(struct terminal *term)
{
if (term_has_kbd_focus(term))
if (!term->kbd_focus)
return;
tll_foreach(term->wl->seats, it)
if (it->item.kbd_focus == term)
return;
term->kbd_focus = false;
if (term->focus_events)
term_to_slave(term, "\033[O", 3);
}

View file

@ -336,6 +336,7 @@ struct terminal {
struct wayland *wl;
struct wl_window *window;
bool visual_focus;
bool kbd_focus;
enum term_surface active_surface;
struct {