+ .create_pool = shm_create_pool,
+};
+
+/**************************
+ * Wayland Seat Interface *
+ **************************/
+
+/* Pointer */
+static struct wl_pointer_interface pointer_iface = {
+ .set_cursor = NULL,
+ .release = NULL,
+};
+
+/* Keyboard */
+static struct wl_keyboard_interface keyboard_iface = {
+ .release = NULL,
+};
+
+/* Touch */
+static struct wl_touch_interface touch_iface = {
+ .release = NULL,
+};
+
+/* Seat */
+static void seat_get_pointer(struct wl_client *cli, struct wl_resource *seat, uint32_t id) {
+ printf("seat_get_pointer\n");
+ struct wl_resource *res = wl_resource_create(cli, &wl_pointer_interface, 3, id);
+ wl_resource_set_implementation(res, &pointer_iface, NULL, NULL);
+}
+
+static void seat_get_keyboard(struct wl_client *cli, struct wl_resource *seat, uint32_t id) {
+ printf("seat_get_keyboard\n");
+ struct wl_resource *res = wl_resource_create(cli, &wl_keyboard_interface, 3, id);
+ wl_resource_set_implementation(res, &keyboard_iface, NULL, NULL);
+}
+
+static void seat_get_touch(struct wl_client *cli, struct wl_resource *seat, uint32_t id) {
+ printf("seat_get_touch\n");
+ struct wl_resource *res = wl_resource_create(cli, &wl_touch_interface, 3, id);
+ wl_resource_set_implementation(res, &touch_iface, NULL, NULL);
+}
+
+static struct wl_seat_interface seat_iface = {
+ .get_pointer = &seat_get_pointer,
+ .get_keyboard = &seat_get_keyboard,
+ .get_touch = &seat_get_touch,
+};
+
+/*****************************************
+ * Wayland Data Device Manager Interface *
+ *****************************************/
+
+/* Data Offer */
+static struct wl_data_offer_interface doff_iface = {
+ .accept = NULL,
+ .receive = NULL,
+ .destroy = NULL,
+};
+
+/* Data Source */
+static struct wl_data_source_interface dsrc_iface = {
+ .offer = NULL,
+ .destroy = NULL,
+};
+
+/* Data Device */
+static struct wl_data_device_interface ddev_iface = {
+ .start_drag = NULL,
+ .set_selection = NULL,
+};
+
+/* Data Device Manager */
+static void ddm_create_data_source(struct wl_client *cli, struct wl_resource *ddm, uint32_t id)
+{
+ printf("ddm_create_data_source\n");
+ struct wl_resource *res = wl_resource_create(cli, &wl_data_device_interface, 1, id);
+ wl_resource_set_implementation(res, &dsrc_iface, NULL, NULL);
+}
+
+static void ddm_get_data_device(struct wl_client *cli, struct wl_resource *ddm, uint32_t id,
+ struct wl_resource *seat)
+{
+ printf("ddm_get_data_device\n");
+ struct wl_resource *res = wl_resource_create(cli, &wl_data_device_interface, 1, id);
+ wl_resource_set_implementation(res, &ddev_iface, NULL, NULL);
+}
+
+static struct wl_data_device_manager_interface ddm_iface = {
+ .create_data_source = &ddm_create_data_source,
+ .get_data_device = &ddm_get_data_device,
+};
+
+/**************************************
+ * Wayland Shell/Compositor Interface *
+ **************************************/
+
+/* Surface */
+static void surface_destroy(struct wl_client *cli, struct wl_resource *res)
+{
+}
+
+static void surface_attach(struct wl_client *cli, struct wl_resource *res, struct wl_resource *buf,
+ int32_t x, int32_t y)
+{
+}
+
+static void surface_damage(struct wl_client *cli, struct wl_resource *res,
+ int32_t x, int32_t y, int32_t width, int32_t height)
+{
+}
+
+static void surface_frame(struct wl_client *cli, struct wl_resource *res, uint32_t id)
+{
+}
+
+static void surface_set_opaque_region(struct wl_client *cli, struct wl_resource *res, struct wl_resource *reg)
+{
+}
+
+static void surface_set_input_region(struct wl_client *cli, struct wl_resource *res, struct wl_resource *reg)
+{
+}
+
+static void surface_commit(struct wl_client *cli, struct wl_resource *res)
+{
+}
+
+static void surface_set_buffer_transform(struct wl_client *cli, struct wl_resource *res, int32_t transform)
+{
+}
+
+static void surface_set_buffer_scale(struct wl_client *cli, struct wl_resource *res, int32_t scale)
+{
+}
+
+static struct wl_surface_interface surface_iface = {
+ .destroy = surface_destroy,
+ .attach = surface_attach,
+ .damage = surface_damage,
+ .frame = surface_frame,
+ .set_opaque_region = surface_set_opaque_region,
+ .set_input_region = surface_set_input_region,
+ .commit = surface_commit,
+ .set_buffer_transform = surface_set_buffer_transform,
+ .set_buffer_scale = surface_set_buffer_scale,
+};
+
+/* Region */
+static void region_destroy(struct wl_client *cli, struct wl_resource *res)
+{
+}
+
+static void region_add(struct wl_client *cli, struct wl_resource *res,
+ int32_t x, int32_t y, int32_t width, int32_t height)
+{
+}
+
+static void region_subtract(struct wl_client *cli, struct wl_resource *res,
+ int32_t x, int32_t y, int32_t width, int32_t height)
+{
+}
+
+static struct wl_region_interface region_iface = {
+ .destroy = region_destroy,
+ .add = region_add,
+ .subtract = region_subtract,
+};
+
+/* Buffer */
+static struct wl_buffer_interface buffer_iface = {
+ .destroy = NULL,
+};
+
+/* Compositor */
+static void comp_create_surface(struct wl_client *cli, struct wl_resource *comp, uint32_t id)
+{
+ printf("comp_create_surface\n");
+ struct wl_resource *res = wl_resource_create(cli, &wl_surface_interface, 3, id);
+ wl_resource_set_implementation(res, &surface_iface, NULL, NULL);
+}
+
+static void comp_create_region(struct wl_client *cli, struct wl_resource *comp, uint32_t id)
+{
+ printf("comp_create_region\n");
+ struct wl_resource *res = wl_resource_create(cli, &wl_region_interface, 1, id);
+ wl_resource_set_implementation(res, ®ion_iface, NULL, NULL);
+}
+
+static struct wl_compositor_interface comp_iface = {
+ .create_surface = comp_create_surface,
+ .create_region = comp_create_region,