Removed support for wlroots 0.17, added support for wlroots 0.20-dev

This commit is contained in:
Keith Bowes 2025-05-16 16:15:51 -04:00
parent 4c6a762e12
commit 557bb4ae05
9 changed files with 11 additions and 93 deletions

View file

@ -18,10 +18,6 @@ struct wb_output {
struct wlr_scene_tree *shell_top; struct wlr_scene_tree *shell_top;
} layers; } layers;
#if ! WLR_CHECK_VERSION(0, 18, 0)
/* DEPRECATED: Use a tool like swaybg or hyprpaper instead */
struct wlr_scene_rect *background;
#endif
bool gamma_lut_changed; bool gamma_lut_changed;
struct wlr_box geometry; struct wlr_box geometry;

View file

@ -12,9 +12,7 @@
#include <wlr/render/wlr_renderer.h> #include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_compositor.h> #include <wlr/types/wlr_compositor.h>
#include <wlr/types/wlr_data_device.h> #include <wlr/types/wlr_data_device.h>
#if WLR_CHECK_VERSION(0, 18, 0)
#include <wlr/types/wlr_ext_foreign_toplevel_list_v1.h> #include <wlr/types/wlr_ext_foreign_toplevel_list_v1.h>
#endif
#include <wlr/types/wlr_gamma_control_v1.h> #include <wlr/types/wlr_gamma_control_v1.h>
#include <wlr/types/wlr_idle_notify_v1.h> #include <wlr/types/wlr_idle_notify_v1.h>
#include <wlr/types/wlr_output_layout.h> #include <wlr/types/wlr_output_layout.h>
@ -71,9 +69,7 @@ struct wb_server {
struct wlr_box grab_geo_box; struct wlr_box grab_geo_box;
double grab_x, grab_y; double grab_x, grab_y;
uint32_t resize_edges; uint32_t resize_edges;
#if WLR_CHECK_VERSION(0, 18, 0)
struct wlr_ext_foreign_toplevel_list_v1 *foreign_toplevel_list; struct wlr_ext_foreign_toplevel_list_v1 *foreign_toplevel_list;
#endif
struct wl_list toplevels; struct wl_list toplevels;
struct wlr_layer_shell_v1 *layer_shell; struct wlr_layer_shell_v1 *layer_shell;
@ -82,12 +78,8 @@ struct wb_server {
struct wl_listener gamma_control_set_gamma; struct wl_listener gamma_control_set_gamma;
struct wl_listener new_layer_surface; struct wl_listener new_layer_surface;
struct wl_listener new_xdg_decoration; struct wl_listener new_xdg_decoration;
#if WLR_CHECK_VERSION(0, 18, 0)
struct wl_listener new_xdg_popup; struct wl_listener new_xdg_popup;
struct wl_listener new_xdg_toplevel; struct wl_listener new_xdg_toplevel;
#else
struct wl_listener new_xdg_surface;
#endif
struct wl_listener destroy_inhibit_manager; struct wl_listener destroy_inhibit_manager;
struct wl_listener destroy_inhibitor; struct wl_listener destroy_inhibitor;

View file

@ -18,10 +18,8 @@ struct wb_toplevel {
struct wlr_xdg_toplevel_decoration_v1 *decoration; struct wlr_xdg_toplevel_decoration_v1 *decoration;
#if WLR_CHECK_VERSION(0, 18, 0)
struct wlr_ext_foreign_toplevel_handle_v1 *foreign_toplevel_handle; struct wlr_ext_foreign_toplevel_handle_v1 *foreign_toplevel_handle;
struct wlr_ext_foreign_toplevel_handle_v1_state foreign_toplevel_state; struct wlr_ext_foreign_toplevel_handle_v1_state foreign_toplevel_state;
#endif
struct wl_listener map; struct wl_listener map;
struct wl_listener unmap; struct wl_listener unmap;

View file

@ -29,13 +29,13 @@ inc_dir = include_directories('include')
if get_option('wlroots-version') != '' if get_option('wlroots-version') != ''
wlroots_version = get_option('wlroots-version') wlroots_version = get_option('wlroots-version')
else else
wlroots_version = ['wlroots-0.19', 'wlroots-0.18', 'wlroots'] wlroots_version = ['wlroots-0.20', 'wlroots-0.19', 'wlroots-0.18']
endif endif
libevdev = dependency('libevdev') libevdev = dependency('libevdev')
libinput = dependency('libinput', version: '>=1.21.0', required: false) libinput = dependency('libinput', version: '>=1.21.0', required: false)
libxml2 = dependency('libxml-2.0') libxml2 = dependency('libxml-2.0')
wayland_protos = dependency('wayland-protocols', version: '>=1.27') wayland_protos = dependency('wayland-protocols', version: '>=1.37')
wayland_server = dependency('wayland-server', version: '>=1.15') wayland_server = dependency('wayland-server', version: '>=1.15')
wlroots = dependency(wlroots_version, version: '>=0.17.0') wlroots = dependency(wlroots_version, version: '>=0.17.0')
xkbcommon = dependency('xkbcommon') xkbcommon = dependency('xkbcommon')

View file

@ -140,11 +140,7 @@ static void handle_cursor_button(struct wl_listener *listener, void *data) {
struct wlr_surface *surface = NULL; struct wlr_surface *surface = NULL;
struct wb_toplevel *toplevel = get_toplevel_at(cursor->server, struct wb_toplevel *toplevel = get_toplevel_at(cursor->server,
cursor->server->cursor->cursor->x, cursor->server->cursor->cursor->y, &surface, &sx, &sy); cursor->server->cursor->cursor->x, cursor->server->cursor->cursor->y, &surface, &sx, &sy);
#if WLR_CHECK_VERSION(0, 18, 0)
if (event->state == WL_POINTER_BUTTON_STATE_RELEASED) { if (event->state == WL_POINTER_BUTTON_STATE_RELEASED) {
#else
if (event->state == WLR_BUTTON_RELEASED) {
#endif
/* If you released any buttons, we exit interactive move/resize mode. */ /* If you released any buttons, we exit interactive move/resize mode. */
reset_cursor_mode(cursor->server); reset_cursor_mode(cursor->server);
} else { } else {
@ -164,11 +160,7 @@ static void handle_cursor_axis(struct wl_listener *listener, void *data) {
/* Notify the client with pointer focus of the axis event. */ /* Notify the client with pointer focus of the axis event. */
wlr_seat_pointer_notify_axis(cursor->server->seat->seat, wlr_seat_pointer_notify_axis(cursor->server->seat->seat,
event->time_msec, event->orientation, event->delta, event->time_msec, event->orientation, event->delta,
event->delta_discrete, event->source event->delta_discrete, event->source, event->relative_direction);
#if WLR_CHECK_VERSION(0, 18, 0)
, event->relative_direction
#endif
);
} }
static void handle_cursor_frame(struct wl_listener *listener, void *data) { static void handle_cursor_frame(struct wl_listener *listener, void *data) {

View file

@ -32,10 +32,6 @@ static void handle_new_xdg_toplevel_decoration(struct wl_listener *listener, voi
wl_signal_add(&toplevel_decoration->events.request_mode, &decoration->request_mode); wl_signal_add(&toplevel_decoration->events.request_mode, &decoration->request_mode);
decoration->mode_destroy.notify = free_xdg_decoration_mode; decoration->mode_destroy.notify = free_xdg_decoration_mode;
wl_signal_add(&toplevel_decoration->events.destroy, &decoration->mode_destroy); wl_signal_add(&toplevel_decoration->events.destroy, &decoration->mode_destroy);
#if !WLR_CHECK_VERSION (0, 18, 0)
/* In older versions, this had to be explicitly called for some window decorations to work. */
handle_xdg_decoration_mode(&decoration->request_mode, toplevel_decoration);
#endif
} }
void init_xdg_decoration(struct wb_server *server) { void init_xdg_decoration(struct wb_server *server) {

View file

@ -10,11 +10,6 @@ void output_frame_notify(struct wl_listener *listener, void *data) {
wlr_output_layout_get_box(output->server->output_layout, wlr_output_layout_get_box(output->server->output_layout,
output->wlr_output, &output->geometry); output->wlr_output, &output->geometry);
#if ! WLR_CHECK_VERSION(0, 18, 0)
/* Update the background for the current output size. */
wlr_scene_rect_set_size(output->background,
output->geometry.width, output->geometry.height);
#endif
if (output->gamma_lut_changed) { if (output->gamma_lut_changed) {
output->gamma_lut_changed = false; output->gamma_lut_changed = false;
@ -123,13 +118,6 @@ void new_output_notify(struct wl_listener *listener, void *data) {
output->wlr_output = wlr_output; output->wlr_output = wlr_output;
wlr_output->data = output; wlr_output->data = output;
#if ! WLR_CHECK_VERSION(0, 18, 0)
/* Set the background color */
float color[4] = {0.1875, 0.1875, 0.1875, 1.0};
output->background = wlr_scene_rect_create(&server->scene->tree, 0, 0, color);
wlr_scene_node_lower_to_bottom(&output->background->node);
#endif
/* Initializes the layers */ /* Initializes the layers */
size_t num_layers = sizeof(output->layers) / sizeof(struct wlr_scene_node *); size_t num_layers = sizeof(output->layers) / sizeof(struct wlr_scene_node *);
for (size_t i = 0; i < num_layers; i++) { for (size_t i = 0; i < num_layers; i++) {

View file

@ -5,6 +5,9 @@
#include "idle.h" #include "idle.h"
#include "waybox/server.h" #include "waybox/server.h"
#include "waybox/xdg_shell.h" #include "waybox/xdg_shell.h"
#if WLR_CHECK_VERSION(0, 19, 0)
# include <wlr/types/wlr_xdg_toplevel_icon_v1.h>
#endif
bool wb_create_backend(struct wb_server* server) { bool wb_create_backend(struct wb_server* server) {
/* The Wayland display is managed by libwayland. It handles accepting /* The Wayland display is managed by libwayland. It handles accepting
@ -25,11 +28,7 @@ bool wb_create_backend(struct wb_server* server) {
* output hardware. The autocreate option will choose the most suitable * output hardware. The autocreate option will choose the most suitable
* backend based on the current environment, such as opening an X11 window * backend based on the current environment, such as opening an X11 window
* if an X11 server is running. */ * if an X11 server is running. */
#if WLR_CHECK_VERSION(0, 18, 0)
server->backend = wlr_backend_autocreate(server->wl_event_loop, &server->session); server->backend = wlr_backend_autocreate(server->wl_event_loop, &server->session);
#else
server->backend = wlr_backend_autocreate(server->wl_display, &server->session);
#endif
if (server->backend == NULL) { if (server->backend == NULL) {
wlr_log(WLR_ERROR, "%s", _("Failed to create backend")); wlr_log(WLR_ERROR, "%s", _("Failed to create backend"));
return false; return false;
@ -60,11 +59,7 @@ bool wb_create_backend(struct wb_server* server) {
server->compositor = server->compositor =
wlr_compositor_create(server->wl_display, 5, server->renderer); wlr_compositor_create(server->wl_display, 5, server->renderer);
server->subcompositor = wlr_subcompositor_create(server->wl_display); server->subcompositor = wlr_subcompositor_create(server->wl_display);
#if WLR_CHECK_VERSION(0, 18, 0)
server->output_layout = wlr_output_layout_create(server->wl_display); server->output_layout = wlr_output_layout_create(server->wl_display);
#else
server->output_layout = wlr_output_layout_create();
#endif
server->seat = wb_seat_create(server); server->seat = wb_seat_create(server);
server->cursor = wb_cursor_create(server); server->cursor = wb_cursor_create(server);
@ -107,10 +102,8 @@ bool wb_start_server(struct wb_server* server) {
wlr_data_control_manager_v1_create(server->wl_display); wlr_data_control_manager_v1_create(server->wl_display);
wlr_data_device_manager_create(server->wl_display); wlr_data_device_manager_create(server->wl_display);
#if WLR_CHECK_VERSION(0, 18, 0)
server->foreign_toplevel_list = server->foreign_toplevel_list =
wlr_ext_foreign_toplevel_list_v1_create(server->wl_display, 1); wlr_ext_foreign_toplevel_list_v1_create(server->wl_display, 1);
#endif
server->gamma_control_manager = server->gamma_control_manager =
wlr_gamma_control_manager_v1_create(server->wl_display); wlr_gamma_control_manager_v1_create(server->wl_display);
@ -132,6 +125,11 @@ bool wb_start_server(struct wb_server* server) {
wlr_fractional_scale_manager_v1_create(server->wl_display, 1); wlr_fractional_scale_manager_v1_create(server->wl_display, 1);
wlr_viewporter_create(server->wl_display); wlr_viewporter_create(server->wl_display);
#if WLR_CHECK_VERSION(0, 19, 0)
struct wlr_xdg_toplevel_icon_manager_v1 * icon_manager = wlr_xdg_toplevel_icon_manager_v1_create(server->wl_display, 1);
int sizes[] = {16, 24, 32, 48, 64};
wlr_xdg_toplevel_icon_manager_v1_set_sizes(icon_manager, (int *) sizes, 5);
#endif
return true; return true;
} }
@ -155,12 +153,8 @@ bool wb_terminate(struct wb_server* server) {
wl_list_remove(&server->gamma_control_set_gamma.link); wl_list_remove(&server->gamma_control_set_gamma.link);
wl_list_remove(&server->new_layer_surface.link); wl_list_remove(&server->new_layer_surface.link);
#if WLR_CHECK_VERSION(0, 18, 0)
wl_list_remove(&server->new_xdg_toplevel.link); wl_list_remove(&server->new_xdg_toplevel.link);
wl_list_remove(&server->new_xdg_popup.link); wl_list_remove(&server->new_xdg_popup.link);
#else
wl_list_remove(&server->new_xdg_surface.link);
#endif
wlr_backend_destroy(server->backend); wlr_backend_destroy(server->backend);
wb_seat_destroy(server->seat); wb_seat_destroy(server->seat);

View file

@ -185,9 +185,7 @@ static void xdg_toplevel_destroy(struct wl_listener *listener, void *data) {
struct wlr_xdg_surface *base = toplevel->xdg_toplevel->base; struct wlr_xdg_surface *base = toplevel->xdg_toplevel->base;
wlr_surface_send_leave(base->surface, output); wlr_surface_send_leave(base->surface, output);
update_fractional_scale(base->surface); update_fractional_scale(base->surface);
#if WLR_CHECK_VERSION(0, 18, 0)
wlr_ext_foreign_toplevel_handle_v1_destroy(toplevel->foreign_toplevel_handle); wlr_ext_foreign_toplevel_handle_v1_destroy(toplevel->foreign_toplevel_handle);
#endif
wl_list_remove(&toplevel->map.link); wl_list_remove(&toplevel->map.link);
wl_list_remove(&toplevel->unmap.link); wl_list_remove(&toplevel->unmap.link);
@ -211,22 +209,18 @@ static void xdg_toplevel_set_app_id(
struct wl_listener *listener, void *data) { struct wl_listener *listener, void *data) {
struct wb_toplevel *toplevel = struct wb_toplevel *toplevel =
wl_container_of(listener, toplevel, set_app_id); wl_container_of(listener, toplevel, set_app_id);
#if WLR_CHECK_VERSION(0, 18, 0)
toplevel->foreign_toplevel_state.app_id = toplevel->xdg_toplevel->app_id; toplevel->foreign_toplevel_state.app_id = toplevel->xdg_toplevel->app_id;
wlr_ext_foreign_toplevel_handle_v1_update_state( wlr_ext_foreign_toplevel_handle_v1_update_state(
toplevel->foreign_toplevel_handle, &toplevel->foreign_toplevel_state); toplevel->foreign_toplevel_handle, &toplevel->foreign_toplevel_state);
#endif
} }
static void xdg_toplevel_set_title( static void xdg_toplevel_set_title(
struct wl_listener *listener, void *data) { struct wl_listener *listener, void *data) {
struct wb_toplevel *toplevel = struct wb_toplevel *toplevel =
wl_container_of(listener, toplevel, set_title); wl_container_of(listener, toplevel, set_title);
#if WLR_CHECK_VERSION(0, 18, 0)
toplevel->foreign_toplevel_state.title = toplevel->xdg_toplevel->title; toplevel->foreign_toplevel_state.title = toplevel->xdg_toplevel->title;
wlr_ext_foreign_toplevel_handle_v1_update_state( wlr_ext_foreign_toplevel_handle_v1_update_state(
toplevel->foreign_toplevel_handle, &toplevel->foreign_toplevel_state); toplevel->foreign_toplevel_handle, &toplevel->foreign_toplevel_state);
#endif
} }
static void xdg_toplevel_request_fullscreen( static void xdg_toplevel_request_fullscreen(
@ -428,20 +422,12 @@ static void handle_new_xdg_popup(struct wl_listener *listener, void *data) {
wl_signal_add(&xdg_popup->base->surface->events.commit, &popup->commit); wl_signal_add(&xdg_popup->base->surface->events.commit, &popup->commit);
popup->destroy.notify = xdg_popup_destroy; popup->destroy.notify = xdg_popup_destroy;
#if WLR_CHECK_VERSION (0, 18, 0)
wl_signal_add(&xdg_popup->events.destroy, &popup->destroy); wl_signal_add(&xdg_popup->events.destroy, &popup->destroy);
#else
wl_signal_add(&xdg_popup->base->events.destroy, &popup->destroy);
#endif
} }
static void handle_new_xdg_toplevel(struct wl_listener *listener, void *data) { static void handle_new_xdg_toplevel(struct wl_listener *listener, void *data) {
struct wb_server *server = struct wb_server *server =
#if WLR_CHECK_VERSION (0, 18,0)
wl_container_of(listener, server, new_xdg_toplevel); wl_container_of(listener, server, new_xdg_toplevel);
#else
wl_container_of(listener, server, new_xdg_surface);
#endif
struct wlr_xdg_toplevel *xdg_toplevel = data; struct wlr_xdg_toplevel *xdg_toplevel = data;
/* Allocate a wb_toplevel for this toplevel */ /* Allocate a wb_toplevel for this toplevel */
@ -450,10 +436,8 @@ static void handle_new_xdg_toplevel(struct wl_listener *listener, void *data) {
toplevel->server = server; toplevel->server = server;
toplevel->xdg_toplevel = xdg_toplevel; toplevel->xdg_toplevel = xdg_toplevel;
#if WLR_CHECK_VERSION(0, 18, 0)
toplevel->foreign_toplevel_handle = wlr_ext_foreign_toplevel_handle_v1_create( toplevel->foreign_toplevel_handle = wlr_ext_foreign_toplevel_handle_v1_create(
server->foreign_toplevel_list, &toplevel->foreign_toplevel_state); server->foreign_toplevel_list, &toplevel->foreign_toplevel_state);
#endif
/* Listen to the various events it can emit */ /* Listen to the various events it can emit */
toplevel->map.notify = xdg_toplevel_map; toplevel->map.notify = xdg_toplevel_map;
@ -463,11 +447,7 @@ static void handle_new_xdg_toplevel(struct wl_listener *listener, void *data) {
toplevel->commit.notify = xdg_toplevel_commit; toplevel->commit.notify = xdg_toplevel_commit;
wl_signal_add(&xdg_toplevel->base->surface->events.commit, &toplevel->commit); wl_signal_add(&xdg_toplevel->base->surface->events.commit, &toplevel->commit);
toplevel->destroy.notify = xdg_toplevel_destroy; toplevel->destroy.notify = xdg_toplevel_destroy;
#if WLR_CHECK_VERSION (0, 18, 0)
wl_signal_add(&xdg_toplevel->events.destroy, &toplevel->destroy); wl_signal_add(&xdg_toplevel->events.destroy, &toplevel->destroy);
#else
wl_signal_add(&xdg_toplevel->base->events.destroy, &toplevel->destroy);
#endif
toplevel->new_popup.notify = handle_new_popup; toplevel->new_popup.notify = handle_new_popup;
wl_signal_add(&xdg_toplevel->base->events.new_popup, &toplevel->new_popup); wl_signal_add(&xdg_toplevel->base->events.new_popup, &toplevel->new_popup);
@ -494,29 +474,11 @@ static void handle_new_xdg_toplevel(struct wl_listener *listener, void *data) {
wl_list_insert(&toplevel->server->toplevels, &toplevel->link); wl_list_insert(&toplevel->server->toplevels, &toplevel->link);
} }
#if !WLR_CHECK_VERSION(0, 18, 0)
static void handle_new_xdg_surface(struct wl_listener *listener, void *data) {
struct wlr_xdg_surface *xdg_surface = data;
if (xdg_surface->role == WLR_XDG_SURFACE_ROLE_POPUP) {
handle_new_xdg_popup(listener, xdg_surface->popup);
}
if (xdg_surface->role == WLR_XDG_SURFACE_ROLE_TOPLEVEL) {
handle_new_xdg_toplevel(listener, xdg_surface->toplevel);
}
}
#endif
void init_xdg_shell(struct wb_server *server) { void init_xdg_shell(struct wb_server *server) {
/* xdg-shell version 3 */ /* xdg-shell version 3 */
server->xdg_shell = wlr_xdg_shell_create(server->wl_display, 3); server->xdg_shell = wlr_xdg_shell_create(server->wl_display, 3);
#if WLR_CHECK_VERSION (0, 18, 0)
server->new_xdg_popup.notify = handle_new_xdg_popup; server->new_xdg_popup.notify = handle_new_xdg_popup;
wl_signal_add(&server->xdg_shell->events.new_popup, &server->new_xdg_popup); wl_signal_add(&server->xdg_shell->events.new_popup, &server->new_xdg_popup);
server->new_xdg_toplevel.notify = handle_new_xdg_toplevel; server->new_xdg_toplevel.notify = handle_new_xdg_toplevel;
wl_signal_add(&server->xdg_shell->events.new_toplevel, &server->new_xdg_toplevel); wl_signal_add(&server->xdg_shell->events.new_toplevel, &server->new_xdg_toplevel);
#else
server->new_xdg_surface.notify = handle_new_xdg_surface;
wl_signal_add(&server->xdg_shell->events.new_surface, &server->new_xdg_surface);
#endif
} }