From ae0f2c4de3cb269ddf2ba2a0346ec179a8218f1b Mon Sep 17 00:00:00 2001 From: matellush <202132988+matellush@users.noreply.github.com> Date: Wed, 14 Oct 2026 03:06:47 +0200 Subject: [PATCH] feat: Enable Wayland support for WheelWizard --- io.github.TeamWheelWizard.WheelWizard.yaml | 6 ++ patches/WheelWizard/app-id.patch | 85 +++++++++++++++++++ sources/WheelWizard/WheelWizard.yaml | 2 + .../nuget/wheelwizard-nuget-sources.json | 78 ++++++++--------- 4 files changed, 132 insertions(+), 39 deletions(-) create mode 100644 patches/WheelWizard/app-id.patch diff --git a/io.github.TeamWheelWizard.WheelWizard.yaml b/io.github.TeamWheelWizard.WheelWizard.yaml index 49ba3df..36f11f8 100644 --- a/io.github.TeamWheelWizard.WheelWizard.yaml +++ b/io.github.TeamWheelWizard.WheelWizard.yaml @@ -26,6 +26,7 @@ add-extensions: autodelete: true finish-args: + - --socket=wayland # WheelWizard supports Wayland, but Dolphin currently does not - --socket=x11 - --share=ipc @@ -164,6 +165,7 @@ modules: env: RUNTIME: linux-x64 build-commands: + - git apply app-id.patch - >- DOTNET_CLI_TELEMETRY_OPTOUT=true dotnet publish @@ -190,6 +192,10 @@ modules: # Install metadata files - install -D -m0644 "Flatpak/${FLATPAK_ID}.desktop" "${FLATPAK_DEST}/share/applications/${FLATPAK_ID}.desktop" - install -D -m0644 "Flatpak/${FLATPAK_ID}-url-handler.desktop" "${FLATPAK_DEST}/share/applications/${FLATPAK_ID}-url-handler.desktop" + - desktop-file-edit --set-key=Exec --set-value="${FLATPAK_DEST}/bin/wheelwizard-wrapper" + "${FLATPAK_DEST}/share/applications/${FLATPAK_ID}.desktop" + - desktop-file-edit --set-key=Exec --set-value="${FLATPAK_DEST}/bin/wheelwizard-wrapper %U" + "${FLATPAK_DEST}/share/applications/${FLATPAK_ID}-url-handler.desktop" - install -D -m0644 "Flatpak/${FLATPAK_ID}.svg" "${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/${FLATPAK_ID}.svg" - install -D -m0644 "Flatpak/${FLATPAK_ID}.png" "${FLATPAK_DEST}/share/icons/hicolor/512x512/apps/${FLATPAK_ID}.png" - install -D -m0644 "Flatpak/${FLATPAK_ID}.metainfo.xml" "${FLATPAK_DEST}/share/metainfo/${FLATPAK_ID}.metainfo.xml" diff --git a/patches/WheelWizard/app-id.patch b/patches/WheelWizard/app-id.patch new file mode 100644 index 0000000..4692f94 --- /dev/null +++ b/patches/WheelWizard/app-id.patch @@ -0,0 +1,85 @@ +diff --git a/Flatpak/io.github.TeamWheelWizard.WheelWizard-url-handler.desktop b/Flatpak/io.github.TeamWheelWizard.WheelWizard-url-handler.desktop +index f2554785..cb5bd455 100644 +--- a/Flatpak/io.github.TeamWheelWizard.WheelWizard-url-handler.desktop ++++ b/Flatpak/io.github.TeamWheelWizard.WheelWizard-url-handler.desktop +@@ -7,7 +7,7 @@ NoDisplay=true + StartupNotify=true + Type=Application + Categories=Game; +-StartupWMClass=WheelWizard ++StartupWMClass=io.github.TeamWheelWizard.WheelWizard + MimeType=x-scheme-handler/wheelwizard; + Name=Wheel Wizard – URL Handler + GenericName=Mario Kart Wii Mod Manager +diff --git a/Flatpak/io.github.TeamWheelWizard.WheelWizard.desktop b/Flatpak/io.github.TeamWheelWizard.WheelWizard.desktop +index df003b5f..3dcb071f 100644 +--- a/Flatpak/io.github.TeamWheelWizard.WheelWizard.desktop ++++ b/Flatpak/io.github.TeamWheelWizard.WheelWizard.desktop +@@ -5,7 +5,7 @@ Exec=WheelWizard + Terminal=false + Type=Application + Categories=Game; +-StartupWMClass=WheelWizard ++StartupWMClass=io.github.TeamWheelWizard.WheelWizard + Name=Wheel Wizard + GenericName=Mario Kart Wii Mod Manager + Comment=Mario Kart Wii Mod Manager & Retro Rewind Auto Updater +diff --git a/WheelWizard/Program.cs b/WheelWizard/Program.cs +index b69a2212..4fd2ef69 100644 +--- a/WheelWizard/Program.cs ++++ b/WheelWizard/Program.cs +@@ -133,22 +133,28 @@ public class Program : IDesignerEntryPoint + /// + private static AppBuilder CreateWheelWizardApp(Func> createStartup) + { ++ var isFlatpak = new RuntimeEnvironment().IsFlatpakSandboxed(new RealFileSystem()); ++ var flatpakAppId = isFlatpak ? Environment.GetEnvironmentVariable("FLATPAK_ID") : null; + #pragma warning disable AVALONIA_X11_CSD ++ var x11Options = new X11PlatformOptions { EnableDrawnDecorations = true }; ++#pragma warning restore AVALONIA_X11_CSD ++ x11Options.WmClass = flatpakAppId ?? x11Options.WmClass; + var builder = AppBuilder + .Configure(() => new App(createStartup)) + .UsePlatformDetect() +- .With(new X11PlatformOptions { EnableDrawnDecorations = true }) ++ .With(x11Options) + .With(MacOptions) + .WithInterFont(); +-#pragma warning restore AVALONIA_X11_CSD + + // https://docs.avaloniaui.net/docs/platform-specific-guides/linux#enabling-the-wayland-backend + // NOTE: UseWayland() will prevent fallback to X11. + if (OperatingSystem.IsLinux() && Environment.GetEnvironmentVariable("WAYLAND_DISPLAY") is not null) + { + #pragma warning disable AVALONIA_WAYLAND_FORCE_CSD +- builder = builder.With(new WaylandPlatformOptions { ForceDrawnDecorations = true }).UseWayland(); ++ var waylandOptions = new WaylandPlatformOptions { ForceDrawnDecorations = true }; + #pragma warning restore AVALONIA_WAYLAND_FORCE_CSD ++ waylandOptions.AppId = flatpakAppId ?? waylandOptions.AppId; ++ builder = builder.With(waylandOptions).UseWayland(); + } + + return builder; +diff --git a/WheelWizard/WheelWizard.csproj b/WheelWizard/WheelWizard.csproj +index 9f0cbed9..6b88d7c4 100644 +--- a/WheelWizard/WheelWizard.csproj ++++ b/WheelWizard/WheelWizard.csproj +@@ -34,13 +34,13 @@ + + + +- +- +- +- ++ ++ ++ ++ + + +- ++ + + + diff --git a/sources/WheelWizard/WheelWizard.yaml b/sources/WheelWizard/WheelWizard.yaml index 62f7202..5058567 100644 --- a/sources/WheelWizard/WheelWizard.yaml +++ b/sources/WheelWizard/WheelWizard.yaml @@ -1,3 +1,5 @@ - type: git url: https://github.com/TeamWheelWizard/WheelWizard.git commit: 14c0c7cd34697980bc8f8cf2189920e64a2526cb +- type: file + path: patches/WheelWizard/app-id.patch diff --git a/sources/WheelWizard/nuget/wheelwizard-nuget-sources.json b/sources/WheelWizard/nuget/wheelwizard-nuget-sources.json index 7aedc34..9d7533b 100644 --- a/sources/WheelWizard/nuget/wheelwizard-nuget-sources.json +++ b/sources/WheelWizard/nuget/wheelwizard-nuget-sources.json @@ -1,10 +1,10 @@ [ { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia/12.1.2/avalonia.12.1.2.nupkg", - "sha512": "3508a3e1e7a490b2f904e5389de064badb6aeca82c2d88ff8a9bbe418531849edd1eeafcc6c1a166ed4e54cf6e8af0288d03188f2d120d2eb5d0358533b27875", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia/12.1.4/avalonia.12.1.4.nupkg", + "sha512": "b0ec6f4eabc0a296cdcc3b7117c0f44a301e82d5c764d7c864d8bf9acfd98c6ac470576ad1b7c7a16fa01800395683d90133a587e51bad78ab7eba4045b5da1b", "dest": "nuget-sources", - "dest-filename": "avalonia.12.1.2.nupkg" + "dest-filename": "avalonia.12.1.4.nupkg" }, { "type": "file", @@ -29,10 +29,10 @@ }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia.desktop/12.1.2/avalonia.desktop.12.1.2.nupkg", - "sha512": "4e7aea7626e713250b5ea3152d8fab610f04bf60102142e116a8810db6202767ae84a867820fcbce9798105cf856e1a066dfb82932cf2ec5b403938084aeec72", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia.desktop/12.1.4/avalonia.desktop.12.1.4.nupkg", + "sha512": "a63d841fcbd6b3b348d4dc3f168e66a815f015ce96e85bbb4991ed8faac481af1d03795a8314eb63e1daba786c8929abc03d405bd372a4607fac618ec1f4b7f7", "dest": "nuget-sources", - "dest-filename": "avalonia.desktop.12.1.2.nupkg" + "dest-filename": "avalonia.desktop.12.1.4.nupkg" }, { "type": "file", @@ -43,31 +43,31 @@ }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia.fonts.inter/12.1.2/avalonia.fonts.inter.12.1.2.nupkg", - "sha512": "2b9f5a0ead8f3b732a4f2c1ec7be32b89927f297b4dd038c63e0b50008d21f1d907f18c4bc98b0bf7733760ee82d820edc7cee0772e2a9f2cfdf4be8a3406e89", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia.fonts.inter/12.1.4/avalonia.fonts.inter.12.1.4.nupkg", + "sha512": "9d95b448400c1a9450ddd9cf2be756ed6486b76dc200e22c69c3232dca092f228697334237ad89122403f19cef673c07ba9dada09b3879d0bf3b079caf5f5c0c", "dest": "nuget-sources", - "dest-filename": "avalonia.fonts.inter.12.1.2.nupkg" + "dest-filename": "avalonia.fonts.inter.12.1.4.nupkg" }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia.freedesktop/12.1.2/avalonia.freedesktop.12.1.2.nupkg", - "sha512": "aad4e7f5d823d6a23faddd31c4b6db8fa9c70bba47d78974cad78b10acca421338e9f6ffd8593dd01cfa3a7289edafdd7be7c0557e887ff86709cc08b575ec42", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia.freedesktop/12.1.4/avalonia.freedesktop.12.1.4.nupkg", + "sha512": "0be82af4bc6a205e26da286c82954f0dbdf77c521d0910385a3e013da29a3800c2f3a0f3af425b7565d1104f8047df68012cea935a5edaecf35758bf1d250bf9", "dest": "nuget-sources", - "dest-filename": "avalonia.freedesktop.12.1.2.nupkg" + "dest-filename": "avalonia.freedesktop.12.1.4.nupkg" }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia.freedesktop.atspi/12.1.2/avalonia.freedesktop.atspi.12.1.2.nupkg", - "sha512": "1810c295aeb626de9684f981bf37f4cd4134c2cb4b366a1a584883e4dec93ad0b7ccc9f20f91ae1cf711634db70f63cdf6731049c1512517359b57fae57a2e1d", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia.freedesktop.atspi/12.1.4/avalonia.freedesktop.atspi.12.1.4.nupkg", + "sha512": "8eb9fbae2dc9e70decdbfdef09df29d01255fd44a7406b15b7a3571392a6de370457ede7cff30776f34187495ef31e756174b2657f5e16df5cd526b07a4fe599", "dest": "nuget-sources", - "dest-filename": "avalonia.freedesktop.atspi.12.1.2.nupkg" + "dest-filename": "avalonia.freedesktop.atspi.12.1.4.nupkg" }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia.harfbuzz/12.1.2/avalonia.harfbuzz.12.1.2.nupkg", - "sha512": "94b8ab04f54e76faa6db4fb5095fb67e0adc065ea697ef7d9fb5d29e1d16eae4cfa359ea41cdf10a23ace9a5bae2833d559821a6e414cd059e15fcdbcfad7cce", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia.harfbuzz/12.1.4/avalonia.harfbuzz.12.1.4.nupkg", + "sha512": "113f469eed1b048ca5f22d946e2724b1712d807508375a7ecab72ab7a2be1fe02ac90747e6af666566e0a47e61f7d7a0007e97a274f6583c6302dcb11f69ba71", "dest": "nuget-sources", - "dest-filename": "avalonia.harfbuzz.12.1.2.nupkg" + "dest-filename": "avalonia.harfbuzz.12.1.4.nupkg" }, { "type": "file", @@ -78,10 +78,10 @@ }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia.native/12.1.2/avalonia.native.12.1.2.nupkg", - "sha512": "8308a9abf7502426ec0851309d08d75ddb689078569cbbbc1a35e233cbd939bcde7f49236877efe4d9e9e53c58dbdcb5bad2f5106e96910f2fd988da38da96c4", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia.native/12.1.4/avalonia.native.12.1.4.nupkg", + "sha512": "1bb9b8bcb0db31bd0b0dfe48ee1350fbba529d06e0ed190b42a60bd4059ef712e4ca565836251b1e1f6285fcf6b83ffb7b4ec06a3adc51b69294e969c9ad7c31", "dest": "nuget-sources", - "dest-filename": "avalonia.native.12.1.2.nupkg" + "dest-filename": "avalonia.native.12.1.4.nupkg" }, { "type": "file", @@ -92,24 +92,24 @@ }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia.remote.protocol/12.1.2/avalonia.remote.protocol.12.1.2.nupkg", - "sha512": "bab863a304e1cd32846d9f37d670a893429ec27092876b15ebe9e579a8b49384d2749499387b04bcda6c15739521398b010e5e23ad29a6f53942f301c605d2fb", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia.remote.protocol/12.1.4/avalonia.remote.protocol.12.1.4.nupkg", + "sha512": "8d6e87d4b5b84f0471078bfb6cd6f39fc28318efb0d15dfe015eb4385a90449b3c9c73f4038c7a17742582555c97842cb6e428743e1bde3c9c00b0bb8b0fc0ee", "dest": "nuget-sources", - "dest-filename": "avalonia.remote.protocol.12.1.2.nupkg" + "dest-filename": "avalonia.remote.protocol.12.1.4.nupkg" }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia.skia/12.1.2/avalonia.skia.12.1.2.nupkg", - "sha512": "8ba9813cec50aea1ce1662fbc46265cc9f8ff9f2c1a84080462838cbfcda782001cfe170e572984708f5e51a1b44798cb4e99e3288dcf951d81e276d2a40a657", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia.skia/12.1.4/avalonia.skia.12.1.4.nupkg", + "sha512": "10af376f826ec84510a2979093b27026da734ce8c00fa536645f2ddf99878143ecc399848dec56864f12898c784f933499a1a990d5b6f166c361177a5f00c88d", "dest": "nuget-sources", - "dest-filename": "avalonia.skia.12.1.2.nupkg" + "dest-filename": "avalonia.skia.12.1.4.nupkg" }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia.themes.fluent/12.1.2/avalonia.themes.fluent.12.1.2.nupkg", - "sha512": "bd972d77d62fe79fb0cadf5b15339a7660ea39c9b1028672804594cfd99103ad97d9c806c2d1af71b377fd1900373a64251897f14ed339e26389d7844fffe7c3", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia.themes.fluent/12.1.4/avalonia.themes.fluent.12.1.4.nupkg", + "sha512": "2671c16b7efb2e1fa83de35be72c6ad4a148e7bce404098187ea0c8dcc84a6334435ff22ee423bb33c594ec263822a1df58e8e9230aea8bfda255aca1b2d7fa8", "dest": "nuget-sources", - "dest-filename": "avalonia.themes.fluent.12.1.2.nupkg" + "dest-filename": "avalonia.themes.fluent.12.1.4.nupkg" }, { "type": "file", @@ -120,24 +120,24 @@ }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia.wayland/12.1.2/avalonia.wayland.12.1.2.nupkg", - "sha512": "ce325d8dae75114b452c64ae831679b0b7cfaffdfe67e8b5559141692f4cd9d8a853589a2ad2b8af499b6ef1613c7ac62d63e2262e0bab716523613a42c04886", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia.wayland/12.1.4/avalonia.wayland.12.1.4.nupkg", + "sha512": "a0bfbdcac9bdd83e633660e5aa21258eea762ffc0ef61a8b03414eb9a628a9ebfb2bda8322cc3a328c4e95dd9a34e488e801a703c5e67dc582fcec5d80febe06", "dest": "nuget-sources", - "dest-filename": "avalonia.wayland.12.1.2.nupkg" + "dest-filename": "avalonia.wayland.12.1.4.nupkg" }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia.win32/12.1.2/avalonia.win32.12.1.2.nupkg", - "sha512": "6208d464415d6690c6848c2ebb25e3ba74b9d87010b402333cd23f12c3ddda5ff6134aabe101d6a1ffc1d334d1e0346b0b385240e7614266ff4ea3567fd443fe", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia.win32/12.1.4/avalonia.win32.12.1.4.nupkg", + "sha512": "83bc81efa79002ab02d63624aad83c70b2f2ddb640bd1f72580d0a38d7f25da18c221b66d1e6c1cdf9510ade982520abb2add881138a240a4903304abfad0cd4", "dest": "nuget-sources", - "dest-filename": "avalonia.win32.12.1.2.nupkg" + "dest-filename": "avalonia.win32.12.1.4.nupkg" }, { "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/avalonia.x11/12.1.2/avalonia.x11.12.1.2.nupkg", - "sha512": "f6a7c6cc94c84ae8f025812c4b3172bd9f4346145cd31632acd2259b7667cf55c23c62eac22caba1f7dcb3f663df3d51366fb7cb7c1df0ec5fd60a0c06ed707e", + "url": "https://api.nuget.org/v3-flatcontainer/avalonia.x11/12.1.4/avalonia.x11.12.1.4.nupkg", + "sha512": "d445237619a817d8fc432ed44e846f1884ac81092680700b8b1dc54455adde267132dfb7ab5e620bf6b9d36204e42f6504d8832670972ccd912697281fd725ef", "dest": "nuget-sources", - "dest-filename": "avalonia.x11.12.1.2.nupkg" + "dest-filename": "avalonia.x11.12.1.4.nupkg" }, { "type": "file",