1 #define _POSIX_C_SOURCE 200809L
4 #include <wayland-server.h>
7 #include "libds/interfaces/input_device.h"
8 #include "libds/interfaces/pointer.h"
9 #include "libds/interfaces/keyboard.h"
10 #include "libds/interfaces/touch.h"
12 WL_EXPORT enum ds_input_device_type
13 ds_input_device_get_type(struct ds_input_device *dev)
18 WL_EXPORT struct ds_pointer *
19 ds_input_device_get_pointer(struct ds_input_device *dev)
21 if (dev->type != DS_INPUT_DEVICE_POINTER) {
22 ds_err("Given ds_input_device is not a pointer device");
29 WL_EXPORT struct ds_keyboard *
30 ds_input_device_get_keyboard(struct ds_input_device *dev)
32 if (dev->type != DS_INPUT_DEVICE_KEYBOARD) {
33 ds_err("Given ds_input_device is not a keyboard device");
40 WL_EXPORT struct ds_touch *
41 ds_input_device_get_touch(struct ds_input_device *dev)
43 if (dev->type != DS_INPUT_DEVICE_TOUCH) {
44 ds_err("Given ds_input_device is not a touch device");
52 ds_input_device_add_destroy_listener(struct ds_input_device *dev,
53 struct wl_listener *listener)
55 wl_signal_add(&dev->events.destroy, listener);
59 ds_input_device_init(struct ds_input_device *dev,
60 enum ds_input_device_type type,
61 const struct ds_input_device_interface *iface,
62 const char *name, int vendor, int product)
66 dev->name = strdup(name);
68 wl_signal_init(&dev->events.destroy);
72 ds_input_device_destroy(struct ds_input_device *dev)
74 wl_signal_emit(&dev->events.destroy, dev);
78 case DS_INPUT_DEVICE_POINTER:
79 ds_pointer_destroy(dev->pointer);
81 case DS_INPUT_DEVICE_KEYBOARD:
82 ds_keyboard_destroy(dev->keyboard);
85 ds_err("Warning: leaking memory %p %p %d",
86 dev->_device, dev, dev->type);
92 if (dev->iface && dev->iface->destroy)
93 dev->iface->destroy(dev);