mirror of
https://gitlab.freedesktop.org/libinput/libei.git
synced 2026-02-21 07:30:36 +01:00
tools/demo-server: split the keymap handling into two functions
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
08650b0268
commit
51bec40aa5
1 changed files with 49 additions and 38 deletions
|
|
@ -85,48 +85,50 @@ DEFINE_UNREF_CLEANUP_FUNC(xkb_state);
|
|||
#endif
|
||||
|
||||
static void
|
||||
setup_keymap(struct eis_demo_server *server, struct eis_device *device)
|
||||
setup_server_keymap(struct eis_demo_server *server, struct eis_device *device)
|
||||
{
|
||||
#if HAVE_LIBXKBCOMMON
|
||||
if (server->layout) {
|
||||
colorprint("Using server layout: %s\n", server->layout);
|
||||
_unref_(xkb_context) *ctx = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
|
||||
if (!ctx)
|
||||
return;
|
||||
|
||||
struct xkb_rule_names names = {
|
||||
.rules = "evdev",
|
||||
.model = "pc105",
|
||||
.layout = server->layout,
|
||||
};
|
||||
|
||||
_unref_(xkb_keymap) *keymap = xkb_keymap_new_from_names(ctx, &names, 0);
|
||||
if (!keymap)
|
||||
return;
|
||||
|
||||
const char *str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1);
|
||||
size_t len = strlen(str) - 1;
|
||||
|
||||
struct memfile *f = memfile_new(str, len);
|
||||
if (!f)
|
||||
return;
|
||||
|
||||
_unref_(eis_keymap) *k = eis_keymap_new(EIS_KEYMAP_TYPE_XKB, memfile_get_fd(f),
|
||||
memfile_get_size(f));
|
||||
eis_device_keyboard_set_keymap(device, k);
|
||||
memfile_unref(f);
|
||||
|
||||
_unref_(xkb_state) *state = xkb_state_new(keymap);
|
||||
if (!state)
|
||||
return;
|
||||
|
||||
server->ctx = steal(&ctx);
|
||||
server->keymap = steal(&keymap);
|
||||
server->state = steal(&state);
|
||||
|
||||
colorprint("Using server layout: %s\n", server->layout);
|
||||
_unref_(xkb_context) *ctx = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
|
||||
if (!ctx)
|
||||
return;
|
||||
}
|
||||
|
||||
struct xkb_rule_names names = {
|
||||
.rules = "evdev",
|
||||
.model = "pc105",
|
||||
.layout = server->layout,
|
||||
};
|
||||
|
||||
_unref_(xkb_keymap) *keymap = xkb_keymap_new_from_names(ctx, &names, 0);
|
||||
if (!keymap)
|
||||
return;
|
||||
|
||||
const char *str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1);
|
||||
size_t len = strlen(str) - 1;
|
||||
|
||||
struct memfile *f = memfile_new(str, len);
|
||||
if (!f)
|
||||
return;
|
||||
|
||||
_unref_(eis_keymap) *k = eis_keymap_new(EIS_KEYMAP_TYPE_XKB, memfile_get_fd(f),
|
||||
memfile_get_size(f));
|
||||
eis_device_keyboard_set_keymap(device, k);
|
||||
memfile_unref(f);
|
||||
|
||||
_unref_(xkb_state) *state = xkb_state_new(keymap);
|
||||
if (!state)
|
||||
return;
|
||||
|
||||
server->ctx = steal(&ctx);
|
||||
server->keymap = steal(&keymap);
|
||||
server->state = steal(&state);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
setup_client_keymap(struct eis_demo_server *server, struct eis_device *device)
|
||||
{
|
||||
#if HAVE_LIBXKBCOMMON
|
||||
struct eis_keymap *keymap = eis_device_keyboard_get_keymap(device);
|
||||
if (!keymap)
|
||||
return;
|
||||
|
|
@ -157,6 +159,15 @@ setup_keymap(struct eis_demo_server *server, struct eis_device *device)
|
|||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
setup_keymap(struct eis_demo_server *server, struct eis_device *device)
|
||||
{
|
||||
if (server->layout)
|
||||
setup_server_keymap(server, device);
|
||||
else
|
||||
setup_client_keymap(server, device);
|
||||
}
|
||||
|
||||
static void
|
||||
handle_key(struct eis_demo_server *server, uint32_t keycode, bool is_press)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue