static headless_keyboard_t *create_keyboard(headless_input_t *input,
struct ds_input_device *dev);
static void keyboard_destroy(headless_keyboard_t *keyboard);
+static bool keyboard_set_keymap(headless_keyboard_t *keyboard);
static void keyboard_handle_destroy(struct wl_listener *listener, void *data);
static void keyboard_handle_key(struct wl_listener *listener, void *data);
static void devicemgr_set_keymap(struct ds_tizen_input_devicemgr *devicemgr);
create_keyboard(headless_input_t *input, struct ds_input_device *dev)
{
headless_keyboard_t *keyboard;
- struct ds_keyboard *ds_keyboard;
- struct xkb_context *context;
- struct xkb_keymap *keymap;
keyboard = calloc(1, sizeof *keyboard);
if (!keyboard) {
keyboard->input = input;
keyboard->dev = dev;
+ if (!keyboard_set_keymap(keyboard)) {
+ ds_err("Could not set keymap for ds_keyboard");
+ free(keyboard);
+ return NULL;
+ }
+
keyboard->device_destroy.notify = keyboard_handle_destroy;
ds_input_device_add_destroy_listener(dev, &keyboard->device_destroy);
- ds_keyboard = ds_input_device_get_keyboard(dev);
-
keyboard->key.notify = keyboard_handle_key;
- ds_keyboard_add_key_listener(ds_keyboard, &keyboard->key);
-
- context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
- keymap = xkb_keymap_new_from_names(context, NULL,
- XKB_KEYMAP_COMPILE_NO_FLAGS);
-
- ds_keyboard_set_keymap(ds_keyboard, keymap);
- xkb_keymap_unref(keymap);
- xkb_context_unref(context);
+ ds_keyboard_add_key_listener(ds_input_device_get_keyboard(dev),
+ &keyboard->key);
ds_inf("Input(%p): New keyboard(%p)", input, keyboard);
free(keyboard);
}
+static bool
+keyboard_set_keymap(headless_keyboard_t *keyboard)
+{
+ struct xkb_context *context;
+ struct xkb_keymap *keymap;
+
+ context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
+ if (!context) {
+ ds_err("Could not create xkb_context");
+ return false;
+ }
+
+ keymap = xkb_keymap_new_from_names(context, NULL,
+ XKB_KEYMAP_COMPILE_NO_FLAGS);
+ if (!keymap) {
+ ds_err("Could not create xkb_keymap");
+ xkb_context_unref(context);
+ return false;
+ }
+ ds_keyboard_set_keymap(ds_input_device_get_keyboard(keyboard->dev),
+ keymap);
+
+ xkb_keymap_unref(keymap);
+ xkb_context_unref(context);
+
+ return true;
+}
+
static void
keyboard_handle_destroy(struct wl_listener *listener, void *data)
{