Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package waywall for openSUSE:Factory checked in at 2026-10-20 12:42:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/waywall (Old) and /work/SRC/openSUSE:Factory/.waywall.new.3698736 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "waywall" Tue Oct 20 12:42:19 2026 rev:3 rq:1386308 version:0.2026.10.12b Changes: -------- --- /work/SRC/openSUSE:Factory/waywall/waywall.changes 2026-06-22 17:28:51.868544163 +0200 +++ /work/SRC/openSUSE:Factory/.waywall.new.3698736/waywall.changes 2026-10-20 12:42:34.570171408 +0200 @@ -1,0 +2,14 @@ +Sun Oct 18 18:05:11 UTC 2026 - jan gaza <[email protected]> + +- Update to version 0.2026.10.12b: + * Added support for Minecraft 26.3 + * Added support for raw input sensitivity multiplier + * Added waywall.set_raw_sensitivity to the Lua API + * Subprocesses are now killed with SIGTERM instead of SIGKILL + * Added logging for XDG_SESSION_DESKTOP + * Fixed crashes when using River 0.4 and Jay compositors + * Fixed MCSR Launcher instances not being recognized + * Fixed a crash when spawned subprocesses exit on NVIDIA systems + * Fixed a crash when the same coroutine resumes more than once + +------------------------------------------------------------------- Old: ---- waywall-0.2026.06.13.tar.gz New: ---- waywall-0.2026.10.12b.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ waywall.spec ++++++ --- /var/tmp/diff_new_pack.eOX3Qw/_old 2026-10-20 12:42:35.315202589 +0200 +++ /var/tmp/diff_new_pack.eOX3Qw/_new 2026-10-20 12:42:35.318202714 +0200 @@ -17,7 +17,7 @@ %global __provides_exclude_from ^%{_libdir}/waywall-glfw/.*$ Name: waywall -Version: 0.2026.06.13 +Version: 0.2026.10.12b Release: 0 Summary: Wayland compositor for Minecraft speedrunning License: GPL-3.0-only AND Zlib ++++++ waywall-0.2026.06.13.tar.gz -> waywall-0.2026.10.12b.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/doc/01_options_input.md new/waywall-0.2026.10.12b/doc/01_options_input.md --- old/waywall-0.2026.06.13/doc/01_options_input.md 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/doc/01_options_input.md 2026-10-12 05:19:53.000000000 +0200 @@ -24,6 +24,7 @@ -- mouse options sensitivity = 1.0, + raw_sensitivity = 1.0, confine_pointer = false, }, } @@ -89,14 +90,21 @@ ## Mouse sensitivity -The `sensitivity` option applies a constant multiplier to your mouse motion -while aiming with the camera ingame. The default value of `1.0` results in -no change, while `2.0` would make it twice as fast and `0.5` would make it -half as fast. +The `sensitivity` and `raw_sensitivity` options apply a constant multiplier +to your mouse motion while aiming with the camera ingame. +The default value of `1.0` results in no change, while `2.0` would make it +twice as fast and `0.5` would make it half as fast. + +These options take effect: +- `sensitivity` - when *Raw Input* is disabled ingame, +- `raw_sensitivity` - when *Raw Input* is enabled or when playing + on new versions (≥ 26.3). + +When *Raw Input* is enabled the host compositor's sensitivity is not used. > [!IMPORTANT] > This option only affects your camera movement, *not* your mouse movement in -> menus. Additionally, it only takes effect **when Raw Input is disabled ingame.** +> menus. ## Pointer confinement diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/doc/02_helpers_toggle_res.md new/waywall-0.2026.10.12b/doc/02_helpers_toggle_res.md --- old/waywall-0.2026.06.13/doc/02_helpers_toggle_res.md 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/doc/02_helpers_toggle_res.md 2026-10-12 05:19:53.000000000 +0200 @@ -4,16 +4,17 @@ provided resolution and no resolution (stretching Minecraft back to the bounds of the waywall window). -If a value is provided for the `sens` parameter, toggling to the given -resolution will set the mouse sensitivity to that value. Toggling away from the -resolution will set the sensitivity back to the default value specified in the -[input configuration table]. +If a `number` value is provided for the `sens` and/or `raw_sens` parameters, +toggling to the given resolution will set the mouse sensitivity to those values. +Toggling away from the resolution will set the sensitivity back to the default +values specified in the [input configuration table]. ### Arguments - `width`: number - `height`: number - `sens`: number (optional) + - `raw_sens`: number (optional) ### Return values diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/doc/02_waywall_exec.md new/waywall-0.2026.10.12b/doc/02_waywall_exec.md --- old/waywall-0.2026.06.13/doc/02_waywall_exec.md 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/doc/02_waywall_exec.md 2026-10-12 05:19:53.000000000 +0200 @@ -6,7 +6,7 @@ script. If the spawned subprocess does not exit before waywall, it will be killed with -`SIGKILL` when waywall closes. +`SIGTERM` when waywall closes. ### Arguments diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/doc/02_waywall_set_raw_sensitivity.md new/waywall-0.2026.10.12b/doc/02_waywall_set_raw_sensitivity.md --- old/waywall-0.2026.06.13/doc/02_waywall_set_raw_sensitivity.md 1970-01-01 01:00:00.000000000 +0100 +++ new/waywall-0.2026.10.12b/doc/02_waywall_set_raw_sensitivity.md 2026-10-12 05:19:53.000000000 +0200 @@ -0,0 +1,18 @@ +# set_raw_sensitivity + +This function changes the mouse sensitivity multiplier which is used for +camera movement when using raw input (unaccelerated by the host compositor). +If the provided sensitivity is 0, the sensitivity will instead be reset +to whatever value you have specified in the [input configuration table]. + +### Arguments + + - `sensitivity`: number + +### Return values + +None + +> This function cannot be called during startup. + +[input configuration table]: 01_options_input.md diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/doc/SUMMARY.md new/waywall-0.2026.10.12b/doc/SUMMARY.md --- old/waywall-0.2026.06.13/doc/SUMMARY.md 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/doc/SUMMARY.md 2026-10-12 05:19:53.000000000 +0200 @@ -34,6 +34,7 @@ - [press_key](02_waywall_press_key.md) - [profile](02_waywall_profile.md) - [set_keymap](02_waywall_set_keymap.md) + - [set_raw_sensitivity](02_waywall_set_raw_sensitivity.md) - [set_remaps](02_waywall_set_remaps.md) - [set_resolution](02_waywall_set_resolution.md) - [set_sensitivity](02_waywall_set_sensitivity.md) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/include/config/config.h new/waywall-0.2026.10.12b/include/config/config.h --- old/waywall-0.2026.06.13/include/config/config.h 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/include/config/config.h 2026-10-12 05:19:53.000000000 +0200 @@ -38,6 +38,7 @@ int repeat_rate, repeat_delay; double sens; + double raw_sens; bool confine; } input; struct { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/include/server/server.h new/waywall-0.2026.10.12b/include/server/server.h --- old/waywall-0.2026.06.13/include/server/server.h 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/include/server/server.h 2026-10-12 05:19:53.000000000 +0200 @@ -49,6 +49,7 @@ bool confine; double sens; + double raw_sens; bool applied; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/include/server/ui.h new/waywall-0.2026.10.12b/include/server/ui.h --- old/waywall-0.2026.06.13/include/server/ui.h 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/include/server/ui.h 2026-10-12 05:19:53.000000000 +0200 @@ -33,7 +33,7 @@ int32_t width, height; int32_t render_width, render_height; int32_t fullscreen_width, fullscreen_height; - bool mapped, resize, fullscreen; + bool mapped, configured, resize, fullscreen; struct wl_list views; // server_view.link diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/include/server/wp_relative_pointer.h new/waywall-0.2026.10.12b/include/server/wp_relative_pointer.h --- old/waywall-0.2026.06.13/include/server/wp_relative_pointer.h 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/include/server/wp_relative_pointer.h 2026-10-12 05:19:53.000000000 +0200 @@ -10,6 +10,7 @@ struct { double sens; + double raw_sens; } config; struct server *server; @@ -31,3 +32,6 @@ struct config *cfg); void server_relative_pointer_set_sens(struct server_relative_pointer *relative_pointer, double sens); + +void server_relative_pointer_set_raw_sens(struct server_relative_pointer *relative_pointer, + double sens); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/config/api.c new/waywall-0.2026.10.12b/waywall/config/api.c --- old/waywall-0.2026.06.13/waywall/config/api.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/config/api.c 2026-10-12 05:19:53.000000000 +0200 @@ -828,6 +828,32 @@ } static int +l_set_raw_sensitivity(lua_State *L) { + static constexpr int ARG_SENS = 1; + + // Prologue + struct config_vm *vm = config_vm_from(L); + struct wrap *wrap = config_vm_get_wrap(vm); + if (!wrap) { + return luaL_error(L, STARTUP_ERRMSG("set_raw_sensitivity")); + } + + double sens = luaL_checknumber(L, ARG_SENS); + luaL_argcheck(L, sens >= 0, ARG_SENS, "sensitivity must be a positive number"); + + lua_settop(L, ARG_SENS); + + // Body + if (sens == 0) { + sens = wrap->cfg->input.raw_sens; + } + server_relative_pointer_set_raw_sens(wrap->server->relative_pointer, sens); + + // Epilogue + return 0; +} + +static int l_show_floating(lua_State *L) { static constexpr int ARG_SHOW = 1; @@ -1264,6 +1290,7 @@ {"set_remaps", l_set_remaps}, {"set_resolution", l_set_resolution}, {"set_sensitivity", l_set_sensitivity}, + {"set_raw_sensitivity", l_set_raw_sensitivity}, {"show_floating", l_show_floating}, {"sleep", l_sleep}, {"state", l_state}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/config/config.c new/waywall-0.2026.10.12b/waywall/config/config.c --- old/waywall-0.2026.06.13/waywall/config/config.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/config/config.c 2026-10-12 05:19:53.000000000 +0200 @@ -47,6 +47,7 @@ .repeat_rate = -1, .repeat_delay = -1, .sens = 1.0, + .raw_sens = 1.0, .confine = false, }, .theme = @@ -650,6 +651,14 @@ return 1; } + if (get_double(cfg, "raw_sensitivity", &cfg->input.raw_sens, "input.raw_sensitivity", false) != 0) { + return 1; + } + if (cfg->input.raw_sens <= 0) { + ww_log(LOG_ERROR, "'input.raw_sensitivity' must be a positive, non-zero number"); + return 1; + } + if (get_bool(cfg, "confine_pointer", &cfg->input.confine, "input.confine_pointer", false) != 0) { return 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/config/vm.c new/waywall-0.2026.10.12b/waywall/config/vm.c --- old/waywall-0.2026.06.13/waywall/config/vm.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/config/vm.c 2026-10-12 05:19:53.000000000 +0200 @@ -85,7 +85,9 @@ static void waker_destroy(struct config_vm_waker *waker) { - config_vm_coro_del(waker->L); + if (waker->L) { + config_vm_coro_del(waker->L); + } waker->destroy(waker, waker->data); wl_list_remove(&waker->link); @@ -316,7 +318,13 @@ switch (ret) { case LUA_YIELD: process_yield(waker->L); + + // Either a valid new waker was associated with the coroutine, in which case we do *not* + // want the coroutine to be deleted from the coroutines table, or no new valid waker was + // associated, in which case the coroutine was already deleted by process_yield. + waker->L = nullptr; waker_destroy(waker); + return; case 0: // The coroutine returned a value and cannot be resumed again. Remove it from the list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/instance.c new/waywall-0.2026.10.12b/waywall/instance.c --- old/waywall-0.2026.06.13/waywall/instance.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/instance.c 2026-10-12 05:19:53.000000000 +0200 @@ -45,7 +45,6 @@ "logs", "resourcepacks", "saves", - "screenshots", }; DIR *dir = opendir(dirname); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/lua/api.lua new/waywall-0.2026.10.12b/waywall/lua/api.lua --- old/waywall-0.2026.06.13/waywall/lua/api.lua 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/lua/api.lua 2026-10-12 05:19:53.000000000 +0200 @@ -111,6 +111,10 @@ -- are valid keys.) M.set_keymap = priv.set_keymap +--- Sets the raw input sensitivity multiplier for relative pointer motion. +-- @param sensitivity The multiplier to use. A value of zero resets sensitivity. +M.set_raw_sensitivity = priv.set_raw_sensitivity + --- Sets the input remapping map, corresponding to config.input.remaps. -- @param remaps A table containing the remapping map, with the same format as -- config.input.remaps. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/lua/helpers.lua new/waywall-0.2026.10.12b/waywall/lua/helpers.lua --- old/waywall-0.2026.06.13/waywall/lua/helpers.lua 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/lua/helpers.lua 2026-10-12 05:19:53.000000000 +0200 @@ -99,13 +99,15 @@ -- @param width The width to set the Minecraft window to. -- @param height The height to set the Minecraft window to. -- @param sens The sensitivity to use when toggling resolution, if any. +-- @param raw_sens The raw_sensitivity to use when toggling resolution, if any. -- @return toggle_res A function which can be used to switch resolutions. -M.toggle_res = function(width, height, sens) +M.toggle_res = function(width, height, sens, raw_sens) return function() local act_width, act_height = waywall.active_res() if act_width == width and act_height == height then waywall.set_resolution(0, 0) waywall.set_sensitivity(0) + waywall.set_raw_sensitivity(0) else waywall.set_resolution(width, height) if type(sens) == "number" then @@ -113,6 +115,11 @@ else waywall.set_sensitivity(0) end + if type(raw_sens) == "number" then + waywall.set_raw_sensitivity(raw_sens) + else + waywall.set_raw_sensitivity(0) + end end return true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/main.c new/waywall-0.2026.10.12b/waywall/main.c --- old/waywall-0.2026.06.13/waywall/main.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/main.c 2026-10-12 05:19:53.000000000 +0200 @@ -145,7 +145,7 @@ } ww_log_errno(LOG_ERROR, "failed to exec '%s' in child process", argv[0]); - exit(EXIT_FAILURE); + _exit(EXIT_FAILURE); } else if (ww.child == -1) { // Parent process (error) ww_log_errno(LOG_ERROR, "failed to fork child process"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/scene.c new/waywall-0.2026.10.12b/waywall/scene.c --- old/waywall-0.2026.06.13/waywall/scene.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/scene.c 2026-10-12 05:19:53.000000000 +0200 @@ -522,11 +522,9 @@ glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); struct scene_object *object; - struct wl_list *positive_depth = nullptr; glEnable(GL_STENCIL_TEST); wl_list_for_each (object, &scene->objects.sorted, link) { if (object->depth >= 0) { - positive_depth = object->link.prev; break; } @@ -543,8 +541,8 @@ wl_list_for_each (object, &scene->objects.unsorted_text, link) { text_render(object); } - if (positive_depth) { - wl_list_for_each (object, positive_depth, link) { + wl_list_for_each (object, &scene->objects.sorted, link) { + if (object->depth >= 0) { object_render(object); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/server/server.c new/waywall-0.2026.10.12b/waywall/server/server.c --- old/waywall-0.2026.06.13/waywall/server/server.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/server/server.c 2026-10-12 05:19:53.000000000 +0200 @@ -315,6 +315,7 @@ server_ui_use_config(server->ui, config->ui); server->relative_pointer->config.sens = config->sens; + server->relative_pointer->config.raw_sens = config->raw_sens; server_pointer_constraints_set_confine(server->pointer_constraints, config->confine); config->applied = true; @@ -326,6 +327,7 @@ config->confine = cfg->input.confine; config->sens = cfg->input.sens; + config->raw_sens = cfg->input.raw_sens; config->cursor = server_cursor_config_create(server->cursor, cfg); if (!config->cursor) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/server/ui.c new/waywall-0.2026.10.12b/waywall/server/ui.c --- old/waywall-0.2026.06.13/waywall/server/ui.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/server/ui.c 2026-10-12 05:19:53.000000000 +0200 @@ -19,6 +19,7 @@ #include <linux/memfd.h> #include <stdlib.h> #include <sys/mman.h> +#include <time.h> #include <unistd.h> #include <wayland-client-core.h> #include <wayland-client-protocol.h> @@ -293,6 +294,14 @@ xdg_surface_ack_configure(xdg_surface, serial); + // The initial configure sequence for an xdg_surface may or may not include an + // xdg_toplevel.configure event with nonzero dimensions (e.g. Jay sends an empty initial + // configure, whereas river's separate window manager can take a while to send toplevel + // state). Track receipt of the initial configure separately from `resize` and `mapped`: + // `mapped` specifically means "a buffer is attached," which is only set once + // server_ui_show() has actually attached one. + ui->configured = true; + if (ui->resize) { wl_signal_emit_mutable(&ui->events.resize, nullptr); ui->resize = false; @@ -484,9 +493,16 @@ wl_surface_commit(ui->root.surface); wl_display_roundtrip(display); + // HACK: We need to wait until the toplevel has received a configure event to be able to attach + // a buffer, but on some compositors (e.g. newer, non-monolithic versions of river) it may take + // the compositor some time to send a configure event. + while (!ui->configured) { + wl_display_roundtrip(display); + nanosleep(&(struct timespec){.tv_nsec = 10'000'000}, nullptr); + } + wl_surface_attach(ui->root.surface, ui->config->background, 0, 0); wl_surface_commit(ui->root.surface); - wl_display_roundtrip(display); ui->mapped = true; wl_signal_emit_mutable(&ui->server->events.map_status, &ui->mapped); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/server/wp_relative_pointer.c new/waywall-0.2026.10.12b/waywall/server/wp_relative_pointer.c --- old/waywall-0.2026.06.13/waywall/server/wp_relative_pointer.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/server/wp_relative_pointer.c 2026-10-12 05:19:53.000000000 +0200 @@ -35,8 +35,8 @@ double y = trunc(relative_pointer->acc_y); relative_pointer->acc_y -= y; - relative_pointer->acc_x_unaccel += wl_fixed_to_double(dx_unaccel); - relative_pointer->acc_y_unaccel += wl_fixed_to_double(dy_unaccel); + relative_pointer->acc_x_unaccel += wl_fixed_to_double(dx_unaccel) * relative_pointer->config.raw_sens; + relative_pointer->acc_y_unaccel += wl_fixed_to_double(dy_unaccel) * relative_pointer->config.raw_sens; double x_unaccel = trunc(relative_pointer->acc_x_unaccel); relative_pointer->acc_x_unaccel -= x_unaccel; @@ -197,6 +197,7 @@ wl_display_add_destroy_listener(server->display, &relative_pointer->on_display_destroy); relative_pointer->config.sens = cfg->input.sens; + relative_pointer->config.raw_sens = cfg->input.raw_sens; return relative_pointer; } @@ -204,3 +205,8 @@ server_relative_pointer_set_sens(struct server_relative_pointer *relative_pointer, double sens) { relative_pointer->config.sens = sens; } + +void +server_relative_pointer_set_raw_sens(struct server_relative_pointer *relative_pointer, double sens) { + relative_pointer->config.raw_sens = sens; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/server/xdg_shell.c new/waywall-0.2026.10.12b/waywall/server/xdg_shell.c --- old/waywall-0.2026.06.13/waywall/server/xdg_shell.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/server/xdg_shell.c 2026-10-12 05:19:53.000000000 +0200 @@ -245,8 +245,11 @@ static void xdg_toplevel_set_parent(struct wl_client *client, struct wl_resource *resource, struct wl_resource *toplevel_resource) { - // Unused. - wl_client_post_implementation_error(client, "xdg_toplevel.set_parent is not supported"); + // SDL sends xdg_toplevel::set_parent(null) on startup, + // which is a no-op if no parent is already set. + if (toplevel_resource != nullptr) { + wl_client_post_implementation_error(client, "xdg_toplevel.set_parent is not supported"); + } } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/server/xserver.c new/waywall-0.2026.10.12b/waywall/server/xserver.c --- old/waywall-0.2026.06.13/waywall/server/xserver.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/server/xserver.c 2026-10-12 05:19:53.000000000 +0200 @@ -453,7 +453,7 @@ if (srv->pid == 0) { // Child process xserver_exec(srv, notify_fd[1], log_fd); - exit(EXIT_FAILURE); + _exit(EXIT_FAILURE); } else if (srv->pid == -1) { // Parent process (error) ww_log_errno(LOG_ERROR, "failed to fork xwayland"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/subproc.c new/waywall-0.2026.10.12b/waywall/subproc.c --- old/waywall-0.2026.06.13/waywall/subproc.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/subproc.c 2026-10-12 05:19:53.000000000 +0200 @@ -64,7 +64,7 @@ for (ssize_t i = 0; i < subproc->entries.len; i++) { struct subproc_entry *entry = &subproc->entries.data[i]; - if (pidfd_send_signal(entry->pidfd, SIGKILL, nullptr, 0) != 0) { + if (pidfd_send_signal(entry->pidfd, SIGTERM, nullptr, 0) != 0) { if (errno != ESRCH) { ww_log_errno(LOG_ERROR, "failed to kill child process %jd", (intmax_t)entry->pid); } @@ -88,11 +88,11 @@ int out = open("/dev/null", O_WRONLY); if (out == -1) { ww_log_errno(LOG_ERROR, "failed to open /dev/null in child process"); - exit(EXIT_FAILURE); + _exit(EXIT_FAILURE); } if (dup2(out, STDOUT_FILENO) == -1) { ww_log_errno(LOG_ERROR, "failed to duplicate /dev/null to stdout in child process"); - exit(EXIT_FAILURE); + _exit(EXIT_FAILURE); } char **arg_list = zalloc(cmd.len + 1, sizeof(*arg_list)); @@ -101,8 +101,8 @@ } execvp(arg_list[0], arg_list); - ww_log_errno(LOG_ERROR, "failed to execvp() in child porcess"); - exit(EXIT_FAILURE); + ww_log_errno(LOG_ERROR, "failed to execvp() in child process"); + _exit(EXIT_FAILURE); } else if (pid == -1) { // Parent process (error) ww_log_errno(LOG_ERROR, "failed to fork() child process"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/util/sysinfo.c new/waywall-0.2026.10.12b/waywall/util/sysinfo.c --- old/waywall-0.2026.06.13/waywall/util/sysinfo.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/util/sysinfo.c 2026-10-12 05:19:53.000000000 +0200 @@ -85,6 +85,13 @@ ww_log(LOG_INFO, "libwayland version: %s", WAYLAND_VERSION); } +static void +log_host_compositor() { + const char *xdg_session_desktop = getenv("XDG_SESSION_DESKTOP"); + + ww_log(LOG_INFO, "XDG_SESSION_DESKTOP: %s", xdg_session_desktop ? xdg_session_desktop : "undefined"); +} + void sysinfo_dump_log() { ww_log(LOG_INFO, "---- SYSTEM INFO"); @@ -93,6 +100,7 @@ log_max_files(); log_inotify_limits(); log_wl_version(); + log_host_compositor(); ww_log(LOG_INFO, "---- END SYSTEM INFO"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/waywall-0.2026.06.13/waywall/wrap.c new/waywall-0.2026.10.12b/waywall/wrap.c --- old/waywall-0.2026.06.13/waywall/wrap.c 2026-06-13 20:02:32.000000000 +0200 +++ new/waywall-0.2026.10.12b/waywall/wrap.c 2026-10-12 05:19:53.000000000 +0200 @@ -370,7 +370,6 @@ } } - wrap->view = view; wrap->instance = instance_create(view, wrap->inotify); if (wrap->instance) { strbuf path = instance_get_state_path(wrap->instance); @@ -390,10 +389,10 @@ // xdg_surface role commit event, so the pending buffer will not have been put into the // current state yet. I would like to have a better API for this (perhaps change when the // event fires?), but this works for now. - ww_assert(wrap->view->surface->pending.buffer); + ww_assert(view->surface->pending.buffer); int32_t width, height; - server_buffer_get_size(wrap->view->surface->pending.buffer, &width, &height); + server_buffer_get_size(view->surface->pending.buffer, &width, &height); wrap->server->ui->width = width; wrap->server->ui->height = height; @@ -402,7 +401,7 @@ server_ui_show(wrap->server->ui); ww_assert(wrap->width > 0 && wrap->height > 0); - ww_assert(wrap->view); + wrap->view = view; server_view_set_size(wrap->view, wrap->width, wrap->height); server_view_set_centered(wrap->view, true);
