Skip to content

UIX Desktop 0.4.1 - #90

Merged
MrMilenko merged 38 commits into
mainfrom
release-0.4.1
Nov 13, 2026
Merged

MrMilenko merged 38 commits into
mainfrom
release-0.4.1

Conversation

@MrMilenko

Copy link
Copy Markdown
Owner

UIX Desktop 0.4.1: the Linux/Steam Deck fix plus the guide.

Fixes

New

  • The native guide (Guide button, LT+B or F7): settings from one table, accounts, adding games, logs and help, its own on-screen keyboard. The ImGui menu bar is development mode only.

Releases

  • Releases only come from main; -testing tags publish as pre-releases; SHA256SUMS.txt on every release; notes come from release-notes/<version>.md.

Tested

mac desktop, Xbox retail/debug compile, platform lint and Windows import guard on every merge; the Windows fixes reproduced and verified under Wine; the Debian 12 AppImage ran on Debian 13. A v0.4.1-testing pre-release gets checked on Linux and Windows before the final tag.

desktop.ini was truncated and rewritten on every save, so anything the dashboard or a newer build put there was lost. I moved every setting into one table with its label, section, range and default; load and save go through it, unknown lines stay where they were, and the ImGui Settings tabs read their rows from it.
The Guide button, LT+B or F7 now opens a guide drawn in the dashboard itself, built on the settings panel's meshes, with Settings from the settings table, Shortcuts and About. B backs out to the screen you were on. LT+B used to open the ImGui controller menu; that's now Desktop Tools inside the guide. UIX_DEV_PAD scripts pad presses for screenshots, development only.
The ImGui preloader is gone. On a first run, or with Startup Mode set to ask, the dashboard starts and the guide offers the dashboard, Development Mode (unpacks the scenes and restarts), folders for music, movies, TV and ROMs, and the startup choice. Nothing on it is required; B just starts the dashboard. --dashboard and --development still skip it.
Added a Logs & Help page: copy the version line, copy this run's log with the home folder shown as ~ and IP addresses hidden, and open the logs folder. Nothing gets uploaded; that needs a place to send it first.
Added Games & Playlists to the guide: pick a program or file with the pad and it lands in the launcher under the category you choose, run the Steam and RetroArch imports, refresh ES-DE, and look through your playlists. Names come from the file name for now; renaming and icons stay in the Title Maker. Also fixed the guide's cursor erroring at the ends of a list.
Plex, Jellyfin and Xbox sign in now work from the guide with the pad, showing the code to enter on another device. The ImGui menu bar only shows in Development Mode; the tool windows still open from their F keys and from Desktop Tools. Jellyfin's server address and folder paths still need the Settings window for typing. Sign in hasn't been tried against real accounts.
# Conflicts:
#	Data/Xips/default.xip
Opening the panel ran OnActivate before its own scene had loaded, so building the list hit an empty children array (Array reference out of bounds, line 593). The first time in, the panel's onLoad builds the list instead.
The guide is going native, so it gets its own bgfx shaders (rounded shapes, text and the plasma) built for every renderer, and Noto Sans for its text under the OFL. The Direct3D 11 pair came out of Wine's shader compiler, so it needs a look on real Windows.
Drew the guide with its own overlay over the dashboard instead of a dashboard scene: sections down the left, the open one on the right, prompts that follow the pad or the keyboard, and mouse clicks and hover. The rows (settings, accounts, games and playlists, logs, the welcome) are the same; Guide Color picks green, blue or red. Clicking hasn't been tried yet, and none of it has been on Windows or Linux.
A controller first guide over the dashboard (Guide button, LT+B or F7):
settings from one table, accounts, adding games, logs and help, and a first
run welcome. Dashboard Green by default, blue and red as options. The ImGui
bar is for development mode now.
Deleting wrote games.ini with its own copy of the save loop, which never learned about Group=, so every other title lost its folder. It uses the regular save now.
A -testing tag now publishes as a pre-release and a plain vX.Y.Z as the latest release. A gate job stops anything that isn't on main. Running it by hand with nightly builds main's head and replaces the nightly pre-release. The release is made once at the end, so a failed platform no longer leaves a half filled release behind.
The flags wrote straight into the saved setting, so the next settings save kept them for good. The setting now has its own copy and the flags only change this run.
Publish now hashes every file it uploads and attaches the list, so a download can be checked with sha256sum -c.
It waited for the dashboard's opening transition to finish, so the welcome and the Guide button came up about a second late. Dropped the wait and the stderr line it printed on open.
On a fresh checkout make -j16 compiled milkdrop_window.cpp before projectM was built and installed, so its header wasn't there yet. That file and the link wait for projectM now, on the Windows cross build too.
A folder counted as a movie if a video sat anywhere two levels down, so a game folder with a trailer or a folder of other movies showed up as one movie. Now the video has to sit right in the folder (Movie/Movie.mkv, extras folders are fine), and trailer or sample files (trailer.mp4, Movie-trailer.mkv, Ep.sample.mkv) never count, for movies or episodes. Movies inside a collection folder don't show up at all yet.

Fixes #40
The xemu line holds two full paths but games.ini only kept 511 characters of it, so a long ISO path lost its closing quote and the shell gave up. Launch lines hold 1024 now and an ISO too long for that says so instead of saving a broken line. A bare xemu also finds Flatpak xemu (flatpak run app.xemu.xemu) or /snap/bin/xemu when it isn't on PATH. Needs a test on a real Linux box.

Fixes #84
A double click in the file browser went down two folders, the wheel did nothing on sdl2-compat because only its fractional field is filled, and clicks went through tool windows on top. Also added UIX_DEV_EVENTS, a dev-only script of pointer and key events like UIX_DEV_PAD.
The dashboard set its view size to 1280x720 after the saved display mode had already resized the window, so a borderless or 1080 start drew with the wrong aspect until something resized the window. It reads the real window size now. Fixes #41
The import stopped at 256 games, the Title Maker list at 512 and Icons.ini at 512, and every icon downloaded one at a time on the UI thread. Those lists grow as needed now, Icons.ini is written once per import, and icons download on background workers with progress shown in the Title Maker. Tested with 2,000 fake games.

Fixes #28
An unquoted path like Program Files (x86) or one followed by arguments went through cmd, which dropped our quotes and ran the first word instead, and the working folder came out wrong too. I quote the real program path before spawning now, so .exe titles skip cmd and start in their own folder. Fixes #38
Fixed movies in folders like Action/Die Hard/Die Hard.mkv vanishing. A folder with no movie right in it is a collection now, and each subfolder with a movie in it is its own movie. It only goes one level down, and trailers and samples still never count.
Long xemu ISO paths and Flatpak xemu, big Steam libraries with icons
fetched in the background, grouped titles surviving a delete, the projectM
build race, startup flags no longer saved, and movie folders that are
really movies (collections included).
Folders, the TMDB key, the Jellyfin server and a new game's name can be typed in the guide, with the pad on its keyboard or straight from a physical one. Keys stay hidden, and a new music, movies or TV folder gets read right away. Also stopped digits typed in the guide reaching the dashboard as media keys.
The 0.4.0 AppImage needs glibc 2.43 because ubuntu-latest moved on, so it won't even start on Debian 13 or any SteamOS. Both Linux jobs build in a Debian 12 container now (glibc 2.36), the AppImage leaves all of glibc to the host, and a check fails the release if anything needs newer than SteamOS 3.5's 2.37.
If the tagged commit has release-notes/<version>.md, that becomes the release text. Without one GitHub writes the notes like before.
Releases only from main with testing and nightly channels, SHA256SUMS on
every release, notes from release-notes/, and Linux builds in Debian 12 so
the AppImage starts on SteamOS 3.5 and newer again.
They came from Wine's own shader compiler. Rebuilt them with shaderc and Microsoft's d3dcompiler_47, the same way as the rest of the dx11 shaders, which come out byte for byte the same that way. Needs a test on a real Windows machine.
The guide has its own keyboard for paths, keys and server addresses, opens
right away at launch, and handles double clicks and the wheel properly.
Its Direct3D 11 shaders are rebuilt with the same compiler as the rest.
Borderless and resized windows no longer stretch the dashboard, and games
in folders with spaces or (x86) launch again.
bgfx was built for OpenGL 2.1, so it compiled our shaders as GLSL 1.20 and
strict drivers rejected the bitwise ops in vs_ff: black screen, then abort.
The Linux and Windows builds target OpenGL 3.3 now. References #76.
@MrMilenko
MrMilenko merged commit 5beb414 into main Nov 13, 2026
5 checks passed
@MrMilenko
MrMilenko deleted the release-0.4.1 branch November 13, 2026 00:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment