diff options
| -rw-r--r-- | examples/shared.c | 42 | ||||
| -rw-r--r-- | examples/shared.h | 3 | ||||
| -rw-r--r-- | rootston/keyboard.c | 5 | 
3 files changed, 8 insertions, 42 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;  }; diff --git a/rootston/keyboard.c b/rootston/keyboard.c index c4c98c91..003aab98 100644 --- a/rootston/keyboard.c +++ b/rootston/keyboard.c @@ -59,9 +59,8 @@ void keyboard_add(struct wlr_input_device *device, struct roots_input *input) {  	rules.options = getenv("XKB_DEFAULT_OPTIONS");  	struct xkb_context *context;  	assert(context = xkb_context_new(XKB_CONTEXT_NO_FLAGS)); -	wlr_keyboard_set_keymap(device->keyboard, -			xkb_map_new_from_names(context, &rules, -				XKB_KEYMAP_COMPILE_NO_FLAGS)); +	wlr_keyboard_set_keymap(device->keyboard, xkb_map_new_from_names(context, +				&rules, XKB_KEYMAP_COMPILE_NO_FLAGS));  	xkb_context_unref(context);  	wlr_seat_attach_keyboard(input->wl_seat, device);  } | 
