5 void registry_listener_callback(void* data, struct wl_registry* registry, uint32_t id, const char* interface, uint32_t version)
7 if (0 == strcmp(interface, "wl_compositor"))
9 wl_compositor** compositor = reinterpret_cast<wl_compositor**>(data);
10 *compositor = reinterpret_cast<wl_compositor*>(wl_registry_bind(registry, id, &wl_compositor_interface, 1));
18 wlDisplay = wl_display_connect(NULL);
21 throw std::runtime_error("could not connect to wayland display");
23 wlRegistry = wl_display_get_registry(wlDisplay);
25 static const struct wl_registry_listener registry_listener = {
26 registry_listener_callback,
30 wl_registry_add_listener(wlRegistry, ®istry_listener, &wlCompositor);
32 if (wl_display_roundtrip(wlDisplay) == -1 || wl_display_roundtrip(wlDisplay) == -1)
34 throw std::runtime_error("wl_display error");
37 wlSurfaces.reserve(10);
38 for (int i = 0; i < wlSurfaces.capacity(); ++i)
40 wlSurfaces.push_back(wl_compositor_create_surface(wlCompositor));
46 for (std::vector<wl_surface *>::reverse_iterator it = wlSurfaces.rbegin();
47 it != wlSurfaces.rend();
50 wl_surface_destroy(*it);
53 wl_compositor_destroy(wlCompositor);
54 wl_registry_destroy(wlRegistry);
55 wl_display_disconnect(wlDisplay);