ime: move preedit state from terminal struct to the seat struct

This ensures different seat’s don’t step on each others IME pre-edit
state.

It also removes most dependencies on having a valid term pointer for
many IME operations.

We’re still not all the way, since we support disabling IME with a
private mode, which is per terminal, not seat.

Thus, we still require the seat to have keyboard focus on one of our
windows.

Closes #324. But note that *rendering* of multiple seat’s IME pre-edit
strings is still broken.
This commit is contained in:
Daniel Eklöf 2021-03-23 13:03:07 +01:00
parent eb3f9f14b0
commit e8ffb05bc7
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
8 changed files with 178 additions and 136 deletions

View file

@ -567,20 +567,7 @@ struct terminal {
struct grid *url_grid_snapshot;
#if defined(FOOT_IME_ENABLED) && FOOT_IME_ENABLED
struct {
bool enabled;
struct {
wchar_t *text;
struct cell *cells;
int count;
struct {
bool hidden;
int start; /* Cell index, inclusive */
int end; /* Cell index, exclusive */
} cursor;
} preedit;
} ime;
bool ime_enabled;
#endif
bool is_shutting_down;
@ -713,7 +700,7 @@ bool term_view_to_text(
bool term_ime_is_enabled(const struct terminal *term);
void term_ime_enable(struct terminal *term);
void term_ime_disable(struct terminal *term);
void term_ime_reset(struct terminal *term);
bool term_ime_reset(struct terminal *term);
void term_ime_set_cursor_rect(
struct terminal *term, int x, int y, int width, int height);