mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
ime: wip: add text-input object to seat
This commit is contained in:
parent
d58d0601f6
commit
148bb1ff13
5 changed files with 147 additions and 0 deletions
97
ime.c
Normal file
97
ime.c
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
#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,
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue