Import input structs and helper functions from wayland
diff --git a/src/compositor.h b/src/compositor.h
index 93a82b2..36aa44c 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -208,6 +208,238 @@
uint16_t *b);
};
+struct wl_pointer_grab;
+struct wl_pointer_grab_interface {
+ void (*focus)(struct wl_pointer_grab *grab,
+ struct wl_surface *surface,
+ wl_fixed_t x,
+ wl_fixed_t y);
+ void (*motion)(struct wl_pointer_grab *grab,
+ uint32_t time,
+ wl_fixed_t x,
+ wl_fixed_t y);
+ void (*button)(struct wl_pointer_grab *grab,
+ uint32_t time, uint32_t button, uint32_t state);
+};
+
+struct wl_pointer_grab {
+ const struct wl_pointer_grab_interface *interface;
+ struct wl_pointer *pointer;
+ struct wl_surface *focus;
+ wl_fixed_t x, y;
+};
+
+struct wl_keyboard_grab;
+struct wl_keyboard_grab_interface {
+ void (*key)(struct wl_keyboard_grab *grab, uint32_t time,
+ uint32_t key, uint32_t state);
+ void (*modifiers)(struct wl_keyboard_grab *grab, uint32_t serial,
+ uint32_t mods_depressed, uint32_t mods_latched,
+ uint32_t mods_locked, uint32_t group);
+};
+
+struct wl_keyboard_grab {
+ const struct wl_keyboard_grab_interface *interface;
+ struct wl_keyboard *keyboard;
+ struct wl_surface *focus;
+ uint32_t key;
+};
+
+struct wl_touch_grab;
+struct wl_touch_grab_interface {
+ void (*down)(struct wl_touch_grab *grab,
+ uint32_t time,
+ int touch_id,
+ wl_fixed_t sx,
+ wl_fixed_t sy);
+ void (*up)(struct wl_touch_grab *grab,
+ uint32_t time,
+ int touch_id);
+ void (*motion)(struct wl_touch_grab *grab,
+ uint32_t time,
+ int touch_id,
+ wl_fixed_t sx,
+ wl_fixed_t sy);
+};
+
+struct wl_touch_grab {
+ const struct wl_touch_grab_interface *interface;
+ struct wl_touch *touch;
+ struct wl_surface *focus;
+};
+
+struct wl_data_offer {
+ struct wl_resource resource;
+ struct wl_data_source *source;
+ struct wl_listener source_destroy_listener;
+};
+
+struct wl_data_source {
+ struct wl_resource resource;
+ struct wl_array mime_types;
+
+ void (*accept)(struct wl_data_source *source,
+ uint32_t serial, const char *mime_type);
+ void (*send)(struct wl_data_source *source,
+ const char *mime_type, int32_t fd);
+ void (*cancel)(struct wl_data_source *source);
+};
+
+struct wl_pointer {
+ struct wl_seat *seat;
+
+ struct wl_list resource_list;
+ struct wl_surface *focus;
+ struct wl_resource *focus_resource;
+ struct wl_listener focus_listener;
+ uint32_t focus_serial;
+ struct wl_signal focus_signal;
+
+ struct wl_pointer_grab *grab;
+ struct wl_pointer_grab default_grab;
+ wl_fixed_t grab_x, grab_y;
+ uint32_t grab_button;
+ uint32_t grab_serial;
+ uint32_t grab_time;
+
+ wl_fixed_t x, y;
+ struct wl_surface *current;
+ struct wl_listener current_listener;
+ wl_fixed_t current_x, current_y;
+
+ uint32_t button_count;
+};
+
+struct wl_keyboard {
+ struct wl_seat *seat;
+
+ struct wl_list resource_list;
+ struct wl_surface *focus;
+ struct wl_resource *focus_resource;
+ struct wl_listener focus_listener;
+ uint32_t focus_serial;
+ struct wl_signal focus_signal;
+
+ struct wl_keyboard_grab *grab;
+ struct wl_keyboard_grab default_grab;
+ uint32_t grab_key;
+ uint32_t grab_serial;
+ uint32_t grab_time;
+
+ struct wl_array keys;
+
+ struct {
+ uint32_t mods_depressed;
+ uint32_t mods_latched;
+ uint32_t mods_locked;
+ uint32_t group;
+ } modifiers;
+};
+
+struct wl_touch {
+ struct wl_seat *seat;
+
+ struct wl_list resource_list;
+ struct wl_surface *focus;
+ struct wl_resource *focus_resource;
+ struct wl_listener focus_listener;
+ uint32_t focus_serial;
+ struct wl_signal focus_signal;
+
+ struct wl_touch_grab *grab;
+ struct wl_touch_grab default_grab;
+ wl_fixed_t grab_x, grab_y;
+ uint32_t grab_serial;
+ uint32_t grab_time;
+};
+
+struct wl_seat {
+ struct wl_list base_resource_list;
+ struct wl_signal destroy_signal;
+
+ struct wl_pointer *pointer;
+ struct wl_keyboard *keyboard;
+ struct wl_touch *touch;
+
+ uint32_t selection_serial;
+ struct wl_data_source *selection_data_source;
+ struct wl_listener selection_data_source_listener;
+ struct wl_signal selection_signal;
+
+ struct wl_list drag_resource_list;
+ struct wl_client *drag_client;
+ struct wl_data_source *drag_data_source;
+ struct wl_listener drag_data_source_listener;
+ struct wl_surface *drag_focus;
+ struct wl_resource *drag_focus_resource;
+ struct wl_listener drag_focus_listener;
+ struct wl_pointer_grab drag_grab;
+ struct wl_surface *drag_surface;
+ struct wl_listener drag_icon_listener;
+ struct wl_signal drag_icon_signal;
+};
+
+void
+wl_seat_init(struct wl_seat *seat);
+
+void
+wl_seat_release(struct wl_seat *seat);
+
+void
+wl_seat_set_pointer(struct wl_seat *seat, struct wl_pointer *pointer);
+void
+wl_seat_set_keyboard(struct wl_seat *seat, struct wl_keyboard *keyboard);
+void
+wl_seat_set_touch(struct wl_seat *seat, struct wl_touch *touch);
+
+void
+wl_pointer_init(struct wl_pointer *pointer);
+void
+wl_pointer_release(struct wl_pointer *pointer);
+void
+wl_pointer_set_focus(struct wl_pointer *pointer, struct wl_surface *surface,
+ wl_fixed_t sx, wl_fixed_t sy);
+void
+wl_pointer_start_grab(struct wl_pointer *pointer,
+ struct wl_pointer_grab *grab);
+void
+wl_pointer_end_grab(struct wl_pointer *pointer);
+void
+wl_pointer_set_current(struct wl_pointer *pointer, struct wl_surface *surface);
+
+void
+wl_keyboard_init(struct wl_keyboard *keyboard);
+void
+wl_keyboard_release(struct wl_keyboard *keyboard);
+void
+wl_keyboard_set_focus(struct wl_keyboard *keyboard, struct wl_surface *surface);
+void
+wl_keyboard_start_grab(struct wl_keyboard *device,
+ struct wl_keyboard_grab *grab);
+void
+wl_keyboard_end_grab(struct wl_keyboard *keyboard);
+
+void
+wl_touch_init(struct wl_touch *touch);
+void
+wl_touch_release(struct wl_touch *touch);
+void
+wl_touch_start_grab(struct wl_touch *device,
+ struct wl_touch_grab *grab);
+void
+wl_touch_end_grab(struct wl_touch *touch);
+
+void
+wl_data_device_set_keyboard_focus(struct wl_seat *seat);
+
+int
+wl_data_device_manager_init(struct wl_display *display);
+
+
+void
+wl_seat_set_selection(struct wl_seat *seat,
+ struct wl_data_source *source, uint32_t serial);
+
struct weston_xkb_info {
struct xkb_keymap *keymap;
int keymap_fd;