wlroots-hyprland/backend/wayland/backend.c

50 lines
1.3 KiB
C
Raw Normal View History

2017-04-25 17:32:52 +02:00
#include <stdlib.h>
#include <stdint.h>
#include <wayland-server.h>
#include <assert.h>
2017-04-25 17:32:52 +02:00
#include "backend/wayland.h"
#include "common/log.h"
2017-04-25 17:32:52 +02:00
void wlr_wl_backend_free(struct wlr_wl_backend *backend) {
if (!backend) {
return;
}
// TODO: free more shit
free(backend);
}
/*
* Initializes the wayland backend. Opens a connection to a remote wayland
* compositor and creates surfaces for each output, then registers globals on
* the specified display.
*/
struct wlr_wl_backend *wlr_wl_backend_init(
struct wl_display *display, size_t outputs) {
assert(display);
struct wlr_wl_backend *backend;
if (!(backend = calloc(sizeof(struct wlr_wl_backend), 1))) {
wlr_log(L_ERROR, "Could not allocate backend");
goto error;
}
if (!(backend->outputs = list_create())) {
wlr_log(L_ERROR, "Could not allocate output list");
goto error;
}
2017-04-25 17:32:52 +02:00
backend->local_display = display;
backend->remote_display = wl_display_connect(getenv("_WAYLAND_DISPLAY"));
if (!backend->remote_display) {
wlr_log(L_ERROR, "Could not connect to remote display");
goto error;
}
if (!(backend->remote_registry = wl_display_get_registry(
backend->remote_display))) {
wlr_log(L_ERROR, "Could not obtain reference to remote registry");
goto error;
}
wlr_wlb_registry_poll(backend);
2017-04-25 17:32:52 +02:00
return backend;
error:
wlr_wl_backend_free(backend);
return NULL;
2017-04-25 17:32:52 +02:00
}