diff options
| author | SulfurNitride <SulfurNitride@users.noreply.github.com> | 2026-03-12 13:48:25 -0500 |
|---|---|---|
| committer | SulfurNitride <SulfurNitride@users.noreply.github.com> | 2026-03-12 13:48:25 -0500 |
| commit | 84a43a2e6afbdfab92c610d47aa75e3876ffacd6 (patch) | |
| tree | ea624ec287181905441fbf1247c645976bdb8fc9 /docker | |
| parent | 3ba283d9350783c038cc2844450f4938ad125f08 (diff) | |
Replace wrestool with native Rust PE icon extraction (pelite)
- Add icons.rs to nak crate: parses PE resource sections, extracts
RT_GROUP_ICON/RT_ICON and builds ICO files in memory
- Expose nak_extract_exe_icon() FFI for C++ consumption
- Update iconForExecutable() to use Rust FFI instead of shelling out
to wrestool; reads all ICO entries for correct color depth
- Fix BasicGamePlugin::gameIcon() to call iconForExecutable() (was
returning empty QIcon, causing placeholder icons for BG3/Cyberpunk)
- Move app icon setup: setDesktopFileName + setWindowIcon to
MOApplication constructor (fixes Wayland taskbar/decoration icon)
- Move data/com.fluorine.* to data/icons/, install to XDG paths at
launch for Wayland compositor icon resolution
- Remove icoutils dependency from Docker image and build output
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'docker')
| -rw-r--r-- | docker/Dockerfile | 2 | ||||
| -rwxr-xr-x | docker/build-inner.sh | 36 |
2 files changed, 26 insertions, 12 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile index d197569..5ab99dc 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -35,7 +35,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ # Python python3 python3-pip python3-pyqt6 \ # Misc - icoutils zip unzip \ + zip unzip \ && rm -rf /var/lib/apt/lists/* # ── Qt 6.10 via aqtinstall ── diff --git a/docker/build-inner.sh b/docker/build-inner.sh index 0f6fcdb..0c0fbc7 100755 --- a/docker/build-inner.sh +++ b/docker/build-inner.sh @@ -50,9 +50,7 @@ cp -f "${RUNDIR}/ModOrganizer" "${OUT_DIR}/ModOrganizer-core" LOOTCLI="build/libs/lootcli/src/lootcli" [ -f "${LOOTCLI}" ] && cp -f "${LOOTCLI}" "${OUT_DIR}/" -for tool in wrestool icotool; do - command -v "${tool}" >/dev/null 2>&1 && cp -f "$(command -v "${tool}")" "${OUT_DIR}/" -done +# wrestool/icotool no longer needed — icon extraction is built into libnak_ffi.so (pelite) # ── MO2 plugins (.so) ── find build/libs -type f \( \ @@ -216,7 +214,7 @@ strip --strip-unneeded "${OUT_DIR}/ModOrganizer-core" 2>/dev/null || true find "${OUT_DIR}/plugins" -name "*.so" -exec strip --strip-unneeded {} \; 2>/dev/null || true find "${OUT_DIR}/dlls" -name "*.so" -o -name "*.dll" | xargs -r strip --strip-unneeded 2>/dev/null || true find "${OUT_DIR}/lib" -name "*.so" -exec strip --strip-unneeded {} \; 2>/dev/null || true -for tool in wrestool icotool lootcli; do +for tool in lootcli; do [ -f "${OUT_DIR}/${tool}" ] && strip --strip-unneeded "${OUT_DIR}/${tool}" 2>/dev/null || true done @@ -269,6 +267,21 @@ if [ "${HERE_REAL}" != "${DST_REAL}" ]; then fi fi +# ── Install icon + desktop file for Wayland taskbar/decoration ── +ICON_SRC="${BIN_DST}/icons/com.fluorine.manager.png" +ICON_DST="${HOME}/.local/share/icons/hicolor/256x256/apps/com.fluorine.manager.png" +DESKTOP_SRC="${BIN_DST}/icons/com.fluorine.manager.desktop" +DESKTOP_DST="${HOME}/.local/share/applications/com.fluorine.manager.desktop" +if [ -f "${ICON_SRC}" ] && [ ! -f "${ICON_DST}" ]; then + mkdir -p "$(dirname "${ICON_DST}")" + cp -f "${ICON_SRC}" "${ICON_DST}" +fi +if [ -f "${DESKTOP_SRC}" ] && [ ! -f "${DESKTOP_DST}" ]; then + mkdir -p "$(dirname "${DESKTOP_DST}")" + sed "s|^Exec=fluorine-manager|Exec=${BIN_DST}/fluorine-manager|" "${DESKTOP_SRC}" > "${DESKTOP_DST}" + chmod +x "${DESKTOP_DST}" +fi + # Run from the synced location. RUN="${BIN_DST}" @@ -295,9 +308,10 @@ Plugins = qt6plugins QTCONF # ── Desktop integration files ── -cp -f /src/data/com.fluorine.manager.desktop "${OUT_DIR}/" -cp -f /src/data/com.fluorine.manager.png "${OUT_DIR}/" -cp -f /src/data/com.fluorine.manager.metainfo.xml "${OUT_DIR}/" +mkdir -p "${OUT_DIR}/icons" +cp -f /src/data/icons/com.fluorine.manager.desktop "${OUT_DIR}/icons/" +cp -f /src/data/icons/com.fluorine.manager.png "${OUT_DIR}/icons/" +cp -f /src/data/icons/com.fluorine.manager.metainfo.xml "${OUT_DIR}/icons/" # ── Determine build mode ── # BUILD_MODE is passed from build.sh: tarball (default), installer, appimage, all @@ -366,7 +380,7 @@ case "${CHOICE}" in # Create desktop shortcut mkdir -p "${DESKTOP_DIR}" "${ICON_DIR}" - cp -f "${INSTALL_DIR}/com.fluorine.manager.png" "${ICON_DIR}/" + cp -f "${INSTALL_DIR}/icons/com.fluorine.manager.png" "${ICON_DIR}/" cat > "${DESKTOP_DIR}/com.fluorine.manager.desktop" <<DESKTOP_EOF [Desktop Entry] @@ -458,9 +472,9 @@ build_appimage() { cp -a "${APPDIR}/usr/bin/qt6plugins"/. "${APPDIR}/usr/plugins/" fi - cp -f "${OUT_DIR}/com.fluorine.manager.desktop" "${APPDIR}/usr/share/applications/" - cp -f "${OUT_DIR}/com.fluorine.manager.png" "${APPDIR}/usr/share/icons/hicolor/256x256/apps/" - cp -f "${OUT_DIR}/com.fluorine.manager.metainfo.xml" "${APPDIR}/usr/share/metainfo/" + cp -f "${OUT_DIR}/icons/com.fluorine.manager.desktop" "${APPDIR}/usr/share/applications/" + cp -f "${OUT_DIR}/icons/com.fluorine.manager.png" "${APPDIR}/usr/share/icons/hicolor/256x256/apps/" + cp -f "${OUT_DIR}/icons/com.fluorine.manager.metainfo.xml" "${APPDIR}/usr/share/metainfo/" mkdir -p "${APPDIR}/usr/share/icons" for theme_dir in /usr/share/icons/*; do |
