Catch up with wlroots 0.15 breaking changes

This commit is contained in:
tiosgz 2021-12-20 19:07:56 +00:00
parent 63aefb1776
commit b238994996
11 changed files with 40 additions and 27 deletions

View file

@ -9,7 +9,6 @@
#define KIWMI_DESKTOP_DESKTOP_H #define KIWMI_DESKTOP_DESKTOP_H
#include <wayland-server.h> #include <wayland-server.h>
#include <wlr/render/wlr_renderer.h>
struct kiwmi_desktop { struct kiwmi_desktop {
struct wlr_compositor *compositor; struct wlr_compositor *compositor;
@ -35,7 +34,7 @@ struct kiwmi_desktop {
} events; } events;
}; };
bool desktop_init(struct kiwmi_desktop *desktop, struct wlr_renderer *renderer); bool desktop_init(struct kiwmi_desktop *desktop);
void desktop_fini(struct kiwmi_desktop *desktop); void desktop_fini(struct kiwmi_desktop *desktop);
struct kiwmi_server; struct kiwmi_server;

View file

@ -11,8 +11,8 @@
#include <stdbool.h> #include <stdbool.h>
#include <wayland-server.h> #include <wayland-server.h>
#include <wlr/types/wlr_box.h>
#include <wlr/types/wlr_surface.h> #include <wlr/types/wlr_surface.h>
#include <wlr/util/box.h>
#include "desktop/output.h" #include "desktop/output.h"

View file

@ -9,7 +9,7 @@
#define KIWMI_DESKTOP_OUTPUT_H #define KIWMI_DESKTOP_OUTPUT_H
#include <wayland-server.h> #include <wayland-server.h>
#include <wlr/types/wlr_box.h> #include <wlr/util/box.h>
struct kiwmi_output { struct kiwmi_output {
struct wl_list link; struct wl_list link;

View file

@ -17,6 +17,9 @@ struct kiwmi_server {
struct wl_display *wl_display; struct wl_display *wl_display;
struct wl_event_loop *wl_event_loop; struct wl_event_loop *wl_event_loop;
struct wlr_backend *backend; struct wlr_backend *backend;
struct wlr_renderer *renderer;
struct wlr_allocator *allocator;
const char *socket; const char *socket;
char *config_path; char *config_path;
struct kiwmi_lua *lua; struct kiwmi_lua *lua;

View file

@ -30,11 +30,12 @@
#include "server.h" #include "server.h"
bool bool
desktop_init(struct kiwmi_desktop *desktop, struct wlr_renderer *renderer) desktop_init(struct kiwmi_desktop *desktop)
{ {
struct kiwmi_server *server = wl_container_of(desktop, server, desktop); struct kiwmi_server *server = wl_container_of(desktop, server, desktop);
desktop->compositor = wlr_compositor_create(server->wl_display, renderer); desktop->compositor =
wlr_compositor_create(server->wl_display, server->renderer);
desktop->data_device_manager = desktop->data_device_manager =
wlr_data_device_manager_create(server->wl_display); wlr_data_device_manager_create(server->wl_display);
desktop->output_layout = wlr_output_layout_create(); desktop->output_layout = wlr_output_layout_create();

View file

@ -29,8 +29,6 @@ kiwmi_layer_destroy_notify(struct wl_listener *listener, void *UNUSED(data))
wl_list_remove(&layer->map.link); wl_list_remove(&layer->map.link);
wl_list_remove(&layer->unmap.link); wl_list_remove(&layer->unmap.link);
wlr_layer_surface_v1_close(layer->layer_surface);
arrange_layers(layer->output); arrange_layers(layer->output);
free(layer); free(layer);
@ -44,7 +42,9 @@ kiwmi_layer_commit_notify(struct wl_listener *listener, void *UNUSED(data))
struct wlr_box old_geom = layer->geom; struct wlr_box old_geom = layer->geom;
arrange_layers(output); if (layer->layer_surface->current.committed != 0) {
arrange_layers(output);
}
bool layer_changed = layer->layer != layer->layer_surface->current.layer; bool layer_changed = layer->layer != layer->layer_surface->current.layer;
bool geom_changed = memcmp(&old_geom, &layer->geom, sizeof(old_geom)) != 0; bool geom_changed = memcmp(&old_geom, &layer->geom, sizeof(old_geom)) != 0;
@ -237,7 +237,7 @@ arrange_layer(
"Bad width/height: %d, %d", "Bad width/height: %d, %d",
arranged_area.width, arranged_area.width,
arranged_area.height); arranged_area.height);
wlr_layer_surface_v1_close(layer_surface); wlr_layer_surface_v1_destroy(layer_surface);
continue; continue;
} }
@ -404,7 +404,7 @@ layer_shell_new_surface_notify(struct wl_listener *listener, void *data)
WLR_ERROR, WLR_ERROR,
"Bad layer surface layer '%d'", "Bad layer surface layer '%d'",
layer_surface->current.layer); layer_surface->current.layer);
wlr_layer_surface_v1_close(layer_surface); wlr_layer_surface_v1_destroy(layer_surface);
free(layer); free(layer);
return; return;
} }
@ -427,10 +427,10 @@ layer_shell_new_surface_notify(struct wl_listener *listener, void *data)
wl_list_insert(&output->layers[layer->layer], &layer->link); wl_list_insert(&output->layers[layer->layer], &layer->link);
// Temporarily set the layer's current state to client_pending // Temporarily set the layer's current state to pending
// So that we can easily arrange it // So that we can easily arrange it
struct wlr_layer_surface_v1_state old_state = layer_surface->current; struct wlr_layer_surface_v1_state old_state = layer_surface->current;
layer_surface->current = layer_surface->client_pending; layer_surface->current = layer_surface->pending;
arrange_layers(output); arrange_layers(output);
layer_surface->current = old_state; layer_surface->current = old_state;
} }

View file

@ -12,6 +12,7 @@
#include <pixman.h> #include <pixman.h>
#include <wayland-server.h> #include <wayland-server.h>
#include <wlr/backend.h> #include <wlr/backend.h>
#include <wlr/render/allocator.h>
#include <wlr/render/wlr_renderer.h> #include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_layer_shell_v1.h> #include <wlr/types/wlr_layer_shell_v1.h>
#include <wlr/types/wlr_matrix.h> #include <wlr/types/wlr_matrix.h>
@ -191,8 +192,8 @@ output_frame_notify(struct wl_listener *listener, void *data)
} }
struct wlr_output_layout *output_layout = desktop->output_layout; struct wlr_output_layout *output_layout = desktop->output_layout;
struct wlr_renderer *renderer = struct kiwmi_server *server = wl_container_of(desktop, server, desktop);
wlr_backend_get_renderer(wlr_output->backend); struct wlr_renderer *renderer = server->renderer;
int width; int width;
int height; int height;
@ -334,9 +335,10 @@ new_output_notify(struct wl_listener *listener, void *data)
wlr_log(WLR_DEBUG, "New output %p: %s", wlr_output, wlr_output->name); wlr_log(WLR_DEBUG, "New output %p: %s", wlr_output, wlr_output->name);
if (!wl_list_empty(&wlr_output->modes)) { wlr_output_init_render(wlr_output, server->allocator, server->renderer);
struct wlr_output_mode *mode =
wl_container_of(wlr_output->modes.prev, mode, link); struct wlr_output_mode *mode = wlr_output_preferred_mode(wlr_output);
if (mode) {
wlr_output_set_mode(wlr_output, mode); wlr_output_set_mode(wlr_output, mode);
if (!wlr_output_commit(wlr_output)) { if (!wlr_output_commit(wlr_output)) {

View file

@ -262,10 +262,12 @@ view_init_subsurfaces(struct kiwmi_view_child *child, struct kiwmi_view *view)
} }
struct wlr_subsurface *subsurface; struct wlr_subsurface *subsurface;
wl_list_for_each (subsurface, &surface->subsurfaces_below, parent_link) { wl_list_for_each (
subsurface, &surface->current.subsurfaces_below, current.link) {
view_child_subsurface_create(child, view, subsurface); view_child_subsurface_create(child, view, subsurface);
} }
wl_list_for_each (subsurface, &surface->subsurfaces_above, parent_link) { wl_list_for_each (
subsurface, &surface->current.subsurfaces_above, current.link) {
view_child_subsurface_create(child, view, subsurface); view_child_subsurface_create(child, view, subsurface);
} }
} }

View file

@ -302,7 +302,8 @@ surface_for_each_mapped_surface(
void *user_data) void *user_data)
{ {
struct wlr_subsurface *subsurface; struct wlr_subsurface *subsurface;
wl_list_for_each (subsurface, &surface->subsurfaces_below, parent_link) { wl_list_for_each (
subsurface, &surface->current.subsurfaces_below, current.link) {
if (!subsurface->mapped) { if (!subsurface->mapped) {
continue; continue;
} }
@ -317,7 +318,8 @@ surface_for_each_mapped_surface(
callback(surface, x, y, user_data); callback(surface, x, y, user_data);
wl_list_for_each (subsurface, &surface->subsurfaces_above, parent_link) { wl_list_for_each (
subsurface, &surface->current.subsurfaces_above, current.link) {
if (!subsurface->mapped) { if (!subsurface->mapped) {
continue; continue;
} }
@ -534,7 +536,7 @@ xdg_decoration_request_mode_notify(
wl_container_of(listener, decoration, request_mode); wl_container_of(listener, decoration, request_mode);
enum wlr_xdg_toplevel_decoration_v1_mode mode = enum wlr_xdg_toplevel_decoration_v1_mode mode =
decoration->wlr_decoration->client_pending_mode; decoration->wlr_decoration->requested_mode;
if (mode == WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_NONE) { if (mode == WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_NONE) {
mode = WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE; mode = WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE;
} }

View file

@ -8,9 +8,9 @@
#include "luak/kiwmi_output.h" #include "luak/kiwmi_output.h"
#include <lauxlib.h> #include <lauxlib.h>
#include <wlr/types/wlr_box.h>
#include <wlr/types/wlr_output.h> #include <wlr/types/wlr_output.h>
#include <wlr/types/wlr_output_layout.h> #include <wlr/types/wlr_output_layout.h>
#include <wlr/util/box.h>
#include <wlr/util/log.h> #include <wlr/util/log.h>
#include "desktop/output.h" #include "desktop/output.h"

View file

@ -14,6 +14,7 @@
#include <wayland-server.h> #include <wayland-server.h>
#include <wlr/backend.h> #include <wlr/backend.h>
#include <wlr/render/allocator.h>
#include <wlr/render/wlr_renderer.h> #include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_data_control_v1.h> #include <wlr/types/wlr_data_control_v1.h>
#include <wlr/types/wlr_gamma_control_v1.h> #include <wlr/types/wlr_gamma_control_v1.h>
@ -43,12 +44,15 @@ server_init(struct kiwmi_server *server, char *config_path)
return false; return false;
} }
struct wlr_renderer *renderer = wlr_backend_get_renderer(server->backend); server->renderer = wlr_renderer_autocreate(server->backend);
wlr_renderer_init_wl_display(renderer, server->wl_display); wlr_renderer_init_wl_display(server->renderer, server->wl_display);
server->allocator =
wlr_allocator_autocreate(server->backend, server->renderer);
wl_signal_init(&server->events.destroy); wl_signal_init(&server->events.destroy);
if (!desktop_init(&server->desktop, renderer)) { if (!desktop_init(&server->desktop)) {
wlr_log(WLR_ERROR, "Failed to initialize desktop"); wlr_log(WLR_ERROR, "Failed to initialize desktop");
wl_display_destroy(server->wl_display); wl_display_destroy(server->wl_display);
return false; return false;