Make sure nvda dlls are used when launching games that need them.
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user