From 9a9ee2c779c8390e6d82e9d61873c5425dd109ab Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 30 May 2012 16:32:03 +0100 Subject: Split XKB keymap compilation out into separate function Signed-off-by: Daniel Stone --- src/compositor.c | 53 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/src/compositor.c b/src/compositor.c index 573f765..e15f1ed 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -2242,6 +2242,28 @@ static int weston_compositor_xkb_init(struct weston_compositor *ec, if (!ec->xkb_info.names.layout) ec->xkb_info.names.layout = strdup("us"); + return 0; +} + +static void weston_compositor_xkb_destroy(struct weston_compositor *ec) +{ + free((char *) ec->xkb_info.names.rules); + free((char *) ec->xkb_info.names.model); + free((char *) ec->xkb_info.names.layout); + free((char *) ec->xkb_info.names.variant); + free((char *) ec->xkb_info.names.options); + + if (ec->xkb_info.keymap) + xkb_map_unref(ec->xkb_info.keymap); + xkb_context_unref(ec->xkb_info.context); +} + +static int +weston_compositor_build_global_keymap(struct weston_compositor *ec) +{ + if (ec->xkb_info.keymap != NULL) + return 0; + ec->xkb_info.keymap = xkb_map_new_from_names(ec->xkb_info.context, &ec->xkb_info.names, 0); if (ec->xkb_info.keymap == NULL) { @@ -2266,16 +2288,19 @@ static int weston_compositor_xkb_init(struct weston_compositor *ec, return 0; } -static void weston_compositor_xkb_destroy(struct weston_compositor *ec) +WL_EXPORT void +weston_seat_init_keyboard(struct weston_seat *seat) { - xkb_map_unref(ec->xkb_info.keymap); - xkb_context_unref(ec->xkb_info.context); + if (seat->has_keyboard) + return; - free((char *) ec->xkb_info.names.rules); - free((char *) ec->xkb_info.names.model); - free((char *) ec->xkb_info.names.layout); - free((char *) ec->xkb_info.names.variant); - free((char *) ec->xkb_info.names.options); + if (weston_compositor_build_global_keymap(seat->compositor) == -1) + return; + + wl_keyboard_init(&seat->keyboard); + wl_seat_set_keyboard(&seat->seat, &seat->keyboard); + + seat->has_keyboard = 1; } WL_EXPORT void @@ -2290,18 +2315,6 @@ weston_seat_init_pointer(struct weston_seat *seat) seat->has_pointer = 1; } -WL_EXPORT void -weston_seat_init_keyboard(struct weston_seat *seat) -{ - if (seat->has_keyboard) - return; - - wl_keyboard_init(&seat->keyboard); - wl_seat_set_keyboard(&seat->seat, &seat->keyboard); - - seat->has_keyboard = 1; -} - WL_EXPORT void weston_seat_init_touch(struct weston_seat *seat) { -- cgit v1.2.3