mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-04 04:06:06 -05:00
97 lines
2.6 KiB
C
97 lines
2.6 KiB
C
#include "ime.h"
|
|
|
|
#include "text-input-unstable-v3.h"
|
|
|
|
#define LOG_MODULE "ime"
|
|
#define LOG_ENABLE_DBG 1
|
|
#include "log.h"
|
|
#include "terminal.h"
|
|
#include "wayland.h"
|
|
|
|
static void
|
|
enter(void *data, struct zwp_text_input_v3 *zwp_text_input_v3,
|
|
struct wl_surface *surface)
|
|
{
|
|
struct seat *seat = data;
|
|
LOG_DBG("enter: seat=%s", seat->name);
|
|
|
|
assert(seat->kbd_focus != NULL);
|
|
|
|
switch (term_surface_kind(seat->kbd_focus, surface)) {
|
|
case TERM_SURF_GRID:
|
|
zwp_text_input_v3_enable(seat->wl_text_input);
|
|
zwp_text_input_v3_set_content_type(
|
|
seat->wl_text_input,
|
|
ZWP_TEXT_INPUT_V3_CONTENT_HINT_NONE,
|
|
ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_TERMINAL);
|
|
|
|
/* TODO: set cursor rectangle */
|
|
zwp_text_input_v3_set_cursor_rectangle(seat->wl_text_input, 0, 0, 15, 15);
|
|
break;
|
|
|
|
case TERM_SURF_SEARCH:
|
|
/* TODO */
|
|
/* FALLTHROUGH */
|
|
|
|
case TERM_SURF_NONE:
|
|
case TERM_SURF_SCROLLBACK_INDICATOR:
|
|
case TERM_SURF_RENDER_TIMER:
|
|
case TERM_SURF_TITLE:
|
|
case TERM_SURF_BORDER_LEFT:
|
|
case TERM_SURF_BORDER_RIGHT:
|
|
case TERM_SURF_BORDER_TOP:
|
|
case TERM_SURF_BORDER_BOTTOM:
|
|
case TERM_SURF_BUTTON_MINIMIZE:
|
|
case TERM_SURF_BUTTON_MAXIMIZE:
|
|
case TERM_SURF_BUTTON_CLOSE:
|
|
zwp_text_input_v3_disable(seat->wl_text_input);
|
|
break;
|
|
}
|
|
|
|
zwp_text_input_v3_commit(seat->wl_text_input);
|
|
}
|
|
|
|
static void
|
|
leave(void *data, struct zwp_text_input_v3 *zwp_text_input_v3,
|
|
struct wl_surface *surface)
|
|
{
|
|
struct seat *seat = data;
|
|
LOG_DBG("leave: seat=%s", seat->name);
|
|
}
|
|
|
|
static void
|
|
preedit_string(void *data, struct zwp_text_input_v3 *zwp_text_input_v3,
|
|
const char *text, int32_t cursor_begin, int32_t cursor_end)
|
|
{
|
|
LOG_DBG("preedit-strig: text=%s, begin=%d, end=%d", text, cursor_begin, cursor_end);
|
|
}
|
|
|
|
static void
|
|
commit_string(void *data, struct zwp_text_input_v3 *zwp_text_input_v3,
|
|
const char *text)
|
|
{
|
|
LOG_DBG("commit: text=%s", text);
|
|
}
|
|
|
|
static void
|
|
delete_surrounding_text(void *data, struct zwp_text_input_v3 *zwp_text_input_v3,
|
|
uint32_t before_length, uint32_t after_length)
|
|
{
|
|
LOG_DBG("delete-surrounding: before=%d, after=%d", before_length, after_length);
|
|
}
|
|
|
|
static void
|
|
done(void *data, struct zwp_text_input_v3 *zwp_text_input_v3,
|
|
uint32_t serial)
|
|
{
|
|
LOG_DBG("done: serial=%u", serial);
|
|
}
|
|
|
|
const struct zwp_text_input_v3_listener text_input_listener = {
|
|
.enter = &enter,
|
|
.leave = &leave,
|
|
.preedit_string = &preedit_string,
|
|
.commit_string = &commit_string,
|
|
.delete_surrounding_text = &delete_surrounding_text,
|
|
.done = &done,
|
|
};
|