From: Seunghun Lee Date: Mon, 18 Apr 2022 01:35:14 +0000 (+0900) Subject: examples: Rename pointer-test to input-device-test X-Git-Tag: accepted/tizen/unified/20220720.034120~79 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=915e07cfe68eac5a6d61422d777560dcac25780f;p=platform%2Fcore%2Fuifw%2Flibds-tizen.git examples: Rename pointer-test to input-device-test This patch also adds code for ds_keyboard in input-device-test. Change-Id: I39b92b87aff0f0f701afc1d4ac4e8674f3217715 --- diff --git a/src/examples/pointer-test.c b/src/examples/input-device-test.c similarity index 70% rename from src/examples/pointer-test.c rename to src/examples/input-device-test.c index d669a03..237d0b5 100644 --- a/src/examples/pointer-test.c +++ b/src/examples/input-device-test.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -24,6 +25,17 @@ struct pointer_device { struct wl_listener frame; }; +struct server; + +struct keyboard_device { + struct server *server; + struct ds_keyboard *ds_keyboard; + + struct wl_listener destroy; + struct wl_listener modifiers; + struct wl_listener key; +}; + struct output { struct server *server; @@ -202,20 +214,101 @@ add_pointer(struct ds_input_device *dev) } static void +keyboard_handle_device_destroy(struct wl_listener *listener, void *data) +{ + struct keyboard_device *keyboard; + + keyboard = wl_container_of(listener, keyboard, destroy); + + wl_list_remove(&keyboard->destroy.link); + wl_list_remove(&keyboard->modifiers.link); + wl_list_remove(&keyboard->key.link); + + free(keyboard); +} + +static void +keyboard_handle_modifiers(struct wl_listener *listener, void *data) +{ + struct keyboard_device *keyboard; + struct ds_keyboard *ds_keyboard = data; + + keyboard = wl_container_of(listener, keyboard, destroy); + + ds_inf("Keyboard(%p) event modifiers", ds_keyboard); +} + +static void +keyboard_handle_key(struct wl_listener *listener, void *data) +{ + struct ds_event_keyboard_key *event = data; + struct keyboard_device *keyboard; + struct xkb_state *xkb_state; + const xkb_keysym_t *syms; + int nsyms = 0; + + keyboard = wl_container_of(listener, keyboard, key); + + ds_inf("Keyboard(%p) event key: keycode(%d), state(%d), time_msec(%d), " + "update_state(%d)", keyboard->ds_keyboard, + event->keycode, event->state, event->time_msec, + event->update_state); + + xkb_state = ds_keyboard_get_xkb_state(keyboard->ds_keyboard); + if (!xkb_state) + return; + + nsyms = xkb_state_key_get_syms(xkb_state, event->keycode + 8, &syms); + + for (int i = 0; i < nsyms; i++) { + if (syms[i] == XKB_KEY_Escape) + wl_display_terminate(keyboard->server->display); + } +} + +static void +add_keyboard(struct server *server, struct ds_input_device *dev) +{ + struct keyboard_device *keyboard; + + keyboard = calloc(1, sizeof *keyboard); + if (!keyboard) + return; + + keyboard->server = server; + keyboard->ds_keyboard = ds_input_device_get_keyboard(dev); + + ds_inf("Keyboard(%p) added", keyboard->ds_keyboard); + + keyboard->destroy.notify = keyboard_handle_device_destroy; + ds_input_device_add_destroy_listener(dev, &keyboard->destroy); + + keyboard->modifiers.notify = keyboard_handle_modifiers; + ds_keyboard_add_modifiers_listener(keyboard->ds_keyboard, + &keyboard->modifiers); + + keyboard->key.notify = keyboard_handle_key; + ds_keyboard_add_key_listener(keyboard->ds_keyboard, + &keyboard->key); +} + +static void handle_new_input(struct wl_listener *listener, void *data) { + struct server *server; struct ds_input_device *dev = data; enum ds_input_device_type type; type = ds_input_device_get_type(dev); - if (type != DS_INPUT_DEVICE_POINTER) - return; + ds_inf("New device(%p) type(%s)", dev, device_type_to_string(type)); - ds_inf("New pointer device(%p) type(%s)", dev, - device_type_to_string(type)); - - add_pointer(dev); + if (type == DS_INPUT_DEVICE_POINTER) + add_pointer(dev); + else if (type == DS_INPUT_DEVICE_KEYBOARD) { + server = wl_container_of(listener, server, new_input); + add_keyboard(server, dev); + } } static void diff --git a/src/examples/meson.build b/src/examples/meson.build index f19f139..c568eb6 100644 --- a/src/examples/meson.build +++ b/src/examples/meson.build @@ -23,9 +23,9 @@ executable('tinyds', install : true ) -executable('pointer-test', +executable('input-device-test', [ - 'pointer-test.c', + 'input-device-test.c', 'pixman-helper.c', ], dependencies: common_deps,