aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2017-10-01 11:35:22 -0400
committerDrew DeVault <sir@cmpwn.com>2017-10-01 11:35:22 -0400
commitaa8a4f12b7e7ea8c3a1876f0585dd6171f8cb705 (patch)
tree7967892271c06b6316790ed8b30f1e788c899930 /examples
parent6241ac41d58642db60bedd8f47e9de7f006e7150 (diff)
Fix keyboard handling in examples
Diffstat (limited to 'examples')
-rw-r--r--examples/shared.c42
-rw-r--r--examples/shared.h3
2 files changed, 6 insertions, 39 deletions
diff --git a/examples/shared.c b/examples/shared.c
index 3fa7cd05..bb1d2737 100644
--- a/examples/shared.c
+++ b/examples/shared.c
@@ -1,4 +1,5 @@
#define _POSIX_C_SOURCE 200112L
+#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
@@ -18,27 +19,15 @@
#include <wlr/util/log.h>
#include "shared.h"
-
-static void keyboard_led_update(struct keyboard_state *kbstate) {
- uint32_t leds = 0;
- for (uint32_t i = 0; i < WLR_LED_LAST; ++i) {
- if (xkb_state_led_index_is_active(kbstate->xkb_state, kbstate->leds[i])) {
- leds |= (1 << i);
- }
- }
- wlr_keyboard_led_update(kbstate->device->keyboard, leds);
-}
-
static void keyboard_key_notify(struct wl_listener *listener, void *data) {
struct wlr_event_keyboard_key *event = data;
struct keyboard_state *kbstate = wl_container_of(listener, kbstate, key);
uint32_t keycode = event->keycode + 8;
enum wlr_key_state key_state = event->state;
const xkb_keysym_t *syms;
- int nsyms = xkb_state_key_get_syms(kbstate->xkb_state, keycode, &syms);
- xkb_state_update_key(kbstate->xkb_state, keycode,
- event->state == WLR_KEY_PRESSED ? XKB_KEY_DOWN : XKB_KEY_UP);
- keyboard_led_update(kbstate);
+ int nsyms = xkb_state_key_get_syms(kbstate->device->keyboard->xkb_state,
+ keycode, &syms);
+
for (int i = 0; i < nsyms; ++i) {
xkb_keysym_t sym = syms[i];
char name[64];
@@ -88,26 +77,9 @@ static void keyboard_add(struct wlr_input_device *device, struct compositor_stat
wlr_log(L_ERROR, "Failed to create XKB context");
exit(1);
}
- kbstate->keymap = xkb_map_new_from_names(
- context, &rules, XKB_KEYMAP_COMPILE_NO_FLAGS);
- if (!kbstate->keymap) {
- wlr_log(L_ERROR, "Failed to create XKB keymap");
- exit(1);
- }
+ wlr_keyboard_set_keymap(device->keyboard, xkb_map_new_from_names(context,
+ &rules, XKB_KEYMAP_COMPILE_NO_FLAGS));
xkb_context_unref(context);
- kbstate->xkb_state = xkb_state_new(kbstate->keymap);
- if (!kbstate->xkb_state) {
- wlr_log(L_ERROR, "Failed to create XKB state");
- exit(1);
- }
- const char *led_names[3] = {
- XKB_LED_NAME_NUM,
- XKB_LED_NAME_CAPS,
- XKB_LED_NAME_SCROLL
- };
- for (uint32_t i = 0; i < 3; ++i) {
- kbstate->leds[i] = xkb_map_led_get_index(kbstate->keymap, led_names[i]);
- }
}
static void pointer_motion_notify(struct wl_listener *listener, void *data) {
@@ -320,8 +292,6 @@ static void keyboard_remove(struct wlr_input_device *device, struct compositor_s
if (!kbstate) {
return;
}
- xkb_state_unref(kbstate->xkb_state);
- xkb_map_unref(kbstate->keymap);
wl_list_remove(&kbstate->link);
wl_list_remove(&kbstate->key.link);
free(kbstate);
diff --git a/examples/shared.h b/examples/shared.h
index f564bffa..cf75f5fe 100644
--- a/examples/shared.h
+++ b/examples/shared.h
@@ -27,9 +27,6 @@ struct keyboard_state {
struct wlr_input_device *device;
struct wl_listener key;
struct wl_list link;
- struct xkb_keymap *keymap;
- struct xkb_state *xkb_state;
- xkb_led_index_t leds[WLR_LED_LAST];
void *data;
};