pure Wayland build: conditionally compile wl_xdisplay.c/wl_xwayland.c behind USE_XWAYLAND, add stubs in wl_stubs.c, guard XWayland handler registration in wl_backend.c
This commit is contained in:
parent
b546e9505d
commit
31b621bbd2
|
|
@ -185,7 +185,6 @@ wmaker_SOURCES += \
|
|||
backend/wayland/wl_screen.c \
|
||||
backend/wayland/wl_shm.c \
|
||||
backend/wayland/wl_wings.c \
|
||||
backend/wayland/wl_xdisplay.c \
|
||||
backend/wayland/wl_stubs.c \
|
||||
backend/wayland/wl_clipboard.c \
|
||||
backend/wayland/wl_dnd.c \
|
||||
|
|
@ -202,7 +201,6 @@ wmaker_SOURCES += \
|
|||
backend/wayland/wl_output_mgmt.c \
|
||||
backend/wayland/wl_output.c \
|
||||
backend/wayland/wl_xdg.c \
|
||||
backend/wayland/wl_xwayland.c \
|
||||
backend/wayland/wl_dock.c \
|
||||
backend/wayland/wl_layer_shell.c \
|
||||
backend/wayland/wl_handlers.c \
|
||||
|
|
@ -211,6 +209,7 @@ wmaker_SOURCES += \
|
|||
backend/wayland/wl_input_fwd.c
|
||||
endif
|
||||
|
||||
|
||||
if USE_NESTED_FUNC
|
||||
wmaker_SOURCES += misc.c \
|
||||
xmodifier.c
|
||||
|
|
@ -240,11 +239,12 @@ AM_CPPFLAGS = $(DFLAGS) \
|
|||
-I$(srcdir)/backend/wayland \
|
||||
@HEADER_SEARCH_PATH@
|
||||
|
||||
|
||||
|
||||
if USE_XWAYLAND
|
||||
wmaker_SOURCES += backend/wayland/wl_xdisplay.c backend/wayland/wl_xwayland.c
|
||||
AM_CPPFLAGS += -DUSE_XWAYLAND
|
||||
endif
|
||||
|
||||
|
||||
wmaker_LDADD = \
|
||||
$(top_builddir)/WINGs/libWINGs.la\
|
||||
$(top_builddir)/WINGs/libWUtil.la\
|
||||
|
|
|
|||
|
|
@ -223,9 +223,11 @@ static void handle_layer_shell_new_surface(struct wl_listener *listener, void *d
|
|||
extern void handle_xdg_new_toplevel(struct wl_listener *listener, void *data);
|
||||
extern void handle_new_toplevel_decoration(struct wl_listener *listener, void *data);
|
||||
extern void handle_virtual_pointer_new(struct wl_listener *listener, void *data);
|
||||
#ifdef USE_XWAYLAND
|
||||
extern void handle_xwayland_new_surface(struct wl_listener *listener, void *data);
|
||||
extern void handle_xwayland_ready(struct wl_listener *listener, void *data);
|
||||
extern void handle_xwayland_server_destroy(struct wl_listener *listener, void *data);
|
||||
#endif
|
||||
extern void wm_dock_create(WScreen *scr);
|
||||
extern void handle_backend_new_input(struct wl_listener *listener, void *data);
|
||||
extern void handle_backend_new_output(struct wl_listener *listener, void *data);
|
||||
|
|
@ -877,17 +879,14 @@ wl_display_open(const char *name)
|
|||
* The ready signal fires once Xwayland's socket accepts connections. */
|
||||
wl_state.xwayland = wlr_xwayland_create(wl_state.display,
|
||||
wl_state.compositor, false);
|
||||
#ifdef USE_XWAYLAND
|
||||
if (wl_state.xwayland) {
|
||||
/* Wire server destroy signal to detect early failure (e.g. stale
|
||||
* display lock → Xwayland exits before ready fires). */
|
||||
if (wl_state.xwayland->server) {
|
||||
wl_state.xwayland_server_destroy_listener.notify =
|
||||
handle_xwayland_server_destroy;
|
||||
wl_signal_add(&wl_state.xwayland->server->events.destroy,
|
||||
&wl_state.xwayland_server_destroy_listener);
|
||||
}
|
||||
/* Wire ready signal BEFORE new_surface so Display* is set before
|
||||
* any X11 window events arrive. */
|
||||
wl_state.xwayland_ready_listener.notify = handle_xwayland_ready;
|
||||
wl_signal_add(&wl_state.xwayland->events.ready,
|
||||
&wl_state.xwayland_ready_listener);
|
||||
|
|
@ -895,9 +894,6 @@ wl_display_open(const char *name)
|
|||
wl_signal_add(&wl_state.xwayland->events.new_surface,
|
||||
&wl_state.xwayland_new_surface_listener);
|
||||
wlr_xwayland_set_seat(wl_state.xwayland, wl_state.seat);
|
||||
/* display_name may already be set (display number reserved by wlroots
|
||||
* synchronously); set DISPLAY early as a best-effort so that any
|
||||
* code between here and the ready signal can still find the socket. */
|
||||
if (wl_state.xwayland->display_name) {
|
||||
setenv("DISPLAY", wl_state.xwayland->display_name, 1);
|
||||
wwarning("wl_backend: XWayland starting DISPLAY=%s (eager mode)",
|
||||
|
|
@ -908,6 +904,7 @@ wl_display_open(const char *name)
|
|||
} else {
|
||||
wwarning("wl_backend: XWayland unavailable (X11 clients will not work)");
|
||||
}
|
||||
#endif
|
||||
|
||||
/* periodic timer to drive client frame callbacks at ~60 fps.
|
||||
* Using a timer avoids the swapchain/allocator complexity of the full
|
||||
|
|
|
|||
|
|
@ -49,6 +49,19 @@ void wl_client_set_maximized(WNativeWindow win, int maximized);
|
|||
void wl_client_send_protocol(WWindow *wwin, unsigned long protocol, unsigned long timestamp);
|
||||
void wl_client_kill_impl(WWindow *wwin);
|
||||
char *wl_get_command_for_window(WNativeWindow win, int elements);
|
||||
|
||||
struct _XDisplay;
|
||||
typedef struct _XDisplay Display;
|
||||
|
||||
/* XWayland wrapper stubs — real implementations in wl_xdisplay.c / wl_xwayland.c */
|
||||
void wl_xdisplay_flush(void) {}
|
||||
void wl_xdisplay_sync(int d) { (void)d; }
|
||||
unsigned long wl_xdisplay_intern_atom(const char *n) { (void)n; return 0; }
|
||||
Display *wl_get_x_display(void) { return NULL; }
|
||||
RImage *wl_xwayland_capture_snapshot(WScreen *s, struct wlr_xwayland_surface *xw) { (void)s; (void)xw; return NULL; }
|
||||
float wl_xwayland_get_window_opacity(WNativeWindow cw) { (void)cw; return 1.0f; }
|
||||
RContext *wl_create_rcontext(int screen_number, RContextAttributes *attribs)
|
||||
{ (void)screen_number; return RCreateContextWayland(1920, 1080, attribs); }
|
||||
#if USE_XWAYLAND
|
||||
void wl_client_message_forward(WMEvent *event, WNativeWindow target_win);
|
||||
void wl_client_send_key(WNativeWindow win, unsigned int keycode, unsigned int modifiers, int grabbed);
|
||||
|
|
|
|||
Loading…
Reference in New Issue