summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Bugaev <bugaevc@gmail.com>2019-09-12 17:15:47 +0300
committerSergey Bugaev <bugaevc@gmail.com>2019-09-16 01:26:19 +0300
commita2fd1910fb7bce08e1544fed728eb407ef13b336 (patch)
tree5022238e81129b2f51c31392d0456a6b0dd31a58
parentdc6d39cce472d37b92cabd6042241957f5402111 (diff)
Move keyboard handling to types/keyboard
-rw-r--r--src/boilerplate.c67
-rw-r--r--src/meson.build2
-rw-r--r--src/types/keyboard.c82
-rw-r--r--src/types/keyboard.h34
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 */