fix(overlay): keep Hyprland IPC env when forcing mpv X11 backend

- Stop stripping HYPRLAND_INSTANCE_SIGNATURE in applyX11EnvOverrides so the overlay can use hyprctl to lift Hyprland's fullscreen input block
- Fixes the overlay becoming unclickable over fullscreen mpv with mpv.backend: x11
- Update launcher and backend tests, add changelog fragment
This commit is contained in:
2026-09-30 19:50:24 -07:00
parent eb749f8c19
commit 416cd7e9ac
4 changed files with 13 additions and 4 deletions
@@ -0,0 +1,4 @@
type: fixed
area: overlay
- Fixed the overlay (subtitles and sidebar) becoming unclickable after mpv goes fullscreen on Hyprland with `mpv.backend: x11`. The launcher no longer strips `HYPRLAND_INSTANCE_SIGNATURE` from the X11 environment, so the overlay can lift Hyprland's fullscreen input block again.
+2 -1
View File
@@ -179,7 +179,8 @@ test('buildMpvEnv forces X11 by dropping Wayland hints when backend resolves to
assert.equal(env.DISPLAY, ':1');
assert.equal(env.WAYLAND_DISPLAY, undefined);
assert.equal(env.XDG_SESSION_TYPE, 'x11');
assert.equal(env.HYPRLAND_INSTANCE_SIGNATURE, undefined);
// The overlay inherits this env and needs hyprctl for its XWayland window.
assert.equal(env.HYPRLAND_INSTANCE_SIGNATURE, 'hypr');
assert.equal(env.SWAYSOCK, undefined);
});
});
+2 -2
View File
@@ -82,7 +82,7 @@ test('shouldForceX11MpvBackend honors explicit x11 and auto modes', () => {
});
});
test('applyX11EnvOverrides strips Wayland hints and pins session type to x11', () => {
test('applyX11EnvOverrides strips Wayland hints, keeps Hyprland IPC, and pins session type to x11', () => {
const env = {
DISPLAY: ':1',
WAYLAND_DISPLAY: 'wayland-0',
@@ -94,7 +94,7 @@ test('applyX11EnvOverrides strips Wayland hints and pins session type to x11', (
assert.equal(result, env); // mutates in place
assert.equal(result.DISPLAY, ':1');
assert.equal(result.WAYLAND_DISPLAY, undefined);
assert.equal(result.HYPRLAND_INSTANCE_SIGNATURE, undefined);
assert.equal(result.HYPRLAND_INSTANCE_SIGNATURE, 'hypr');
assert.equal(result.SWAYSOCK, undefined);
assert.equal(result.XDG_SESSION_TYPE, 'x11');
});
+5 -1
View File
@@ -89,10 +89,14 @@ export function shouldForceX11MpvBackend(
/**
* Strip Wayland/compositor hints and pin the session type to X11 on the given env
* object (mutates in place and returns it) so a child mpv process picks XWayland.
*
* HYPRLAND_INSTANCE_SIGNATURE is kept: the overlay app inherits this env through the
* mpv plugin, and Hyprland still manages its XWayland windows. Without hyprctl access
* the overlay cannot lift Hyprland's fullscreen input block, so it stays visible but
* unclickable over fullscreen mpv.
*/
export function applyX11EnvOverrides(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv {
delete env.WAYLAND_DISPLAY;
delete env.HYPRLAND_INSTANCE_SIGNATURE;
delete env.SWAYSOCK;
env.XDG_SESSION_TYPE = 'x11';
return env;