diff options
author | Sergey Bugaev <bugaevc@gmail.com> | 2019-09-12 17:15:47 +0300 |
---|---|---|
committer | Sergey Bugaev <bugaevc@gmail.com> | 2019-09-16 01:26:19 +0300 |
commit | a2fd1910fb7bce08e1544fed728eb407ef13b336 (patch) | |
tree | 5022238e81129b2f51c31392d0456a6b0dd31a58 | |
parent | dc6d39cce472d37b92cabd6042241957f5402111 (diff) |
Move keyboard handling to types/keyboard
-rw-r--r-- | src/boilerplate.c | 67 | ||||
-rw-r--r-- | src/meson.build | 2 | ||||
-rw-r--r-- | src/types/keyboard.c | 82 | ||||
-rw-r--r-- | src/types/keyboard.h | 34 |
4 files changed, 126 insertions, 59 deletions
diff --git a/src/boilerplate.c b/src/boilerplate.c index abbe81a..33bbf48 100644 --- a/src/boilerplate.c +++ b/src/boilerplate.c @@ -17,6 +17,7 @@ */ #include "boilerplate.h" +#include "types/keyboard.h" static void process_new_seat(struct wl_seat *new_seat); @@ -119,26 +120,8 @@ static const struct wl_registry_listener registry_listener = { .global_remove = registry_global_remove_handler }; -static void keyboard_keymap_handler -( - void *data, - struct wl_keyboard *keyboard, - uint32_t format, - int fd, - uint32_t size -) { - close(fd); -} - -static void keyboard_enter_handler -( - void *data, - struct wl_keyboard *keyboard, - uint32_t serial, - struct wl_surface *surface, - struct wl_array *keys -) { - struct wl_seat *this_seat = (struct wl_seat *) data; +static void forward_on_focus(struct keyboard *keyboard, uint32_t serial) { + struct wl_seat *this_seat = (struct wl_seat *) keyboard->data; /* When we get to here, global seat is already initialized */ if (this_seat != seat) { return; @@ -148,43 +131,6 @@ static void keyboard_enter_handler } } -static void keyboard_leave_handler -( - void *data, - struct wl_keyboard *keyboard, - uint32_t serial, - struct wl_surface *surface -) {} - -static void keyboard_key_handler -( - void *data, - struct wl_keyboard *keyboard, - uint32_t serial, - uint32_t time, - uint32_t key, - uint32_t state -) {} - -static void keyboard_modifiers_handler -( - void *data, - struct wl_keyboard *keyboard, - uint32_t serial, - uint32_t mods_depressed, - uint32_t mods_latched, - uint32_t mods_locked, - uint32_t group -) {} - -static const struct wl_keyboard_listener keayboard_listener = { - .keymap = keyboard_keymap_handler, - .enter = keyboard_enter_handler, - .leave = keyboard_leave_handler, - .key = keyboard_key_handler, - .modifiers = keyboard_modifiers_handler, -}; - static void seat_capabilities_handler ( void *data, @@ -196,8 +142,11 @@ static void seat_capabilities_handler wl_seat_set_user_data(this_seat, user_data); if (capabilities & WL_SEAT_CAPABILITY_KEYBOARD) { - struct wl_keyboard *keyboard = wl_seat_get_keyboard(this_seat); - wl_keyboard_add_listener(keyboard, &keayboard_listener, this_seat); + struct keyboard *keyboard = calloc(1, sizeof(struct keyboard)); + keyboard->proxy = wl_seat_get_keyboard(this_seat); + keyboard->data = (void *) this_seat; + keyboard->on_focus = forward_on_focus; + keyboard_init(keyboard); } } diff --git a/src/meson.build b/src/meson.build index 2911726..04f5ec2 100644 --- a/src/meson.build +++ b/src/meson.build @@ -108,6 +108,8 @@ lib = static_library( 'types/device.c', 'types/device-manager.h', 'types/device-manager.c', + 'types/keyboard.h', + 'types/keyboard.c', ], dependencies: wayland, link_with: protocol_deps diff --git a/src/types/keyboard.c b/src/types/keyboard.c new file mode 100644 index 0000000..99ca793 --- /dev/null +++ b/src/types/keyboard.c @@ -0,0 +1,82 @@ +/* wl-clipboard + * + * Copyright © 2019 Sergey Bugaev <bugaevc@gmail.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "types/keyboard.h" + +#include <unistd.h> + +static void wl_keyboard_keymap_handler( + void *data, + struct wl_keyboard *keyboard, + uint32_t format, + int fd, + uint32_t size +) { + close(fd); +} + +static void wl_keyboard_enter_handler( + void *data, + struct wl_keyboard *keyboard, + uint32_t serial, + struct wl_surface *surface, + struct wl_array *keys +) { + struct keyboard *self = (struct keyboard *) data; + if (self->on_focus != NULL) { + self->on_focus(self, serial); + } +} + +static void wl_keyboard_leave_handler( + void *data, + struct wl_keyboard *keyboard, + uint32_t serial, + struct wl_surface *surface +) {} + +static void wl_keyboard_key_handler( + void *data, + struct wl_keyboard *keyboard, + uint32_t serial, + uint32_t time, + uint32_t key, + uint32_t state +) {} + +static void wl_keyboard_modifiers_handler( + void *data, + struct wl_keyboard *keyboard, + uint32_t serial, + uint32_t mods_depressed, + uint32_t mods_latched, + uint32_t mods_locked, + uint32_t group +) {} + +static const struct wl_keyboard_listener wl_keyboard_listener = { + .keymap = wl_keyboard_keymap_handler, + .enter = wl_keyboard_enter_handler, + .leave = wl_keyboard_leave_handler, + .key = wl_keyboard_key_handler, + .modifiers = wl_keyboard_modifiers_handler, +}; + +void keyboard_init(struct keyboard *self) { + wl_keyboard_add_listener(self->proxy, &wl_keyboard_listener, self); +} diff --git a/src/types/keyboard.h b/src/types/keyboard.h new file mode 100644 index 0000000..e5f02d0 --- /dev/null +++ b/src/types/keyboard.h @@ -0,0 +1,34 @@ +/* wl-clipboard + * + * Copyright © 2019 Sergey Bugaev <bugaevc@gmail.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TYPES_KEYBOARD_H +#define TYPES_KEYBOARD_H + +#include <stdint.h> +#include <wayland-client.h> + +struct keyboard { + /* These fields are initialized by the creator */ + struct wl_keyboard *proxy; + void (*on_focus)(struct keyboard *self, uint32_t serial); + void *data; +}; + +void keyboard_init(struct keyboard *self); + +#endif /* TYPES_KEYBOARD_H */ |