From: Daniel Stone Date: Tue, 1 May 2012 19:37:12 +0000 (+0100) Subject: Load an XKB keymap and state in the compositor X-Git-Tag: 20120702.1049~217 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d42f457b66635df57a67ca264f5ba972023e73f0;p=profile%2Fivi%2Fweston.git Load an XKB keymap and state in the compositor Not used yet, but will be in future commits. Signed-off-by: Daniel Stone --- diff --git a/src/compositor.c b/src/compositor.c index 3762c01..50e0a77 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -2611,6 +2611,12 @@ weston_compositor_shutdown(struct weston_compositor *ec) static int weston_compositor_xkb_init(struct weston_compositor *ec, struct xkb_rule_names *names) { + ec->xkb_info.context = xkb_context_new(); + if (ec->xkb_info.context == NULL) { + fprintf(stderr, "failed to create XKB context\n"); + return -1; + } + ec->xkb_info.names = *names; if (!ec->xkb_info.names.rules) ec->xkb_info.names.rules = strdup("evdev"); @@ -2619,11 +2625,28 @@ static int weston_compositor_xkb_init(struct weston_compositor *ec, if (!ec->xkb_info.names.layout) ec->xkb_info.names.layout = strdup("us"); + ec->xkb_info.keymap = xkb_map_new_from_names(ec->xkb_info.context, + &ec->xkb_info.names); + if (ec->xkb_info.keymap == NULL) { + fprintf(stderr, "failed to compile XKB keymap\n"); + return -1; + } + + ec->xkb_info.state = xkb_state_new(ec->xkb_info.keymap); + if (ec->xkb_info.state == NULL) { + fprintf(stderr, "failed to initialise XKB state\n"); + return -1; + } + return 0; } static void weston_compositor_xkb_destroy(struct weston_compositor *ec) { + xkb_state_unref(ec->xkb_info.state); + xkb_map_unref(ec->xkb_info.keymap); + xkb_context_unref(ec->xkb_info.context); + free(ec->xkb_info.names.rules); free(ec->xkb_info.names.model); free(ec->xkb_info.names.layout); diff --git a/src/compositor.h b/src/compositor.h index 64dc349..e828470 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -269,6 +269,9 @@ struct weston_compositor { struct { struct xkb_rule_names names; + struct xkb_context *context; + struct xkb_keymap *keymap; + struct xkb_state *state; } xkb_info; };