From 51bec40aa5fc3622c2f121294ebf5f8ef1ef02ba Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 21 Oct 2020 11:36:09 +1000 Subject: [PATCH] tools/demo-server: split the keymap handling into two functions Signed-off-by: Peter Hutterer --- tools/eis-demo-server.c | 87 +++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 38 deletions(-) diff --git a/tools/eis-demo-server.c b/tools/eis-demo-server.c index e13ac7a..5c00709 100644 --- a/tools/eis-demo-server.c +++ b/tools/eis-demo-server.c @@ -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) {