diff options
-rw-r--r-- | src/surface/wld.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/surface/wld.c b/src/surface/wld.c index 198c15f..7843639 100644 --- a/src/surface/wld.c +++ b/src/surface/wld.c @@ -20,6 +20,7 @@ #include <fcntl.h> #include <sys/mman.h> +#include <linux/input.h> #include <wayland-client.h> #include "libnsfb.h" @@ -968,6 +969,39 @@ static void pointer_handle_button(void *data, struct wl_pointer *pointer, uint32_t serial, uint32_t time, uint32_t button, uint32_t state_w) { + struct wld_input *input = data; + struct wld_event *event; + enum wl_pointer_button_state state = state_w; + + event = calloc(1, sizeof(struct wld_event)); + + if (state == WL_POINTER_BUTTON_STATE_PRESSED) { + event->event.type = NSFB_EVENT_KEY_DOWN; + } else { + event->event.type = NSFB_EVENT_KEY_UP; + } + + switch (button) { + case BTN_LEFT: + event->event.value.keycode = NSFB_KEY_MOUSE_1; + break; + case BTN_MIDDLE: + event->event.value.keycode = NSFB_KEY_MOUSE_2; + break; + case BTN_RIGHT: + event->event.value.keycode = NSFB_KEY_MOUSE_3; + break; + case BTN_FORWARD: + event->event.value.keycode = NSFB_KEY_MOUSE_4; + break; + case BTN_BACK: + event->event.value.keycode = NSFB_KEY_MOUSE_5; + break; + } + + enqueue_wld_event(input->connection, event); + + #if 0 struct input *input = data; struct widget *widget; |