ime: render pre-edit text

This is done by allocating cells for the pre-edit text when receiving
the text-input::done() call, and populating them by converting the
utf-8 formatted pre-edit text to wchars.

We also convert the pre-edit cursor position to cell positions (it can
cover multiple cells).

When rendering, we simply render the pre-edit cells on-top off the
regular grid. While doing so, we also mark the underlying, “real”,
cells as dirty, to ensure they are re-rendered when the pre-edit text
is modified or removed.
This commit is contained in:
Daniel Eklöf 2020-12-02 18:52:50 +01:00
parent 5745c610ac
commit 8c3d48c5cd
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
8 changed files with 364 additions and 60 deletions

View file

@ -21,7 +21,7 @@
#include <xdg-shell.h>
#define LOG_MODULE "input"
#define LOG_ENABLE_DBG 1
#define LOG_ENABLE_DBG 0
#include "log.h"
#include "config.h"
#include "commands.h"
@ -752,7 +752,7 @@ keymap_lookup(struct seat *seat, struct terminal *term,
const enum keypad_keys keypad_keys_mode
= term->num_lock_modifier ? KEYPAD_NUMERICAL : term->keypad_keys_mode;
log_dbg("keypad mode: %d, num-lock=%d", keypad_keys_mode, seat->kbd.num);
LOG_DBG("keypad mode: %d, num-lock=%d", keypad_keys_mode, seat->kbd.num);
for (size_t j = 0; j < count; j++) {
if (info[j].modifiers != MOD_ANY && info[j].modifiers != mods)