mirror of
https://github.com/wizbright/waybox.git
synced 2025-10-29 05:40:20 -04:00
Removed support for wlroots 0.17, added support for wlroots 0.20-dev
This commit is contained in:
parent
4c6a762e12
commit
557bb4ae05
9 changed files with 11 additions and 93 deletions
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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')
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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++) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue