fix: save host WAYLAND_DISPLAY before overwrite, restore on close so restart finds the host compositor
This commit is contained in:
parent
bfa715a99e
commit
b26a4c733c
|
|
@ -326,6 +326,14 @@ wl_display_open(const char *name)
|
||||||
wl_state.is_nested = 1; /* explicit override: force nested */
|
wl_state.is_nested = 1; /* explicit override: force nested */
|
||||||
else
|
else
|
||||||
wl_state.is_nested = (wayland_display && wayland_display[0]) ? 1 : 0;
|
wl_state.is_nested = (wayland_display && wayland_display[0]) ? 1 : 0;
|
||||||
|
/* Save the host compositor's WAYLAND_DISPLAY before anything
|
||||||
|
* overwrites it, so restart (execvp) can restore it and the
|
||||||
|
* new instance can find the host compositor. */
|
||||||
|
const char *_hwd = getenv("WAYLAND_DISPLAY");
|
||||||
|
if (_hwd)
|
||||||
|
snprintf(wl_state.host_wayland_display, sizeof(wl_state.host_wayland_display), "%s", _hwd);
|
||||||
|
else
|
||||||
|
wl_state.host_wayland_display[0] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Always create a headless backend for the output in headless mode. */
|
/* Always create a headless backend for the output in headless mode. */
|
||||||
|
|
@ -894,6 +902,9 @@ wl_display_close(void)
|
||||||
unlink(path);
|
unlink(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (wl_state.host_wayland_display[0])
|
||||||
|
setenv("WAYLAND_DISPLAY", wl_state.host_wayland_display, 1);
|
||||||
|
else
|
||||||
unsetenv("WAYLAND_DISPLAY");
|
unsetenv("WAYLAND_DISPLAY");
|
||||||
wl_state.renderer = NULL;
|
wl_state.renderer = NULL;
|
||||||
wl_state.backend = NULL;
|
wl_state.backend = NULL;
|
||||||
|
|
@ -909,6 +920,7 @@ wl_display_close(void)
|
||||||
wl_state.started = 0;
|
wl_state.started = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
wl_display_post_open(const char *display_name, int *multi_head_out)
|
wl_display_post_open(const char *display_name, int *multi_head_out)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -213,7 +213,8 @@ struct wl_compositor_state {
|
||||||
struct wlr_scene_output *scene_output;
|
struct wlr_scene_output *scene_output;
|
||||||
struct wl_listener backend_new_output_listener;
|
struct wl_listener backend_new_output_listener;
|
||||||
struct wl_listener output_frame_listener;
|
struct wl_listener output_frame_listener;
|
||||||
char socket_name[64]; /* Phase 34: e.g. "wayland-0" */
|
char socket_name[64];
|
||||||
|
char host_wayland_display[64]; /* saved from env before overwrite */
|
||||||
int started; /* non-zero after successful display_open */
|
int started; /* non-zero after successful display_open */
|
||||||
/* Self-pipe for async-signal-safe shutdown: signal handler writes to [1],
|
/* Self-pipe for async-signal-safe shutdown: signal handler writes to [1],
|
||||||
* event loop reads [0] and calls wl_display_terminate(). */
|
* event loop reads [0] and calls wl_display_terminate(). */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue