diff options
33 files changed, 101 insertions, 142 deletions
diff --git a/backend/drm/backend.c b/backend/drm/backend.c index d7e2e616..ab66adf5 100644 --- a/backend/drm/backend.c +++ b/backend/drm/backend.c @@ -11,7 +11,7 @@ #include <wlr/interfaces/wlr_output.h> #include <wlr/util/list.h> #include <wlr/util/log.h> -#include <wlr/egl.h> +#include <wlr/render/egl.h> #include "backend/drm/drm.h" static bool wlr_drm_backend_start(struct wlr_backend *backend) { diff --git a/backend/drm/drm.c b/backend/drm/drm.c index ff4dc7f6..04d7ea77 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -177,9 +177,6 @@ void wlr_drm_resources_free(struct wlr_drm_backend *drm) { if (plane->wlr_tex) { wlr_texture_destroy(plane->wlr_tex); } - if (plane->wlr_rend) { - wlr_renderer_destroy(plane->wlr_rend); - } } free(drm->crtcs); @@ -193,7 +190,7 @@ static void wlr_drm_connector_make_current(struct wlr_output *output) { static void wlr_drm_connector_swap_buffers(struct wlr_output *output) { struct wlr_drm_connector *conn = (struct wlr_drm_connector *)output; - struct wlr_drm_backend *drm = conn->drm; + struct wlr_drm_backend *drm = (struct wlr_drm_backend *)output->backend; struct wlr_drm_crtc *crtc = conn->crtc; struct wlr_drm_plane *plane = crtc->primary; @@ -216,7 +213,8 @@ static void wlr_drm_connector_swap_buffers(struct wlr_output *output) { static void wlr_drm_connector_set_gamma(struct wlr_output *output, uint16_t size, uint16_t *r, uint16_t *g, uint16_t *b) { struct wlr_drm_connector *conn = (struct wlr_drm_connector *)output; - drmModeCrtcSetGamma(conn->drm->fd, conn->crtc->id, size, r, g, b); + struct wlr_drm_backend *drm = (struct wlr_drm_backend *)output->backend; + drmModeCrtcSetGamma(drm->fd, conn->crtc->id, size, r, g, b); } static uint16_t wlr_drm_connector_get_gamma_size(struct wlr_output *output) { @@ -230,7 +228,7 @@ void wlr_drm_connector_start_renderer(struct wlr_drm_connector *conn) { return; } - struct wlr_drm_backend *drm = conn->drm; + struct wlr_drm_backend *drm = (struct wlr_drm_backend *)conn->output.backend; struct wlr_drm_crtc *crtc = conn->crtc; struct wlr_drm_plane *plane = crtc->primary; @@ -253,7 +251,7 @@ static void wlr_drm_connector_enable(struct wlr_output *output, bool enable) { return; } - struct wlr_drm_backend *drm = conn->drm; + struct wlr_drm_backend *drm = (struct wlr_drm_backend *)output->backend; drm->iface->conn_enable(drm, conn, enable); if (enable) { @@ -406,7 +404,7 @@ error_conn: static bool wlr_drm_connector_set_mode(struct wlr_output *output, struct wlr_output_mode *mode) { struct wlr_drm_connector *conn = (struct wlr_drm_connector *)output; - struct wlr_drm_backend *drm = conn->drm; + struct wlr_drm_backend *drm = (struct wlr_drm_backend *)output->backend; wlr_log(L_INFO, "Modesetting '%s' with '%ux%u@%u mHz'", conn->output.name, mode->width, mode->height, mode->refresh); @@ -472,7 +470,7 @@ static bool wlr_drm_connector_set_cursor(struct wlr_output *output, const uint8_t *buf, int32_t stride, uint32_t width, uint32_t height, int32_t hotspot_x, int32_t hotspot_y, bool update_pixels) { struct wlr_drm_connector *conn = (struct wlr_drm_connector *)output; - struct wlr_drm_backend *drm = conn->drm; + struct wlr_drm_backend *drm = (struct wlr_drm_backend *)output->backend; struct wlr_drm_renderer *renderer = &drm->renderer; struct wlr_drm_crtc *crtc = conn->crtc; @@ -525,12 +523,7 @@ static bool wlr_drm_connector_set_cursor(struct wlr_output *output, // TODO the image needs to be rotated depending on the output rotation - plane->wlr_rend = wlr_gles2_renderer_create(&drm->backend); - if (!plane->wlr_rend) { - return false; - } - - plane->wlr_tex = wlr_render_texture_create(plane->wlr_rend); + plane->wlr_tex = wlr_render_texture_create(plane->surf.renderer->wlr_rend); if (!plane->wlr_tex) { return false; } @@ -595,7 +588,7 @@ static bool wlr_drm_connector_set_cursor(struct wlr_output *output, float matrix[16]; wlr_texture_get_matrix(plane->wlr_tex, &matrix, &plane->matrix, 0, 0); - wlr_render_with_matrix(plane->wlr_rend, plane->wlr_tex, &matrix); + wlr_render_with_matrix(plane->surf.renderer->wlr_rend, plane->wlr_tex, &matrix); glFinish(); glPixelStorei(GL_UNPACK_ROW_LENGTH_EXT, bo_stride); @@ -612,7 +605,7 @@ static bool wlr_drm_connector_set_cursor(struct wlr_output *output, static bool wlr_drm_connector_move_cursor(struct wlr_output *output, int x, int y) { struct wlr_drm_connector *conn = (struct wlr_drm_connector *)output; - struct wlr_drm_backend *drm = conn->drm; + struct wlr_drm_backend *drm = (struct wlr_drm_backend *)output->backend; int width, height, tmp; wlr_output_effective_resolution(output, &width, &height); @@ -715,14 +708,13 @@ void wlr_drm_scan_connectors(struct wlr_drm_backend *drm) { drmModeFreeConnector(drm_conn); continue; } - wlr_output_init(&wlr_conn->output, &output_impl); + wlr_output_init(&wlr_conn->output, &drm->backend, &output_impl); struct wl_event_loop *ev = wl_display_get_event_loop(drm->display); wlr_conn->retry_pageflip = wl_event_loop_add_timer(ev, retry_pageflip, wlr_conn); - wlr_conn->drm = drm; wlr_conn->state = WLR_DRM_CONN_DISCONNECTED; wlr_conn->id = drm_conn->connector_id; @@ -828,7 +820,7 @@ void wlr_drm_scan_connectors(struct wlr_drm_backend *drm) { static void page_flip_handler(int fd, unsigned seq, unsigned tv_sec, unsigned tv_usec, void *user) { struct wlr_drm_connector *conn = user; - struct wlr_drm_backend *drm = conn->drm; + struct wlr_drm_backend *drm = (struct wlr_drm_backend *)conn->output.backend; conn->pageflip_pending = false; if (conn->state != WLR_DRM_CONN_CONNECTED) { @@ -899,7 +891,7 @@ void wlr_drm_connector_cleanup(struct wlr_drm_connector *conn) { return; } - struct wlr_drm_backend *drm = conn->drm; + struct wlr_drm_backend *drm = (struct wlr_drm_backend *)conn->output.backend; switch (conn->state) { case WLR_DRM_CONN_CONNECTED: diff --git a/backend/drm/renderer.c b/backend/drm/renderer.c index 0d338490..d53acaa8 100644 --- a/backend/drm/renderer.c +++ b/backend/drm/renderer.c @@ -8,8 +8,8 @@ #include <EGL/eglext.h> #include <wayland-util.h> -#include <wlr/egl.h> #include <wlr/util/log.h> +#include <wlr/render/egl.h> #include <wlr/render/matrix.h> #include <wlr/render/gles2.h> #include <wlr/render.h> diff --git a/backend/multi/backend.c b/backend/multi/backend.c index 5f745c40..ae1d6803 100644 --- a/backend/multi/backend.c +++ b/backend/multi/backend.c @@ -130,11 +130,6 @@ void wlr_multi_backend_add(struct wlr_backend *_multi, sub->output_add.notify = output_add_reemit; sub->output_remove.notify = output_remove_reemit; - wl_list_init(&sub->input_add.link); - wl_list_init(&sub->input_remove.link); - wl_list_init(&sub->output_add.link); - wl_list_init(&sub->output_remove.link); - wl_signal_add(&backend->events.input_add, &sub->input_add); wl_signal_add(&backend->events.input_remove, &sub->input_remove); wl_signal_add(&backend->events.output_add, &sub->output_add); diff --git a/backend/wayland/backend.c b/backend/wayland/backend.c index e57f3583..5018eeb0 100644 --- a/backend/wayland/backend.c +++ b/backend/wayland/backend.c @@ -4,7 +4,7 @@ #include <EGL/egl.h> #include <EGL/eglext.h> #include <wayland-server.h> -#include <wlr/egl.h> +#include <wlr/render/egl.h> #include <wlr/backend/interface.h> #include <wlr/interfaces/wlr_output.h> #include <wlr/interfaces/wlr_input_device.h> diff --git a/backend/wayland/output.c b/backend/wayland/output.c index e1138ee1..0216823e 100644 --- a/backend/wayland/output.c +++ b/backend/wayland/output.c @@ -241,7 +241,7 @@ struct wlr_output *wlr_wl_output_create(struct wlr_backend *_backend) { wlr_log(L_ERROR, "Failed to allocate wlr_wl_backend_output"); return NULL; } - wlr_output_init(&output->wlr_output, &output_impl); + wlr_output_init(&output->wlr_output, &backend->backend, &output_impl); struct wlr_output *wlr_output = &output->wlr_output; wlr_output->width = 640; diff --git a/backend/x11/backend.c b/backend/x11/backend.c index 11dd8568..d30ec376 100644 --- a/backend/x11/backend.c +++ b/backend/x11/backend.c @@ -15,7 +15,7 @@ #endif #include <wlr/backend/interface.h> #include <wlr/backend/x11.h> -#include <wlr/egl.h> +#include <wlr/render/egl.h> #include <wlr/interfaces/wlr_output.h> #include <wlr/interfaces/wlr_input_device.h> #include <wlr/interfaces/wlr_keyboard.h> @@ -264,7 +264,7 @@ static bool wlr_x11_backend_start(struct wlr_backend *backend) { output->x11 = x11; - wlr_output_init(&output->wlr_output, &output_impl); + wlr_output_init(&output->wlr_output, &x11->backend, &output_impl); snprintf(output->wlr_output.name, sizeof(output->wlr_output.name), "X11-1"); output->win = xcb_generate_id(x11->xcb_conn); diff --git a/examples/pointer.c b/examples/pointer.c index 238be9b3..92faaf0c 100644 --- a/examples/pointer.c +++ b/examples/pointer.c @@ -284,7 +284,7 @@ int main(int argc, char *argv[]) { state.cursor_motion.notify = handle_cursor_motion; wl_signal_add(&state.cursor->events.motion_absolute, - &state.cursor_motion_absolute); + &state.cursor_motion_absolute); state.cursor_motion_absolute.notify = handle_cursor_motion_absolute; wl_signal_add(&state.cursor->events.button, &state.cursor_button); @@ -308,7 +308,7 @@ int main(int argc, char *argv[]) { // tool events wl_signal_add(&state.cursor->events.tablet_tool_axis, - &state.tablet_tool_axis); + &state.tablet_tool_axis); state.tablet_tool_axis.notify = handle_tablet_tool_axis; struct compositor_state compositor = { 0 }; diff --git a/examples/shared.c b/examples/shared.c index bb1d2737..1fdd5775 100644 --- a/examples/shared.c +++ b/examples/shared.c @@ -60,7 +60,6 @@ static void keyboard_add(struct wlr_input_device *device, struct compositor_stat struct keyboard_state *kbstate = calloc(sizeof(struct keyboard_state), 1); kbstate->device = device; kbstate->compositor = state; - wl_list_init(&kbstate->key.link); kbstate->key.notify = keyboard_key_notify; wl_signal_add(&device->keyboard->events.key, &kbstate->key); wl_list_insert(&state->keyboards, &kbstate->link); @@ -122,10 +121,6 @@ static void pointer_add(struct wlr_input_device *device, struct compositor_state struct pointer_state *pstate = calloc(sizeof(struct pointer_state), 1); pstate->device = device; pstate->compositor = state; - wl_list_init(&pstate->motion.link); - wl_list_init(&pstate->motion_absolute.link); - wl_list_init(&pstate->button.link); - wl_list_init(&pstate->axis.link); pstate->motion.notify = pointer_motion_notify; pstate->motion_absolute.notify = pointer_motion_absolute_notify; pstate->button.notify = pointer_button_notify; @@ -175,10 +170,6 @@ static void touch_add(struct wlr_input_device *device, struct compositor_state * struct touch_state *tstate = calloc(sizeof(struct touch_state), 1); tstate->device = device; tstate->compositor = state; - wl_list_init(&tstate->down.link); - wl_list_init(&tstate->motion.link); - wl_list_init(&tstate->up.link); - wl_list_init(&tstate->cancel.link); tstate->down.notify = touch_down_notify; tstate->motion.notify = touch_motion_notify; tstate->up.notify = touch_up_notify; @@ -219,10 +210,6 @@ static void tablet_tool_add(struct wlr_input_device *device, struct tablet_tool_state *tstate = calloc(sizeof(struct tablet_tool_state), 1); tstate->device = device; tstate->compositor = state; - wl_list_init(&tstate->axis.link); - wl_list_init(&tstate->proximity.link); - wl_list_init(&tstate->tip.link); - wl_list_init(&tstate->button.link); tstate->axis.notify = tablet_tool_axis_notify; tstate->proximity.notify = tablet_tool_proximity_notify; //tstate->tip.notify = tablet_tool_tip_notify; @@ -247,7 +234,6 @@ static void tablet_pad_add(struct wlr_input_device *device, struct tablet_pad_state *pstate = calloc(sizeof(struct tablet_pad_state), 1); pstate->device = device; pstate->compositor = state; - wl_list_init(&pstate->button.link); pstate->button.notify = tablet_pad_button_notify; wl_signal_add(&device->tablet_pad->events.button, &pstate->button); wl_list_insert(&state->tablet_pads, &pstate->link); @@ -436,7 +422,6 @@ static void output_add_notify(struct wl_listener *listener, void *data) { ostate->compositor = state; ostate->frame.notify = output_frame_notify; ostate->resolution.notify = output_resolution_notify; - wl_list_init(&ostate->frame.link); wl_signal_add(&output->events.frame, &ostate->frame); wl_signal_add(&output->events.resolution, &ostate->resolution); wl_list_insert(&state->outputs, &ostate->link); @@ -476,15 +461,11 @@ void compositor_init(struct compositor_state *state) { wl_list_init(&state->touch); wl_list_init(&state->tablet_tools); wl_list_init(&state->tablet_pads); - wl_list_init(&state->input_add.link); state->input_add.notify = input_add_notify; - wl_list_init(&state->input_remove.link); state->input_remove.notify = input_remove_notify; wl_list_init(&state->outputs); - wl_list_init(&state->output_add.link); state->output_add.notify = output_add_notify; - wl_list_init(&state->output_remove.link); state->output_remove.notify = output_remove_notify; struct wlr_backend *wlr = wlr_backend_autocreate(state->display); diff --git a/include/backend/drm/drm.h b/include/backend/drm/drm.h index 6106a85a..b0f5838e 100644 --- a/include/backend/drm/drm.h +++ b/include/backend/drm/drm.h @@ -12,7 +12,7 @@ #include <wlr/backend/session.h> #include <wlr/backend/drm.h> #include <wlr/types/wlr_output.h> -#include <wlr/egl.h> +#include <wlr/render/egl.h> #include <wlr/util/list.h> #include "iface.h" @@ -30,7 +30,6 @@ struct wlr_drm_plane { // Only used by cursor float matrix[16]; - struct wlr_renderer *wlr_rend; struct wlr_texture *wlr_tex; struct gbm_bo *cursor_bo; @@ -113,7 +112,6 @@ struct wlr_drm_mode { struct wlr_drm_connector { struct wlr_output output; - struct wlr_drm_backend *drm; enum wlr_drm_connector_state state; uint32_t id; diff --git a/include/backend/wayland.h b/include/backend/wayland.h index 508a7f52..88aeabca 100644 --- a/include/backend/wayland.h +++ b/include/backend/wayland.h @@ -5,7 +5,7 @@ #include <wayland-client.h> #include <wayland-server.h> #include <wayland-egl.h> -#include <wlr/egl.h> +#include <wlr/render/egl.h> #include <wlr/backend/wayland.h> #include <wlr/types/wlr_output.h> #include <wlr/types/wlr_input_device.h> diff --git a/include/backend/x11.h b/include/backend/x11.h index b4284b63..f5ec56bc 100644 --- a/include/backend/x11.h +++ b/include/backend/x11.h @@ -5,7 +5,7 @@ #include <xcb/xcb.h> #include <X11/Xlib-xcb.h> #include <wayland-server.h> -#include <wlr/egl.h> +#include <wlr/render/egl.h> #include <wlr/types/wlr_output.h> #include <wlr/types/wlr_input_device.h> diff --git a/include/render/gles2.h b/include/render/gles2.h index 688a51dd..0b7032cc 100644 --- a/include/render/gles2.h +++ b/include/render/gles2.h @@ -8,9 +8,9 @@ #include <GLES2/gl2ext.h> #include <EGL/egl.h> #include <EGL/eglext.h> -#include <wlr/egl.h> #include <wlr/backend.h> #include <wlr/render.h> +#include <wlr/render/egl.h> #include <wlr/render/interface.h> #include <wlr/util/log.h> diff --git a/include/rootston/view.h b/include/rootston/view.h index ad722225..7d297329 100644 --- a/include/rootston/view.h +++ b/include/rootston/view.h @@ -8,13 +8,12 @@ struct roots_wl_shell_surface { struct roots_view *view; + // TODO: Maybe destroy listener should go in roots_view struct wl_listener destroy; struct wl_listener ping_timeout; struct wl_listener request_move; struct wl_listener request_resize; - struct wl_listener request_set_fullscreen; - struct wl_listener request_set_maximized; struct wl_listener surface_commit; }; @@ -25,15 +24,13 @@ struct roots_xdg_surface_v6 { // TODO: Maybe destroy listener should go in roots_view struct wl_listener commit; struct wl_listener destroy; - struct wl_listener ping_timeout; - struct wl_listener request_minimize; struct wl_listener request_move; struct wl_listener request_resize; - struct wl_listener request_show_window_menu; }; struct roots_xwayland_surface { struct roots_view *view; + // TODO: Maybe destroy listener should go in roots_view struct wl_listener destroy; struct wl_listener request_configure; diff --git a/include/wlr/backend.h b/include/wlr/backend.h index 6c11152f..78d01edf 100644 --- a/include/wlr/backend.h +++ b/include/wlr/backend.h @@ -3,7 +3,7 @@ #include <wayland-server.h> #include <wlr/backend/session.h> -#include <wlr/egl.h> +#include <wlr/render/egl.h> struct wlr_backend_impl; diff --git a/include/wlr/backend/interface.h b/include/wlr/backend/interface.h index ea41400a..3f0aaadb 100644 --- a/include/wlr/backend/interface.h +++ b/include/wlr/backend/interface.h @@ -3,7 +3,7 @@ #include <stdbool.h> #include <wlr/backend.h> -#include <wlr/egl.h> +#include <wlr/render/egl.h> struct wlr_backend_impl { bool (*start)(struct wlr_backend *backend); diff --git a/include/wlr/interfaces/wlr_output.h b/include/wlr/interfaces/wlr_output.h index b7927569..17dd5538 100644 --- a/include/wlr/interfaces/wlr_output.h +++ b/include/wlr/interfaces/wlr_output.h @@ -1,8 +1,9 @@ #ifndef WLR_INTERFACES_WLR_OUTPUT_H #define WLR_INTERFACES_WLR_OUTPUT_H -#include <wlr/types/wlr_output.h> #include <stdbool.h> +#include <wlr/types/wlr_output.h> +#include <wlr/backend.h> struct wlr_output_impl { void (*enable)(struct wlr_output *output, bool enable); @@ -21,7 +22,8 @@ struct wlr_output_impl { uint16_t (*get_gamma_size)(struct wlr_output *output); }; -void wlr_output_init(struct wlr_output *output, const struct wlr_output_impl *impl); +void wlr_output_init(struct wlr_output *output, struct wlr_backend *backend, + const struct wlr_output_impl *impl); void wlr_output_free(struct wlr_output *output); void wlr_output_update_matrix(struct wlr_output *output); struct wl_global *wlr_output_create_global( diff --git a/include/wlr/egl.h b/include/wlr/render/egl.h index 9ab4d9ce..9ab4d9ce 100644 --- a/include/wlr/egl.h +++ b/include/wlr/render/egl.h diff --git a/include/wlr/types/wlr_output.h b/include/wlr/types/wlr_output.h index 312b51f8..a2d595ea 100644 --- a/include/wlr/types/wlr_output.h +++ b/include/wlr/types/wlr_output.h @@ -1,9 +1,10 @@ #ifndef WLR_TYPES_WLR_OUTPUT_H #define WLR_TYPES_WLR_OUTPUT_H +#include <stdbool.h> #include <wayland-server.h> +#include <wlr/backend.h> #include <wlr/util/list.h> -#include <stdbool.h> struct wlr_output_mode { uint32_t flags; // enum wl_output_mode @@ -15,6 +16,7 @@ struct wlr_output_impl; struct wlr_output { const struct wlr_output_impl *impl; + struct wlr_backend *backend; struct wl_global *wl_global; struct wl_list wl_resources; diff --git a/render/egl.c b/render/egl.c index 9815b923..08612125 100644 --- a/render/egl.c +++ b/render/egl.c @@ -3,7 +3,7 @@ #include <GLES2/gl2.h> #include <stdlib.h> #include <wlr/util/log.h> -#include <wlr/egl.h> +#include <wlr/render/egl.h> #include "render/glapi.h" // Extension documentation diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c index 94c50b9a..646d69ec 100644 --- a/render/gles2/renderer.c +++ b/render/gles2/renderer.c @@ -5,9 +5,9 @@ #include <GLES2/gl2ext.h> #include <wayland-util.h> #include <wayland-server-protocol.h> -#include <wlr/egl.h> #include <wlr/backend.h> #include <wlr/render.h> +#include <wlr/render/egl.h> #include <wlr/render/interface.h> #include <wlr/render/matrix.h> #include <wlr/util/log.h> @@ -246,9 +246,8 @@ struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_backend *backend) { return NULL; } wlr_renderer_init(&renderer->wlr_renderer, &wlr_renderer_impl); - if (backend) { - struct wlr_egl *egl = wlr_backend_get_egl(backend); - renderer->egl = egl; - } + + renderer->egl = wlr_backend_get_egl(backend); + return &renderer->wlr_renderer; } diff --git a/render/gles2/texture.c b/render/gles2/texture.c index 5e934aa4..ff71cb08 100644 --- a/render/gles2/texture.c +++ b/render/gles2/texture.c @@ -5,8 +5,8 @@ #include <GLES2/gl2ext.h> #include <wayland-util.h> #include <wayland-server-protocol.h> -#include <wlr/egl.h> #include <wlr/render.h> +#include <wlr/render/egl.h> #include <wlr/render/interface.h> #include <wlr/render/matrix.h> #include <wlr/util/log.h> diff --git a/rootston/cursor.c b/rootston/cursor.c index 27a6006b..3be4c2a6 100644 --- a/rootston/cursor.c +++ b/rootston/cursor.c @@ -393,51 +393,41 @@ static void handle_request_set_cursor(struct wl_listener *listener, void cursor_initialize(struct roots_input *input) { struct wlr_cursor *cursor = input->cursor; - + // TODO: Does this belong here wl_list_init(&input->touch_points); - wl_list_init(&input->cursor_motion.link); wl_signal_add(&cursor->events.motion, &input->cursor_motion); input->cursor_motion.notify = handle_cursor_motion; - wl_list_init(&input->cursor_motion_absolute.link); wl_signal_add(&cursor->events.motion_absolute, &input->cursor_motion_absolute); input->cursor_motion_absolute.notify = handle_cursor_motion_absolute; - wl_list_init(&input->cursor_button.link); wl_signal_add(&cursor->events.button, &input->cursor_button); input->cursor_button.notify = handle_cursor_button; - wl_list_init(&input->cursor_axis.link); wl_signal_add(&cursor->events.axis, &input->cursor_axis); input->cursor_axis.notify = handle_cursor_axis; - wl_list_init(&input->cursor_touch_down.link); wl_signal_add(&cursor->events.touch_down, &input->cursor_touch_down); input->cursor_touch_down.notify = handle_touch_down; - wl_list_init(&input->cursor_touch_up.link); wl_signal_add(&cursor->events.touch_up, &input->cursor_touch_up); input->cursor_touch_up.notify = handle_touch_up; - wl_list_init(&input->cursor_touch_motion.link); wl_signal_add(&cursor->events.touch_motion, &input->cursor_touch_motion); input->cursor_touch_motion.notify = handle_touch_motion; - wl_list_init(&input->cursor_tool_axis.link); wl_signal_add(&cursor->events.tablet_tool_axis, &input->cursor_tool_axis); input->cursor_tool_axis.notify = handle_tool_axis; - wl_list_init(&input->cursor_tool_tip.link); wl_signal_add(&cursor->events.tablet_tool_tip, &input->cursor_tool_tip); input->cursor_tool_tip.notify = handle_tool_tip; wl_signal_add(&input->wl_seat->events.pointer_grab_end, &input->pointer_grab_end); input->pointer_grab_end.notify = handle_pointer_grab_end; - wl_list_init(&input->request_set_cursor.link); wl_signal_add(&input->wl_seat->events.request_set_cursor, &input->request_set_cursor); input->request_set_cursor.notify = handle_request_set_cursor; diff --git a/rootston/desktop.c b/rootston/desktop.c index 641315a8..70767f92 100644 --- a/rootston/desktop.c +++ b/rootston/desktop.c @@ -202,17 +202,23 @@ struct roots_view *view_at(struct roots_desktop *desktop, double lx, double ly, struct roots_desktop *desktop_create(struct roots_server *server, struct roots_config *config) { - struct roots_desktop *desktop = calloc(1, sizeof(struct roots_desktop)); wlr_log(L_DEBUG, "Initializing roots desktop"); - assert(desktop->views = list_create()); + struct roots_desktop *desktop = calloc(1, sizeof(struct roots_desktop)); + if (desktop == NULL) { + return NULL; + } + + desktop->views = list_create(); + if (desktop->views == NULL) { + free(desktop); + return NULL; + } wl_list_init(&desktop->outputs); - wl_list_init(&desktop->output_add.link); - desktop->output_add.notify = output_add_notify; - wl_list_init(&desktop->output_remove.link); - desktop->output_remove.notify = output_remove_notify; + desktop->output_add.notify = output_add_notify; wl_signal_add(&server->backend->events.output_add, &desktop->output_add); + desktop->output_remove.notify = output_remove_notify; wl_signal_add(&server->backend->events.output_remove, &desktop->output_remove); diff --git a/rootston/input.c b/rootston/input.c index 1784040c..5dc7d16d 100644 --- a/rootston/input.c +++ b/rootston/input.c @@ -74,15 +74,34 @@ struct roots_input *input_create(struct roots_server *server, assert(server->desktop); struct roots_input *input = calloc(1, sizeof(struct roots_input)); - assert(input); + if (input == NULL) { + return NULL; + } input->config = config; input->server = server; - assert(input->theme = wlr_xcursor_theme_load("default", 16)); - assert(input->xcursor = wlr_xcursor_theme_get_cursor(input->theme, "left_ptr")); + input->theme = wlr_xcursor_theme_load("default", 16); + if (input->theme == NULL) { + wlr_log(L_ERROR, "Cannot load xcursor theme"); + free(input); + return NULL; + } + input->xcursor = wlr_xcursor_theme_get_cursor(input->theme, "left_ptr"); + if (input->xcursor == NULL) { + wlr_log(L_ERROR, "Cannot load xcursor from theme"); + wlr_xcursor_theme_destroy(input->theme); + free(input); + return NULL; + } - assert(input->wl_seat = wlr_seat_create(server->wl_display, "seat0")); + input->wl_seat = wlr_seat_create(server->wl_display, "seat0"); + if (input->wl_seat == NULL) { + wlr_log(L_ERROR, "Cannot create seat"); + wlr_xcursor_theme_destroy(input->theme); + free(input); + return NULL; + } wlr_seat_set_capabilities(input->wl_seat, WL_SEAT_CAPABILITY_KEYBOARD | WL_SEAT_CAPABILITY_POINTER | WL_SEAT_CAPABILITY_TOUCH); @@ -91,15 +110,10 @@ struct roots_input *input_create(struct roots_server *server, wl_list_init(&input->touch); wl_list_init(&input->tablet_tools); - wl_list_init(&input->input_add.link); input->input_add.notify = input_add_notify; - wl_list_init(&input->input_remove.link); + wl_signal_add(&server->backend->events.input_add, &input->input_add); input->input_remove.notify = input_remove_notify; - - wl_signal_add(&server->backend->events.input_add, - &input->input_add); - wl_signal_add(&server->backend->events.input_remove, - &input->input_remove); + wl_signal_add(&server->backend->events.input_remove, &input->input_remove); input->cursor = wlr_cursor_create(); cursor_initialize(input); diff --git a/rootston/keyboard.c b/rootston/keyboard.c index aee6b098..61604da0 100644 --- a/rootston/keyboard.c +++ b/rootston/keyboard.c @@ -127,10 +127,12 @@ static void keyboard_key_notify(struct wl_listener *listener, void *data) { void keyboard_add(struct wlr_input_device *device, struct roots_input *input) { struct roots_keyboard *keyboard = calloc(sizeof(struct roots_keyboard), 1); + if (keyboard == NULL) { + return; + } device->data = keyboard; keyboard->device = device; keyboard->input = input; - wl_list_init(&keyboard->key.link); keyboard->key.notify = keyboard_key_notify; wl_signal_add(&device->keyboard->events.key, &keyboard->key); wl_list_insert(&input->keyboards, &keyboard->link); @@ -142,11 +144,15 @@ void keyboard_add(struct wlr_input_device *device, struct roots_input *input) { rules.layout = getenv("XKB_DEFAULT_LAYOUT"); rules.variant = getenv("XKB_DEFAULT_VARIANT"); rules.options = getenv("XKB_DEFAULT_OPTIONS"); - struct xkb_context *context; - assert(context = xkb_context_new(XKB_CONTEXT_NO_FLAGS)); + struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); + if (context == NULL) { + wlr_log(L_ERROR, "Cannot create XKB context"); + return; + } wlr_keyboard_set_keymap(device->keyboard, xkb_map_new_from_names(context, - &rules, XKB_KEYMAP_COMPILE_NO_FLAGS)); + &rules, XKB_KEYMAP_COMPILE_NO_FLAGS)); xkb_context_unref(context); + wlr_seat_attach_keyboard(input->wl_seat, device); } diff --git a/rootston/output.c b/rootston/output.c index 39a90fe3..5b7297ae 100644 --- a/rootston/output.c +++ b/rootston/output.c @@ -175,7 +175,6 @@ void output_add_notify(struct wl_listener *listener, void *data) { output->desktop = desktop; output->wlr_output = wlr_output; output->frame.notify = output_frame_notify; - wl_list_init(&output->frame.link); wl_signal_add(&wlr_output->events.frame, &output->frame); wl_list_insert(&desktop->outputs, &output->link); diff --git a/rootston/wl_shell.c b/rootston/wl_shell.c index 2c6047b1..248514f0 100644 --- a/rootston/wl_shell.c +++ b/rootston/wl_shell.c @@ -57,11 +57,8 @@ static void handle_destroy(struct wl_listener *listener, void *data) { struct roots_wl_shell_surface *roots_surface = wl_container_of(listener, roots_surface, destroy); wl_list_remove(&roots_surface->destroy.link); - wl_list_remove(&roots_surface->ping_timeout.link); wl_list_remove(&roots_surface->request_move.link); wl_list_remove(&roots_surface->request_resize.link); - wl_list_remove(&roots_surface->request_set_fullscreen.link); - wl_list_remove(&roots_surface->request_set_maximized.link); view_destroy(roots_surface->view); free(roots_surface); } @@ -88,25 +85,22 @@ void handle_wl_shell_surface(struct wl_listener *listener, void *data) { if (!roots_surface) { return; } - wl_list_init(&roots_surface->destroy.link); roots_surface->destroy.notify = handle_destroy; wl_signal_add(&surface->events.destroy, &roots_surface->destroy); - wl_list_init(&roots_surface->ping_timeout.link); - wl_list_init(&roots_surface->request_move.link); roots_surface->request_move.notify = handle_request_move; wl_signal_add(&surface->events.request_move, &roots_surface->request_move); - wl_list_init(&roots_surface->request_resize.link); roots_surface->request_resize.notify = handle_request_resize; wl_signal_add(&surface->events.request_resize, &roots_surface->request_resize); - wl_list_init(&roots_surface->request_set_fullscreen.link); - wl_list_init(&roots_surface->request_set_maximized.link); - wl_list_init(&roots_surface->surface_commit.link); roots_surface->surface_commit.notify = handle_surface_commit; wl_signal_add(&surface->surface->events.commit, &roots_surface->surface_commit); struct roots_view *view = calloc(1, sizeof(struct roots_view)); + if (!view) { + free(roots_surface); + return; + } view->type = ROOTS_WL_SHELL_VIEW; view->wl_shell_surface = surface; @@ -121,9 +115,8 @@ void handle_wl_shell_surface(struct wl_listener *listener, void *data) { if (surface->state == WLR_WL_SHELL_SURFACE_STATE_TRANSIENT) { // we need to map it relative to the parent - int i = - list_seq_find(desktop->views, - shell_surface_compare_equals, surface->parent); + int i = list_seq_find(desktop->views, shell_surface_compare_equals, + surface->parent); if (i != -1) { struct roots_view *parent = desktop->views->items[i]; view_set_position(view, diff --git a/rootston/xdg_shell_v6.c b/rootston/xdg_shell_v6.c index 1e21fa02..028545df 100644 --- a/rootston/xdg_shell_v6.c +++ b/rootston/xdg_shell_v6.c @@ -74,12 +74,10 @@ static void handle_commit(struct wl_listener *listener, void *data) { static void handle_destroy(struct wl_listener *listener, void *data) { struct roots_xdg_surface_v6 *roots_xdg_surface = wl_container_of(listener, roots_xdg_surface, destroy); + wl_list_remove(&roots_xdg_surface->commit.link); wl_list_remove(&roots_xdg_surface->destroy.link); - wl_list_remove(&roots_xdg_surface->ping_timeout.link); wl_list_remove(&roots_xdg_surface->request_move.link); wl_list_remove(&roots_xdg_surface->request_resize.link); - wl_list_remove(&roots_xdg_surface->request_show_window_menu.link); - wl_list_remove(&roots_xdg_surface->request_minimize.link); view_destroy(roots_xdg_surface->view); free(roots_xdg_surface); } @@ -105,22 +103,15 @@ void handle_xdg_shell_v6_surface(struct wl_listener *listener, void *data) { if (!roots_surface) { return; } - wl_list_init(&roots_surface->commit.link); roots_surface->commit.notify = handle_commit; wl_signal_add(&surface->events.commit, &roots_surface->commit); - wl_list_init(&roots_surface->destroy.link); roots_surface->destroy.notify = handle_destroy; wl_signal_add(&surface->events.destroy, &roots_surface->destroy); - wl_list_init(&roots_surface->ping_timeout.link); - wl_list_init(&roots_surface->request_minimize.link); - wl_list_init(&roots_surface->request_move.link); roots_surface->request_move.notify = handle_request_move; wl_signal_add(&surface->events.request_move, &roots_surface->request_move); - wl_list_init(&roots_surface->request_resize.link); roots_surface->request_resize.notify = handle_request_resize; wl_signal_add(&surface->events.request_resize, &roots_surface->request_resize); - wl_list_init(&roots_surface->request_show_window_menu.link); struct roots_view *view = calloc(1, sizeof(struct roots_view)); view->type = ROOTS_XDG_SHELL_V6_VIEW; diff --git a/rootston/xwayland.c b/rootston/xwayland.c index d7885e94..6ef33403 100644 --- a/rootston/xwayland.c +++ b/rootston/xwayland.c @@ -75,10 +75,8 @@ void handle_xwayland_surface(struct wl_listener *listener, void *data) { if (roots_surface == NULL) { return; } - wl_list_init(&roots_surface->destroy.link); roots_surface->destroy.notify = handle_destroy; wl_signal_add(&surface->events.destroy, &roots_surface->destroy); - wl_list_init(&roots_surface->request_configure.link); roots_surface->request_configure.notify = handle_request_configure; wl_signal_add(&surface->events.request_configure, &roots_surface->request_configure); diff --git a/types/wlr_output.c b/types/wlr_output.c index 5e10509e..03cff0bb 100644 --- a/types/wlr_output.c +++ b/types/wlr_output.c @@ -153,8 +153,7 @@ static bool set_cursor(struct wlr_output *output, const uint8_t *buf, output->cursor.height = height; if (!output->cursor.renderer) { - /* NULL egl is okay given that we are only using pixel buffers */ - output->cursor.renderer = wlr_gles2_renderer_create(NULL); + output->cursor.renderer = wlr_gles2_renderer_create(output->backend); if (!output->cursor.renderer) { return false; } @@ -307,8 +306,9 @@ bool wlr_output_move_cursor(struct wlr_output *output, int x, int y) { return output->impl->move_cursor(output, x, y); } -void wlr_output_init(struct wlr_output *output, +void wlr_output_init(struct wlr_output *output, struct wlr_backend *backend, const struct wlr_output_impl *impl) { + output->backend = backend; output->impl = impl; output->modes = list_create(); output->transform = WL_OUTPUT_TRANSFORM_NORMAL; diff --git a/types/wlr_seat.c b/types/wlr_seat.c index ce055520..362c696a 100644 --- a/types/wlr_seat.c +++ b/types/wlr_seat.c @@ -635,17 +635,13 @@ void wlr_seat_attach_keyboard(struct wlr_seat *seat, calloc(1, sizeof(struct wlr_seat_keyboard)); seat_kb->keyboard = kb; seat_kb->seat = seat; - wl_list_init(&seat_kb->key.link); seat_kb->key.notify = keyboard_key_notify; wl_signal_add(&kb->events.key, &seat_kb->key); - wl_list_init(&seat_kb->modifiers.link); seat_kb->modifiers.notify = keyboard_modifiers_notify; wl_signal_add(&kb->events.modifiers, &seat_kb->modifiers); - wl_list_init(&seat_kb->keymap.link); seat_kb->keymap.notify = keyboard_keymap_notify; wl_signal_add(&kb->events.keymap, &seat_kb->keymap); // TODO: update keymap as necessary - wl_list_init(&seat_kb->destroy.link); seat_kb->destroy.notify = keyboard_destroy_notify; wl_signal_add(&dev->events.destroy, &seat_kb->destroy); wl_list_insert(&seat->keyboards, &seat_kb->link); diff --git a/types/wlr_surface.c b/types/wlr_surface.c index 9e38d701..68c21468 100644 --- a/types/wlr_surface.c +++ b/types/wlr_surface.c @@ -2,9 +2,9 @@ #include <stdlib.h> #include <wayland-server.h> #include <wlr/util/log.h> -#include <wlr/egl.h> #include <wlr/render/interface.h> #include <wlr/types/wlr_surface.h> +#include <wlr/render/egl.h> #include <wlr/render/matrix.h> static void wlr_surface_state_reset_buffer(struct wlr_surface_state *state) { |