Make sure nvda dlls are used when launching games that need them.

This commit is contained in:
Storm Dragon
2026-04-23 00:22:06 -04:00
parent 077a6537df
commit 0586974de8
@@ -117,6 +117,47 @@ stop_nvda2speechd() {
fi
}
update_wine_nvda_dlls() {
local accessibilityDir="${HOME}/.local/share/stormux/wine-accessibility"
local scanRoots=("${HOME}/.local/games/Wine" "${WINEPREFIX:-}/drive_c")
local scanRoot
local dllFile
local dllName
local replacement
[[ -f "${accessibilityDir}/nvdaControllerClient32.dll" ]] || return 0
[[ -f "${accessibilityDir}/nvdaControllerClient64.dll" ]] || return 0
for scanRoot in "${scanRoots[@]}"; do
[[ -d "$scanRoot" ]] || continue
find "$scanRoot" -type f -iname 'nvdaControllerClient*.dll' -print0
done | while IFS= read -r -d '' dllFile; do
dllName="${dllFile##*/}"
replacement=""
case "${dllName,,}" in
nvdacontrollerclient32.dll)
replacement="${accessibilityDir}/nvdaControllerClient32.dll"
;;
nvdacontrollerclient64.dll)
replacement="${accessibilityDir}/nvdaControllerClient64.dll"
;;
nvdacontrollerclient.dll)
if file "$dllFile" | grep -q 'PE32+'; then
replacement="${accessibilityDir}/nvdaControllerClient64.dll"
elif file "$dllFile" | grep -q 'PE32'; then
replacement="${accessibilityDir}/nvdaControllerClient32.dll"
fi
;;
esac
if [[ -n "$replacement" && -f "$replacement" ]]; then
printf 'Updating %s with nvdaControllerClient\n' "$dllFile"
cp -f "$replacement" "$dllFile"
fi
done
}
run_wine_path() {
local wineTarget="$1"
local bridgePid=""
@@ -129,6 +170,7 @@ run_wine_path() {
wineDir="$(winepath "${wineTarget%\\*}")" || return 1
wineExec="${wineTarget##*\\}"
pushd "$wineDir" > /dev/null || return 1
update_wine_nvda_dlls
start_nvda2speechd bridgePid || true
wine "$wineExec" || launchStatus=$?
stop_nvda2speechd "$bridgePid"