Make sure nvda dlls are used when launching games that need them.
This commit is contained in:
@@ -117,6 +117,47 @@ stop_nvda2speechd() {
|
|||||||
fi
|
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() {
|
run_wine_path() {
|
||||||
local wineTarget="$1"
|
local wineTarget="$1"
|
||||||
local bridgePid=""
|
local bridgePid=""
|
||||||
@@ -129,6 +170,7 @@ run_wine_path() {
|
|||||||
wineDir="$(winepath "${wineTarget%\\*}")" || return 1
|
wineDir="$(winepath "${wineTarget%\\*}")" || return 1
|
||||||
wineExec="${wineTarget##*\\}"
|
wineExec="${wineTarget##*\\}"
|
||||||
pushd "$wineDir" > /dev/null || return 1
|
pushd "$wineDir" > /dev/null || return 1
|
||||||
|
update_wine_nvda_dlls
|
||||||
start_nvda2speechd bridgePid || true
|
start_nvda2speechd bridgePid || true
|
||||||
wine "$wineExec" || launchStatus=$?
|
wine "$wineExec" || launchStatus=$?
|
||||||
stop_nvda2speechd "$bridgePid"
|
stop_nvda2speechd "$bridgePid"
|
||||||
|
|||||||
Reference in New Issue
Block a user