2023-01-07 17:50:33 -05:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
2023-05-13 16:10:33 +03:00
|
|
|
#ifndef LABWC_XWAYLAND_H
|
|
|
|
|
#define LABWC_XWAYLAND_H
|
2023-01-07 17:50:33 -05:00
|
|
|
#include "config.h"
|
2024-01-24 18:06:57 +01:00
|
|
|
|
2023-01-07 17:50:33 -05:00
|
|
|
#if HAVE_XWAYLAND
|
2024-01-24 18:06:57 +01:00
|
|
|
#include <assert.h>
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
#include <xcb/xcb.h>
|
|
|
|
|
#include "common/macros.h"
|
2023-01-07 17:50:33 -05:00
|
|
|
#include "view.h"
|
|
|
|
|
|
|
|
|
|
struct wlr_compositor;
|
2022-11-22 05:11:50 -05:00
|
|
|
struct wlr_output;
|
|
|
|
|
struct wlr_output_layout;
|
2023-01-07 17:50:33 -05:00
|
|
|
|
2024-01-24 18:06:57 +01:00
|
|
|
static const char * const atom_names[] = {
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_DESKTOP",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_DOCK",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_TOOLBAR",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_MENU",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_UTILITY",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_SPLASH",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_DIALOG",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_DROPDOWN_MENU",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_POPUP_MENU",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_TOOLTIP",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_NOTIFICATION",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_COMBO",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_DND",
|
|
|
|
|
"_NET_WM_WINDOW_TYPE_NORMAL",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static_assert(
|
2024-04-19 20:15:49 +02:00
|
|
|
ARRAY_SIZE(atom_names) == WINDOW_TYPE_LEN,
|
2024-01-24 18:06:57 +01:00
|
|
|
"Xwayland atoms out of sync");
|
|
|
|
|
|
2024-04-19 20:15:49 +02:00
|
|
|
extern xcb_atom_t atoms[WINDOW_TYPE_LEN];
|
2024-01-24 18:06:57 +01:00
|
|
|
|
2023-01-07 17:50:33 -05:00
|
|
|
struct xwayland_unmanaged {
|
|
|
|
|
struct server *server;
|
|
|
|
|
struct wlr_xwayland_surface *xwayland_surface;
|
|
|
|
|
struct wlr_scene_node *node;
|
|
|
|
|
struct wl_list link;
|
|
|
|
|
|
2023-06-15 02:35:43 -07:00
|
|
|
struct mappable mappable;
|
|
|
|
|
|
|
|
|
|
struct wl_listener associate;
|
|
|
|
|
struct wl_listener dissociate;
|
2023-01-07 17:50:33 -05:00
|
|
|
struct wl_listener request_activate;
|
|
|
|
|
struct wl_listener request_configure;
|
|
|
|
|
/* struct wl_listener request_fullscreen; */
|
|
|
|
|
struct wl_listener set_geometry;
|
|
|
|
|
struct wl_listener destroy;
|
2023-10-16 02:01:35 -04:00
|
|
|
struct wl_listener set_override_redirect;
|
2023-01-07 17:50:33 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct xwayland_view {
|
|
|
|
|
struct view base;
|
|
|
|
|
struct wlr_xwayland_surface *xwayland_surface;
|
|
|
|
|
|
|
|
|
|
/* Events unique to XWayland views */
|
2023-06-15 02:35:43 -07:00
|
|
|
struct wl_listener associate;
|
|
|
|
|
struct wl_listener dissociate;
|
2023-02-24 21:27:11 +00:00
|
|
|
struct wl_listener request_activate;
|
2023-01-07 17:50:33 -05:00
|
|
|
struct wl_listener request_configure;
|
2023-10-16 02:01:35 -04:00
|
|
|
struct wl_listener set_class;
|
2023-01-07 17:50:33 -05:00
|
|
|
struct wl_listener set_decorations;
|
2023-10-16 02:01:35 -04:00
|
|
|
struct wl_listener set_override_redirect;
|
2022-11-22 05:11:50 -05:00
|
|
|
struct wl_listener set_strut_partial;
|
2024-01-24 18:06:57 +01:00
|
|
|
struct wl_listener set_window_type;
|
2024-02-12 19:52:36 -05:00
|
|
|
struct wl_listener map_request;
|
2023-01-07 17:50:33 -05:00
|
|
|
|
|
|
|
|
/* Not (yet) implemented */
|
|
|
|
|
/* struct wl_listener set_role; */
|
|
|
|
|
/* struct wl_listener set_hints; */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void xwayland_unmanaged_create(struct server *server,
|
|
|
|
|
struct wlr_xwayland_surface *xsurface, bool mapped);
|
|
|
|
|
|
2023-04-19 18:10:07 -04:00
|
|
|
void xwayland_view_create(struct server *server,
|
|
|
|
|
struct wlr_xwayland_surface *xsurface, bool mapped);
|
2023-04-17 17:02:11 +01:00
|
|
|
|
2023-01-07 17:50:33 -05:00
|
|
|
struct wlr_xwayland_surface *xwayland_surface_from_view(struct view *view);
|
|
|
|
|
|
|
|
|
|
void xwayland_server_init(struct server *server,
|
|
|
|
|
struct wlr_compositor *compositor);
|
|
|
|
|
void xwayland_server_finish(struct server *server);
|
|
|
|
|
|
2022-11-22 05:11:50 -05:00
|
|
|
void xwayland_adjust_usable_area(struct view *view,
|
|
|
|
|
struct wlr_output_layout *layout, struct wlr_output *output,
|
|
|
|
|
struct wlr_box *usable);
|
|
|
|
|
|
2023-10-24 13:49:15 -04:00
|
|
|
void xwayland_update_workarea(struct server *server);
|
|
|
|
|
|
2024-06-10 00:01:54 +02:00
|
|
|
void xwayland_reset_cursor(struct server *server);
|
|
|
|
|
|
2023-01-07 17:50:33 -05:00
|
|
|
#endif /* HAVE_XWAYLAND */
|
2023-05-13 16:10:33 +03:00
|
|
|
#endif /* LABWC_XWAYLAND_H */
|