pool = wl_shm_create_pool(inter->shm, fd, size);
buf = wl_shm_pool_create_buffer(pool, 0, width, height, stride,
inter->shm_format);
+ wl_buffer_add_listener(buf, &buffer_listener, inter);
wl_surface_attach(inter->wl_surf, buf, 0, 0);
wl_surface_damage(inter->wl_surf, 0, 0, width, height);
else
wl_keyboard_destroy(seat->wl_kbd);
- if (seat->state)
- xkb_state_unref(seat->state);
- if (seat->keymap)
- xkb_keymap_unref(seat->keymap);
+ xkb_state_unref(seat->state);
+ xkb_keymap_unref(seat->keymap);
seat->state = NULL;
seat->keymap = NULL;
wl_seat_add_listener(seat->wl_seat, &seat_listener, seat);
asprintf(&seat->name_str, "seat:%d",
wl_proxy_get_id((struct wl_proxy *) seat->wl_seat));
+ wl_list_insert(&inter->seats, &seat->link);
}
static void
else
wl_keyboard_destroy(seat->wl_kbd);
- if (seat->state)
- xkb_state_unref(seat->state);
- if (seat->keymap)
- xkb_keymap_unref(seat->keymap);
+ xkb_state_unref(seat->state);
+ xkb_keymap_unref(seat->keymap);
+ }
+
+ if (seat->wl_pointer) {
+ if (seat->version >= WL_SEAT_RELEASE_SINCE_VERSION)
+ wl_pointer_release(seat->wl_pointer);
+ else
+ wl_pointer_destroy(seat->wl_pointer);
}
if (seat->version >= WL_SEAT_RELEASE_SINCE_VERSION)
else
wl_seat_destroy(seat->wl_seat);
+ free(seat->name_str);
wl_list_remove(&seat->link);
free(seat);
}
wl_surface_destroy(inter->wl_surf);
if (inter->shell)
xdg_shell_destroy(inter->shell);
+ if (inter->compositor)
+ wl_compositor_destroy(inter->compositor);
+ if (inter->shm)
+ wl_shm_destroy(inter->shm);
+
+ /* Do one last roundtrip to try to destroy our wl_buffer. */
+ wl_display_roundtrip(inter->dpy);
xkb_context_unref(inter->ctx);
wl_display_disconnect(inter->dpy);
} while (ret >= 0 && !terminate);
(void) system("stty echo");
+ wl_registry_destroy(registry);
+
err_conn:
dpy_disconnect(&inter);
err_out: