xwayland: don't set DISPLAY

Let the compositor set it. This allows for multiple Xwayland instances to run
at the same time.

Fixes https://github.com/swaywm/wlroots/issues/1442
This commit is contained in:
emersion 2019-03-02 15:14:23 +01:00 committed by Drew DeVault
parent fb106eb979
commit 9601019192
3 changed files with 10 additions and 13 deletions

View file

@ -24,7 +24,6 @@ struct wlr_xwayland {
pid_t pid; pid_t pid;
struct wl_client *client; struct wl_client *client;
struct wl_event_source *sigusr1_source; struct wl_event_source *sigusr1_source;
struct wl_listener client_destroy;
struct wlr_xwm *xwm; struct wlr_xwm *xwm;
struct wlr_xwayland_cursor *cursor; struct wlr_xwayland_cursor *cursor;
int wm_fd[2], wl_fd[2]; int wm_fd[2], wl_fd[2];
@ -34,10 +33,9 @@ struct wlr_xwayland {
/* Anything above display is reset on Xwayland restart, rest is conserved */ /* Anything above display is reset on Xwayland restart, rest is conserved */
int display; int display;
char display_name[16];
int x_fd[2]; int x_fd[2];
struct wl_event_source *x_fd_read_event[2]; struct wl_event_source *x_fd_read_event[2];
struct wl_listener display_destroy;
bool lazy; bool lazy;
struct wl_display *wl_display; struct wl_display *wl_display;
@ -49,8 +47,6 @@ struct wlr_xwayland {
struct wl_signal new_surface; struct wl_signal new_surface;
} events; } events;
struct wl_listener seat_destroy;
/** /**
* Add a custom event handler to xwayland. Return 1 if the event was * Add a custom event handler to xwayland. Return 1 if the event was
* handled or 0 to use the default wlr-xwayland handler. wlr-xwayland will * handled or 0 to use the default wlr-xwayland handler. wlr-xwayland will
@ -58,6 +54,10 @@ struct wlr_xwayland {
*/ */
int (*user_event_handler)(struct wlr_xwm *xwm, xcb_generic_event_t *event); int (*user_event_handler)(struct wlr_xwm *xwm, xcb_generic_event_t *event);
struct wl_listener client_destroy;
struct wl_listener display_destroy;
struct wl_listener seat_destroy;
void *data; void *data;
}; };

View file

@ -382,6 +382,8 @@ struct roots_desktop *desktop_create(struct roots_server *server,
&desktop->xwayland_surface); &desktop->xwayland_surface);
desktop->xwayland_surface.notify = handle_xwayland_surface; desktop->xwayland_surface.notify = handle_xwayland_surface;
setenv("DISPLAY", desktop->xwayland->display_name, true);
if (wlr_xcursor_manager_load(desktop->xcursor_manager, 1)) { if (wlr_xcursor_manager_load(desktop->xcursor_manager, 1)) {
wlr_log(WLR_ERROR, "Cannot load XWayland XCursor theme"); wlr_log(WLR_ERROR, "Cannot load XWayland XCursor theme");
} }

View file

@ -165,12 +165,9 @@ static void xwayland_finish_display(struct wlr_xwayland *wlr_xwayland) {
unlink_display_sockets(wlr_xwayland->display); unlink_display_sockets(wlr_xwayland->display);
wlr_xwayland->display = -1; wlr_xwayland->display = -1;
unsetenv("DISPLAY"); wlr_xwayland->display_name[0] = '\0';
} }
static bool xwayland_start_display(struct wlr_xwayland *wlr_xwayland,
struct wl_display *wl_display);
static bool xwayland_start_server(struct wlr_xwayland *wlr_xwayland); static bool xwayland_start_server(struct wlr_xwayland *wlr_xwayland);
static bool xwayland_start_server_lazy(struct wlr_xwayland *wlr_xwayland); static bool xwayland_start_server_lazy(struct wlr_xwayland *wlr_xwayland);
@ -284,10 +281,8 @@ static bool xwayland_start_display(struct wlr_xwayland *wlr_xwayland,
return false; return false;
} }
char display_name[16]; snprintf(wlr_xwayland->display_name, sizeof(wlr_xwayland->display_name),
snprintf(display_name, sizeof(display_name), ":%d", wlr_xwayland->display); ":%d", wlr_xwayland->display);
setenv("DISPLAY", display_name, true);
return true; return true;
} }