diff --git a/README-RU.md b/README-RU.md index 3c3edbdd..43dd0172 100755 --- a/README-RU.md +++ b/README-RU.md @@ -73,7 +73,7 @@ exit ``` * **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x** **Deepin** : - [portproton_1.7-3_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.7-3_amd64/portproton_1.7-3_amd64.deb) + [portproton_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_amd64/portproton_amd64.deb) * **Arch Linux** и производные (Manjaro, Garuda, и т.д.) : [AUR](https://aur.archlinux.org/packages/portproton) diff --git a/README.md b/README.md index e2921250..054db968 100755 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ exit * **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x**, and **Deepin**: - [portproton_1.7-3_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.7-3_amd64/portproton_1.7-3_amd64.deb) + [portproton_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_amd64/portproton_amd64.deb) * **Arch Linux** and derivatives (Manjaro, Garuda, etc.): [AUR](https://aur.archlinux.org/packages/portproton) diff --git a/data_from_portwine/changelog_en b/data_from_portwine/changelog_en index efb97cb9..3a4331d4 100755 --- a/data_from_portwine/changelog_en +++ b/data_from_portwine/changelog_en @@ -2,6 +2,58 @@ You can help us in the development of the project on the website: https://linux- ---------------------------------------- Changelog: +###Scripts version 2380### / stable / Date: 17.11.2024 / Download update size: 4 megabytes +* fixed unpacking of prefixes from backups (thanks to Htylol) + +###Scripts version 2379### / stable / Date: 15.11.2024 / Download update size: 4 megabytes +* HOTFIX - fix for problems related to the lack of sound (pulse by default) + +###Scripts version 2378### / stable / Date: 15.11.2024 / Download update size: 4 megabytes +* minor adjustments to the stable version of PortProton scripts + +###Scripts version 2377### / stable / Date: 15.11.2024 / Download update size: 220 megabytes +* cumulative update to the stable version of PortProton scripts + +###Scripts version 2376### / Date: 14.11.2024 / Download update size: 4 megabytes +* fixed function for changing global settings (thanks to Htylol) + +###Scripts version 2375### / Date: 14.11.2024 / Download update size: 4 megabytes +* HOTFIX - fixed long launch on Alt p10 after updating scripts 2371 (thanks to Htylol) + +###Scripts version 2374### / Date: 12.11.2024 / Download update size: 4 megabytes +* added support for DLSS 3 for NVIDIA RTX 40XX +* fixed gamescope (thanks to Htylol) +* general optimization of scripts (thanks to Htylol) + +###Scripts version 2373### / Date: 10.11.2024 / Download update size: 215 megabytes +* updated PROTON_LG to version "9-19" +* updated versions: + * DXVK_GIT "2.4.1-446" (shared with dxvk-nvapi) + * VKD3D_GIT "1.1-4271" (shared with vkd3d-shader) +* fixed the work of the Black Desert Online game with the latest versions of dxvk and vkd3d + +###Scripts version 2372### / Date: 09.11.2024 / Download update size: 4 megabytes +* many script optimizations (thanks to Htylol) +*reduced recommended scaling +* added/updated settings files for games: + * NieR Automata (thanks to AlbiionDragon) + * GTA 4 (thanks to eljeyna and PORTWAINE) + * Mortal Kombat XL (thanks Mels) + * Red Dead Redemption (thanks SDR) +* fixed Plarium Play installation (thanks to A_V_Ilin) + +###Scripts version 2371### / Date: 08.11.2024 / Download update size: 4 megabytes +* added auto-detection of application scaling, with the ability to change it in the global PP settings (thanks to Htylol) +* FUTEX2 is disabled by default (breaks some games) +* added auto-installation of the Saturn game (thanks to Dervart) +* added the ability to select a dark/light theme in the global PP settings (thanks to Htylol) +* significantly improved functions (thanks to Htylol): + * registry editor + * determining the extension of the launched file + * check desktop files + * gamescope settings +* added cursor scale setting for gamescope (thanks to Htylol) + ###Scripts version 2370### / Date: 01.11.2024 / Download update size: 215 megabytes * updated PROTON_LG to version "9-18" * updated versions: diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index 888d60c2..92d1980d 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -2,6 +2,58 @@ ----------------------------------------- История изменений: +###Scripts version 2380### / stable / Дата: 17.11.2024 / Размер скачиваемого обновления: 4 мегабайта +* исправлена распаковка префиксов из резервных копий (спасибо Htylol) + +###Scripts version 2379### / stable / Дата: 15.11.2024 / Размер скачиваемого обновления: 4 мегабайта +* HOTFIX - исправление проблем связанных с отсутствием звука + +###Scripts version 2378### / stable / Дата: 15.11.2024 / Размер скачиваемого обновления: 4 мегабайта +* небольшие корректировки стабильной версии скриптов PortProton + +###Scripts version 2377### / stable / Дата: 15.11.2024 / Размер скачиваемого обновления: 220 мегабайт +* кумулятивное обновление стабильной версии скриптов PortProton + +###Scripts version 2376### / Дата: 14.11.2024 / Размер скачиваемого обновления: 4 мегабайта +* исправлена функция изменения глобальных настроек + +###Scripts version 2375### / Дата: 14.11.2024 / Размер скачиваемого обновления: 4 мегабайта +* HOTFIX - исправлен долгий запуск на Alt p10 после обновления скриптов 2371 (спасибо Htylol) + +###Scripts version 2374### / Дата: 12.11.2024 / Размер скачиваемого обновления: 4 мегабайта +* добавлена поддержка DLSS 3 для видеокарт NVIDIA RTX 40XX +* исправлена работа gamescope (спасибо Htylol) +* общая оптимизация скриптов (спасибо Htylol) + +###Scripts version 2373### / Дата: 10.11.2024 / Размер скачиваемого обновления: 215 мегабайта +* обновлен PROTON_LG до версии "9-19" +* обновлены версии: + * DXVK_GIT "2.4.1-446" (совместно с dxvk-nvapi) + * VKD3D_GIT "1.1-4271" (совместно vkd3d-shader) +* исправлена работа игры Black Desert Online с новейшими версиями dxvk и vkd3d + +###Scripts version 2372### / Дата: 09.11.2024 / Размер скачиваемого обновления: 4 мегабайта +* множество оптимизаций скриптов (спасибо Htylol) +* уменьшено рекомендуемое масштабирование +* добавлены/обновлены файлы настроек для игр: + * NieR Automata (спасибо AlbiionDragon) + * GTA 4 (спасибо eljeyna и PORTWAINE) + * Mortal Kombat XL (спасибо Мэлс) + * Red Dead Redemption (спасибо SDR) +* исправлена установка Plarium Play (спасибо A_V_Ilin) + +###Scripts version 2371### / Дата: 08.11.2024 / Размер скачиваемого обновления: 4 мегабайта +* добавлено автоопределение масштабирования приложений, с возможностью изменения в глобальных настройках PP (спасибо Htylol) +* FUTEX2 отключен по умолчанию (ломает работу некоторых игр) +* добавлена автоустановка игры Saturn (спасибо Dervart) +* добавлена возможность выбора темной/светлой темы в глобальных настройках PP (спасибо Htylol) +* значительно улучшены функции (спасибо Htylol): + * редактор реестра + * определение расширения запускаемого файла + * проверки ярлыков + * настройки gamescope +* добавлена настройка масштаба курсора для gamescope (спасибо Htylol) + ###Scripts version 2370### / Дата: 01.11.2024 / Размер скачиваемого обновления: 215 мегабайт * обновлен PROTON_LG до версии "9-18" * обновлены версии: diff --git a/data_from_portwine/img/bat_48.png b/data_from_portwine/img/bat_48.png new file mode 100644 index 00000000..03c83cca Binary files /dev/null and b/data_from_portwine/img/bat_48.png differ diff --git a/data_from_portwine/img/exe_48.png b/data_from_portwine/img/exe_48.png new file mode 100644 index 00000000..78b8f868 Binary files /dev/null and b/data_from_portwine/img/exe_48.png differ diff --git a/data_from_portwine/img/gui/saturn.png b/data_from_portwine/img/gui/saturn.png new file mode 100644 index 00000000..370d166d Binary files /dev/null and b/data_from_portwine/img/gui/saturn.png differ diff --git a/data_from_portwine/img/msi_48.png b/data_from_portwine/img/msi_48.png new file mode 100644 index 00000000..cc28265d Binary files /dev/null and b/data_from_portwine/img/msi_48.png differ diff --git a/data_from_portwine/img/reg_48.png b/data_from_portwine/img/reg_48.png new file mode 100644 index 00000000..105b0989 Binary files /dev/null and b/data_from_portwine/img/reg_48.png differ diff --git a/data_from_portwine/img/setup_48.png b/data_from_portwine/img/setup_48.png new file mode 100644 index 00000000..ac9d5301 Binary files /dev/null and b/data_from_portwine/img/setup_48.png differ diff --git a/data_from_portwine/locales/PortProton.pot b/data_from_portwine/locales/PortProton.pot index 0ab81851..b2028915 100644 --- a/data_from_portwine/locales/PortProton.pot +++ b/data_from_portwine/locales/PortProton.pot @@ -7,7 +7,7 @@ msgid "" msgstr "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2024-11-01 02:46+0500\n" + "POT-Creation-Date: 2024-11-13 08:17+0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -321,6 +321,9 @@ msgstr "" msgid "Do you want to installing recommended libraries in the new prefix:" msgstr "" +msgid "Launched" +msgstr "" + msgid "d3dadapter9.so.1.0.0 - Not found in the system.\\nInstall the " "missing package: d3dadapter9" msgstr "" @@ -1256,6 +1259,10 @@ msgid "Force use sdl videodriver x11, works with BACKEND SDL. (Default is " "wayland)" msgstr "" +msgid "if specified, sets a base output height to linearly scale the cursor " + "against." +msgstr "" + msgid "Change settings gamescope for" msgstr "" @@ -1381,6 +1388,24 @@ msgid "If downloading steam covers is enabled, they will be downloaded and " "is unavailable for some reason)" msgstr "" +msgid "Recommended value" +msgstr "" + +msgid "default" +msgstr "" + +msgid "compact" +msgstr "" + +msgid "classic" +msgstr "" + +msgid "light" +msgstr "" + +msgid "dark" +msgstr "" + msgid "Choose a graphics card to run the game" msgstr "" @@ -1388,10 +1413,10 @@ msgid "Select which video card will be used to run the game (used for all " "running games and programs in PortProton)" msgstr "" -msgid "Force dpi for fonts" +msgid "Force dpi" msgstr "" -msgid "Here you can set forced dpi for fonts in wine" +msgid "Here you can set forced dpi for applications wine" msgstr "" msgid "Choice wine audio driver" @@ -1400,12 +1425,18 @@ msgstr "" msgid "Fixes sound popling if choice alsa" msgstr "" -msgid "Choice gui themes" +msgid "Select PortProton theme" msgstr "" msgid "Allows you to select a theme for PortProton" msgstr "" +msgid "Select gtk theme" +msgstr "" + +msgid "Allows you to select a theme for GTK." +msgstr "" + msgid "Time display" msgstr "" diff --git a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po index 862e6d32..19c80eda 100644 --- a/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po +++ b/data_from_portwine/locales/es/LC_MESSAGES/PortProton.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-11-01 02:43+0500\n" -"PO-Revision-Date: 2024-10-26 13:58+0500\n" +"POT-Creation-Date: 2024-11-13 08:17+0500\n" +"PO-Revision-Date: 2024-11-13 08:18+0500\n" "Last-Translator: \n" "Language-Team: \n" "Language: es_ES\n" @@ -349,6 +349,9 @@ msgstr "OK" msgid "Do you want to installing recommended libraries in the new prefix:" msgstr "¿Quieres instalar las bibliotecas recomendadas en el nuevo prefijo:" +msgid "Launched" +msgstr "Lanzado" + msgid "" "d3dadapter9.so.1.0.0 - Not found in the system.\\nInstall the missing " "package: d3dadapter9" @@ -1636,6 +1639,13 @@ msgstr "" "Forzar el uso del controlador de video SDL x11, funciona con el backend SDL. " "(Por defecto es Wayland)." +#, fuzzy +msgid "" +"if specified, sets a base output height to linearly scale the cursor against." +msgstr "" +"Si se especifica, establece una altura de salida base para escalar " +"linealmente el cursor." + msgid "Change settings gamescope for" msgstr "Cambiar ajustes gamescope para" @@ -1804,6 +1814,24 @@ msgstr "" "crearán. (La desactivación se proporciona en los casos en que su descarga no " "esté disponible por algún motivo)" +msgid "Recommended value" +msgstr "" + +msgid "default" +msgstr "por defecto" + +msgid "compact" +msgstr "compacto" + +msgid "classic" +msgstr "clásico" + +msgid "light" +msgstr "ligero" + +msgid "dark" +msgstr "oscuro" + msgid "Choose a graphics card to run the game" msgstr "Elige una tarjeta gráfica para ejecutar el juego" @@ -1814,10 +1842,10 @@ msgstr "" "Selecciona qué tarjeta de vídeo se utilizará para ejecutar el juego (se " "utiliza para todos los juegos y programas en ejecución en PortProton)" -msgid "Force dpi for fonts" +msgid "Force dpi" msgstr "" -msgid "Here you can set forced dpi for fonts in wine" +msgid "Here you can set forced dpi for applications wine" msgstr "" msgid "Choice wine audio driver" @@ -1826,12 +1854,18 @@ msgstr "Controlador de audio de vino elegido" msgid "Fixes sound popling if choice alsa" msgstr "Corrige el sonido estallido de elección alsa alsa" -msgid "Choice gui themes" -msgstr "Temas de interfaz gráfica de usuario elegidos" +msgid "Select PortProton theme" +msgstr "Seleccione el tema PortProton" msgid "Allows you to select a theme for PortProton" msgstr "Le permite seleccionar un tema para PortProton" +msgid "Select gtk theme" +msgstr "Seleccione el tema gtk" + +msgid "Allows you to select a theme for GTK." +msgstr "Le permite seleccionar un tema para GTK." + msgid "Time display" msgstr "Mostrar tiempo" @@ -2222,6 +2256,9 @@ msgid "" "list below:" msgstr "" +#~ msgid "Choice gui themes" +#~ msgstr "Temas de interfaz gráfica de usuario elegidos" + #~ msgid "" #~ "A higher number of duplicate desktop files were found for this file." #~ "\\nShould I delete the extra ones or not?" diff --git a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po index 07e08408..3c0a8eae 100644 --- a/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po +++ b/data_from_portwine/locales/ru/LC_MESSAGES/PortProton.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-11-01 02:43+0500\n" -"PO-Revision-Date: 2024-11-01 02:44+0500\n" +"POT-Creation-Date: 2024-11-13 08:17+0500\n" +"PO-Revision-Date: 2024-11-13 08:18+0500\n" "Last-Translator: \n" "Language-Team: \n" "Language: ru_RU\n" @@ -351,6 +351,9 @@ msgstr "OK" msgid "Do you want to installing recommended libraries in the new prefix:" msgstr "Хотите добавить рекомендуемые библиотеки в префикс:" +msgid "Launched" +msgstr "Запущено" + msgid "" "d3dadapter9.so.1.0.0 - Not found in the system.\\nInstall the missing " "package: d3dadapter9" @@ -1615,6 +1618,13 @@ msgstr "" "запуском), работает вместе с SDL BACKEND (используется по умолчанию в " "Wayland сессии)" +#, fuzzy +msgid "" +"if specified, sets a base output height to linearly scale the cursor against." +msgstr "" +"Если указано, устанавливает базовую высоту вывода для линейного " +"масштабирования курсора." + msgid "Change settings gamescope for" msgstr "Изменить настройки Gamescope для" @@ -1782,6 +1792,24 @@ msgstr "" "создаваться. (Отключение предусмотрено в тех случаях, когда их скачивание по " "каким-то причинам недоступно)" +msgid "Recommended value" +msgstr "Рекомендуемое значение" + +msgid "default" +msgstr "по умолчанию" + +msgid "compact" +msgstr "компактная" + +msgid "classic" +msgstr "классическая" + +msgid "light" +msgstr "светлая" + +msgid "dark" +msgstr "тёмная" + msgid "Choose a graphics card to run the game" msgstr "Выбрать видеокарту для запуска игры" @@ -1792,12 +1820,11 @@ msgstr "" "Выбор видеокарты для запуска игры (используется для всех запущенных игр и " "программ в PortProton)" -msgid "Force dpi for fonts" -msgstr "Принудительное разрешение шрифтов" +msgid "Force dpi" +msgstr "Принудительный масштаб" -msgid "Here you can set forced dpi for fonts in wine" -msgstr "" -"Здесь вы можете установить принудительное разрешение для шрифтов в Wine" +msgid "Here you can set forced dpi for applications wine" +msgstr "Здесь вы можете установить принудительный масштаб для приложений wine" msgid "Choice wine audio driver" msgstr "Выбрать звуковой драйвер" @@ -1805,12 +1832,18 @@ msgstr "Выбрать звуковой драйвер" msgid "Fixes sound popling if choice alsa" msgstr "Выбор alsa исправляет заикание звука" -msgid "Choice gui themes" -msgstr "Выбор графической темы" +msgid "Select PortProton theme" +msgstr "Выбрать тему PortProton" msgid "Allows you to select a theme for PortProton" msgstr "Позволяет выбрать тему для PortProton" +msgid "Select gtk theme" +msgstr "Выбрать тему GTK" + +msgid "Allows you to select a theme for GTK." +msgstr "Позволяет выбрать светлую или тёмную тему" + msgid "Time display" msgstr "Отображение времени" @@ -2217,6 +2250,12 @@ msgstr "" "--autoinstall и название того, что необходимо установить, указано в списке " "ниже:" +#~ msgid "Running" +#~ msgstr "Запущено" + +#~ msgid "Choice gui themes" +#~ msgstr "Выбор графической темы" + #~ msgid "" #~ "A higher number of duplicate desktop files were found for this file." #~ "\\nShould I delete the extra ones or not?" diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index a569a6a9..4ac6cc91 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -1,6 +1,6 @@ #!/usr/bin/env bash # Author: Castro-Fidel (linux-gaming.ru) -# shellcheck disable=SC2140,SC2034,SC2068,SC2206 +# shellcheck disable=SC2034 ######################################################################## $PW_DEBUG print_error () { printf "\E[31m%s Error: $@ %s\e[0m\n" ;} @@ -40,7 +40,7 @@ export -f print_wrapped make_acronym () { local words acronym i - words=($1) + read -r -a words <<< "$1" acronym="${words[0]:0:1}" for ((i=1 ; i<${#words[@]} ; i++)) ; do acronym+="${words[$i]:0:1}" @@ -61,7 +61,7 @@ make_abbreviation () { } export -f make_abbreviation -check_variables () { [[ -z ${!1} ]] && export $1="$2" ;} +check_variables () { [[ -z ${!1} ]] && export "$1"="$2" ;} # Эксортирует несколько переменных за один раз (одной командой) # и создаёт список этих переменных в $keys_all @@ -73,20 +73,19 @@ set_several_variables () { key=${1//=*/} value=${1//*=/} keys_all+="$key " - export "$key"="$value" - shift + export "$key"="$value" ; shift done } add_to_var () { - if ! echo ${!1} | grep "$2" &>/dev/null - then export $1="${!1} $2" + if ! echo "${!1}" | grep "$2" &>/dev/null + then export "$1"="${!1} $2" fi } rm_from_var () { - if echo ${!1} | grep "$2" &>/dev/null - then export $1="$(echo "${!1//$2/}" | tr -s " ")" + if echo "${!1}" | grep "$2" &>/dev/null + then export "$1"="$(echo "${!1//$2/}" | tr -s " ")" fi } @@ -202,10 +201,9 @@ export -f change_locale generate_pot () { local FILES_FOR_GETTEXT i FILES_FOR_GETTEXT=(functions_helper start.sh setup.sh add_in_steam.sh help_info) - for i in ${FILES_FOR_GETTEXT[@]} ; do - sed 's/{translations\[/(gettext \"/g' "${PORT_SCRIPTS_PATH}/$i" > "${PORT_SCRIPTS_PATH}/${i}_tmp" - sed -i 's/]}/")/g' "${PORT_SCRIPTS_PATH}/${i}_tmp" - sed -i 's/eval_translations/gettext/g' "${PORT_SCRIPTS_PATH}/${i}_tmp" + for i in "${FILES_FOR_GETTEXT[@]}" ; do + sed -e 's/{translations\[/(gettext \"/g' -e 's/]}/")/g' -e 's/eval_translations/gettext/g' \ + "${PORT_SCRIPTS_PATH}/$i" > "${PORT_SCRIPTS_PATH}/${i}_tmp" done #Когда присходит предупреждение: синтаксис $"..." запрещен по соображениям безопасности; используйте eval_gettext #и ругается на строку в которой нет перевода, можно использовать sed -i '//d' и убрать эту строку @@ -266,7 +264,7 @@ EOF po_file="${PORT_WINE_PATH}/data/locales/$LANGUAGE/LC_MESSAGES/PortProton.po" fi - while IFS= read -r line ; do + while read -r line ; do while [[ $line =~ msgid ]] ; do unset msgid msgid="$line" @@ -308,7 +306,7 @@ EOF msgid=${msgid//\"\"/} msgid=${msgid//#*/} msgid=${msgid//"*"/#_#} - if [[ $msgid != "" ]] ; then + if [[ -n $msgid ]] ; then if [[ -z $msgstr ]] ; then msgstr="$msgid" fi @@ -322,7 +320,6 @@ EOF fi done done < "$po_file" - IFS="$orig_IFS" echo ")" >> "${PW_CACHE_LANG_PATH}/$LANGUAGE" sed -i 's/+_+/\n/g' "${PW_CACHE_LANG_PATH}/$LANGUAGE" @@ -408,36 +405,100 @@ try_copy_file_with_checksums () { } export -f try_copy_file_with_checksums +lsbash () { + local grep_with_i grep_with_v find_name directory find_file found_successfully find_file_old find_file_old_array + if [[ $1 =~ \/ ]] ; then + directory=$1 ; shift + else + directory=$PWD + fi + grep_find_file1 () { + find_file_old=$find_file + if [[ $grep_with_i == true ]] ; then + find_file=${find_file,,} + find_name=${find_name,,} + fi + grep_find_file2 () { + if [[ -z $1 ]] ; then + echo "$find_file_old" + found_successfully=1 + else + find_file_old_array+=("$find_file_old") + fi + } + if [[ $grep_with_v == true ]] ; then + if [[ ! $find_file =~ $find_name ]] ; then + grep_find_file2 "$@" + fi + else + if [[ $find_file =~ $find_name ]] \ + || [[ -z $find_name ]] ; then + grep_find_file2 "$@" + fi + fi + } + while true ; do + unset grep_with_i grep_with_v + if [[ $1 == --grep ]] ; then + shift + while true ; do + # аналог grep -i + if [[ $1 == "-i" ]] ; then + grep_with_i=true ; shift ; continue + fi + # аналог grep -v + if [[ $1 == "-v" ]] ; then + grep_with_v=true ; shift ; continue + fi + find_name=$1 ; shift ; break + done + fi + if [[ -n ${find_file_old_array[0]} ]] ; then + for find_file in "${find_file_old_array[@]}" ; do + unset find_file_old_array + grep_find_file1 "$@" + done + else + for find_file in "$directory"/* ; do + find_file=${find_file//*\//} + grep_find_file1 "$@" + done + fi + if [[ -n $1 ]] ; then continue ; else break ; fi + done + if [[ $found_successfully == 1 ]] ; then + return 0 + else + return 1 + fi +} + try_copy_dir () { if [[ ! -d "$1" ]] ; then print_info "directory $1 not found for copy" elif [[ -z "$2" ]] ; then print_error "no way to copy directory $1" else - cp -fr "$1" "$2" - [[ "$?" != 0 ]] && print_error "failed to copy directory $1 to $2" || return 0 + cp -fr "$1" "$2" && return 0 || print_error "failed to copy directory $1 to $2" && return 1 fi - return 1 } export -f try_copy_dir try_remove_file () { if [[ -f "$1" ]] || [[ ! -e "$1" ]] ; then - rm -f "$1" - [[ "$?" == 0 ]] && return 0 || return 1 + rm -f "$1" && return 0 fi } export -f try_remove_file try_remove_dir () { if [[ -d "$1" ]] ; then - rm -fr "$1" - [[ "$?" == 0 ]] && return 0 || return 1 + rm -fr "$1" && return 0 fi } export -f try_remove_dir create_new_dir () { if [[ ! -d "$1" ]] ; then - mkdir -p "$1" + mkdir -p "$1" || return 1 fi return 0 } @@ -483,10 +544,13 @@ try_force_link_dir () { if [[ ! -d "$1" ]] ; then print_info "directory $1 not found for link" elif [[ -z "$2" ]] ; then print_error "no way to link directory $1" else - ln -s -f -r "$1" "$2" - [[ "$?" != 0 ]] && print_error "failed to link directory $1 to $2" || return 0 + if ln -s -f -r "$1" "$2" ; then + return 0 + else + print_error "failed to link directory $1 to $2" + return 1 + fi fi - return 1 } export -f try_force_link_dir @@ -541,9 +605,9 @@ try_download () { && [[ "$no_mirror" != "true" ]] then FIRST_URL=("$url_cloud/$filename") - SECOND_URL=($1) + read -r -a SECOND_URL <<< "$1" else - FIRST_URL=($1) + read -r -a FIRST_URL <<< "$1" SECOND_URL=("$url_cloud/$filename") fi @@ -553,7 +617,7 @@ try_download () { if check_gamescope_session ; then $PW_TERM "echo ; echo ; echo \"Downloading: $filename. Please wait...\" \ ; curl -f -# -A 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' -H 'Cache-Control: no-cache, no-store' \ - -H 'Pragma: no-cache' -L ${FIRST_URL[@]} -o \"$dest\"" + -H 'Pragma: no-cache' -L ${FIRST_URL[*]} -o \"$dest\"" [[ "$?" != 0 ]] && return 1 || return 0 fi @@ -562,10 +626,10 @@ try_download () { set -o pipefail if [[ "$silent" == "true" ]] ; then curl -f -# -A 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' -H 'Cache-Control: no-cache, no-store' \ - -H 'Pragma: no-cache' -L ${FIRST_URL[@]} -o "$dest" 2>&1 + -H 'Pragma: no-cache' -L "${FIRST_URL[@]}" -o "$dest" 2>&1 else curl -f -# -A 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' -H 'Cache-Control: no-cache, no-store' \ - -H 'Pragma: no-cache' -L ${FIRST_URL[@]} -o "$dest" 2>&1 | \ + -H 'Pragma: no-cache' -L "${FIRST_URL[@]}" -o "$dest" 2>&1 | \ tr '\r' '\n' | sed -ur 's|[# ]+||g;s|100||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \ "$pw_yad" --progress --text="${translations[Downloading]} $filename" --auto-close --no-escape \ --auto-kill --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \ @@ -576,7 +640,7 @@ try_download () { if [[ "$no_mirror" != "true" ]] ; then print_warning "Failed download $filename from ${FIRST_URL[0]}, trying mirror: ${SECOND_URL[0]}" curl -f -# -A 'Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)' -H 'Cache-Control: no-cache, no-store' \ - -H 'Pragma: no-cache' -L ${SECOND_URL[@]} -o "$dest" 2>&1 | \ + -H 'Pragma: no-cache' -L "${SECOND_URL[@]}" -o "$dest" 2>&1 | \ tr '\r' '\n' | sed -ur 's|[# ]+||g;s|100||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \ "$pw_yad" --progress --text="${translations[Downloading]} $filename" --auto-close --no-escape \ --auto-kill --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \ @@ -587,7 +651,7 @@ try_download () { return 1 else print_ok "File downloaded successfully: $filename from ${SECOND_URL[0]}" - if try_check_sha256sum ${SECOND_URL[@]} ; then + if try_check_sha256sum "${SECOND_URL[@]}" ; then return 0 else try_remove_file "$dest" @@ -596,7 +660,7 @@ try_download () { fi fi print_ok "File downloaded successfully: $filename from ${FIRST_URL[0]}" - if try_check_sha256sum ${FIRST_URL[@]} ; then + if try_check_sha256sum "${FIRST_URL[@]}" ; then return 0 else try_remove_file "$dest" @@ -655,17 +719,14 @@ var_ld_library_path_update () { # GUI NOTIFY SEND pw_notify_send () { if command -v gdbus &>/dev/null ; then - local app="PortProton" - local icon="" - local timeout="5000" - local title="" - local body="" - - local OPTIND="1" + local icon title body app timeout OPTIND + app="PortProton" + timeout="5000" + OPTIND="1" while getopts a:i:t: opt ; do case "$opt" in a) - local app=$OPTARG + app=$OPTARG ;; i) case "$OPTARG" in @@ -673,10 +734,10 @@ pw_notify_send () { warning) local OPTARG="${PORT_WINE_PATH}/data/img/gui/notify_warning.svg";; error) local OPTARG="${PORT_WINE_PATH}/data/img/gui/notify_error.svg";; esac - local icon=$OPTARG + icon=$OPTARG ;; t) - local timeout=$OPTARG + timeout=$OPTARG ;; *) echo "usage: $0 @@ -689,10 +750,8 @@ pw_notify_send () { done shift $(( OPTIND - 1 )) [[ "$1" == "--" ]] && shift - - local title="$1" - shift - local body="$*" + title="$1" ; shift + body="$*" gdbus call --session --dest org.freedesktop.Notifications \ --object-path /org/freedesktop/Notifications \ @@ -775,9 +834,10 @@ check_selinux () { export -f check_selinux background_pid () { - local arg1=$1 # --start или --end - local arg2=$2 # Название команды - local arg3=$3 # Номер процесса (1,2,3..) + local arg1 arg2 arg3 PID + arg1=$1 # --start или --end + arg2=$2 # Название команды + arg3=$3 # Номер процесса (1,2,3..) if [[ "$START_FROM_STEAM" == 1 ]] \ || [[ "$PW_GUI_DISABLED_CS" == 1 ]] \ @@ -793,10 +853,10 @@ background_pid () { case $arg1 in --start) eval "$arg2 &" - local PID=$! + PID=$! export bg_pid"${arg3}"="$PID" ;; --end) - local PID=$(get_bg_pid bg_pid"${arg3}") + PID=$(get_bg_pid bg_pid"${arg3}") [[ -z $PID ]] && return 1 wait "$PID" 2>/dev/null && return 0 ;; esac @@ -885,7 +945,7 @@ search_desktop_file () { desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}" if [[ $desktop_file_new =~ .desktop$ ]] ; then if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then - while IFS= read -r line1 ; do + while read -r line1 ; do if [[ $line1 =~ ^Exec= ]] ; then if check_flatpak ; then EXEC_DESKTOP=${line1//Exec=flatpak run ru.linux_gaming.PortProton /} @@ -902,9 +962,9 @@ search_desktop_file () { fi done if [[ $DESKTOP_WITH_TIME == enabled ]] || [[ $SORT_WITH_TIME == enabled ]] ; then - while IFS=" " read -r -a line2 ; do + while read -r -a line2 ; do if [[ -z ${line2[0]} ]] \ - || [[ ! ${line2[0],,} =~ (.bat$|.exe$|.msi$|.reg$) ]] ; then + || [[ ! ${line2[0],,} =~ .(bat|exe|msi|reg)$ ]] ; then BROKEN_LINE=1 break fi @@ -919,18 +979,16 @@ search_desktop_file () { fi done < "$PORT_WINE_TMP_PATH/statistics" fi - IFS="$orig_IFS" if [[ $DESKTOP_WITH_TIME == enabled ]] || [[ $SORT_WITH_TIME == enabled ]] ; then local line3 line4 count_line i TIME_TOTAL SKIP_REPAIR ## Ремонты: # Ремонт, проверяет чтобы длинна хеш суммы была равна 64 символам, в ином случае удалит битые if [[ $FILE_SHA256SUM_NOT_FOUND == 1 ]] && [[ ${#line2[1]} != "64" ]] ; then - while IFS=" " read -r -a line3 ; do + while read -r -a line3 ; do if [[ ${#line3[1]} == "64" ]] then echo "${line3[*]}" fi done < "$PORT_WINE_TMP_PATH/statistics" > "$PORT_WINE_TMP_PATH/statistics_repair" - IFS="$orig_IFS" try_remove_file "$PORT_WINE_TMP_PATH/statistics" mv -f "$PORT_WINE_TMP_PATH/statistics_repair" "$PORT_WINE_TMP_PATH/statistics" return 1 @@ -938,12 +996,11 @@ search_desktop_file () { # Ремонт, если есть пустые строки и непонятные строки без .exe, .bat, .msi, .reg if [[ $BROKEN_LINE == 1 ]] ; then - while IFS=" " read -r -a line4 ; do - if [[ -n ${line4[0]} ]] && [[ ${line4[0]} =~ (.[Bb][Aa][Tt]$|.[Ee][Xx][Ee]$|.[Mm][Ss][Ii]$|.[Rr][Ee][Gg]$) ]] + while read -r -a line4 ; do + if [[ -n ${line4[0]} ]] && [[ ${line4[0],,} =~ .(bat|exe|msi|reg)$ ]] then echo "${line4[*]}" fi done < "$PORT_WINE_TMP_PATH/statistics" > "$PORT_WINE_TMP_PATH/statistics_repair" - IFS="$orig_IFS" try_remove_file "$PORT_WINE_TMP_PATH/statistics" mv -f "$PORT_WINE_TMP_PATH/statistics_repair" "$PORT_WINE_TMP_PATH/statistics" return 1 @@ -1114,8 +1171,8 @@ create_name_desktop () { fi if (( ${#PORTWINE_DB_DESKTOP} > 3 )) ; then for ((i=0 ; i<${#PORTWINE_DB_DESKTOP} ; i++)) ; do - if [[ ${PORTWINE_DB_DESKTOP:i:2} =~ ([a-z][A-Z]|[a-z][0-9]) ]] \ - && [[ ! ${PORTWINE_DB_DESKTOP:i:3} =~ ([a-z][A-Z]" "|[a-z][0-9]" ") ]] ; then + if [[ ${PORTWINE_DB_DESKTOP:i:2} =~ [a-z]([A-Z]|[0-9]) ]] \ + && [[ ! ${PORTWINE_DB_DESKTOP:i:3} =~ [a-z]([A-Z]|[0-9])" " ]] ; then PORTWINE_DB_PROXY+="${PORTWINE_DB_DESKTOP:i:1} " elif [[ ${PORTWINE_DB_DESKTOP:i:3} =~ [0-9][0-9][a-zA-Z] ]] ; then PORTWINE_DB_PROXY+="${PORTWINE_DB_DESKTOP:i:2} " @@ -1235,8 +1292,10 @@ combobox_fix () { name3="!${name3//${name1}\!/\!}" name3="${name3//\!\!/\!}" name4="${name3//*\!/}" - if [[ ${name1} == "${name4}" ]] || [[ ${name1} == "\\${name4}" ]] - then name3="${name3%\!"${name1}"}" + if [[ ${name1} == "${name4}" ]] ; then + name3="${name3%\!"${name1}"}" + elif [[ ${name1} == "\\${name4}" ]] ; then + name3="${name3%\!"${name1//\\/}"}" fi if [[ "$1" == "--disabled" ]] ; then if [[ ${name1} == "disabled" ]] ; then @@ -1251,12 +1310,10 @@ combobox_fix () { fi fi echo "${name1}${name3}${fix_disabled}" - elif [[ "$1" == "--empty" ]] ; then - if [[ ${name1} != "" ]] ; then - if [[ ${name1} == "\\" ]] - then fix_empty="" - else fix_empty="!" - fi + elif [[ "$1" == "--empty" && -n ${name1} ]] ; then + if [[ ${name1} == "\\" ]] + then fix_empty="" + else fix_empty="!" fi echo "${name1}${name3}${fix_empty}" else @@ -1267,65 +1324,84 @@ combobox_fix () { } get_and_set_reg_file () { - local name_block name_for_find find_block find_file find_line count name_for_new_block - local line_reg find_number_line find_check_file name_for_set name_block_old + local name_block name_for_find find_block find_file find_line count name_for_new_block name_for_find_old + local line_reg find_number_line find_check_file name_for_set name_type_reg name_fatal name_add_or_del + name_add_or_del=$1 name_block=$2 - name_block_old=$name_block name_for_find=$3 - name_for_set=$4 - name_for_new_block=$5 - name_block=${name_block//\\/\\\\} - name_block=${name_block//\[/\\[} - find_block=$(grep -n "${name_block//\]/\\]}" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/"*.reg) + name_type_reg=$4 + name_for_set=$5 + name_for_new_block=$6 + name_for_find_old=$name_for_find + name_fatal="$name_block $name_for_find" + + case $name_type_reg in + REG_DWORD) + name_for_find="\"$name_for_find\"=dword:" + name_for_set=$(convert_dec_and_hex --dec "$name_for_set") ;; + REG_SZ) + name_for_find="\"$name_for_find\"=" + name_for_set="\"$name_for_set\"" ;; + *) + if [[ $name_add_or_del == --delete ]] ; then + name_for_find="\"$name_for_find\"" + else + print_error "Name type reg not set for $name_fatal" + return 1 + fi ;; + esac + name_block=${name_block//\\/\\\\\\\\} + if [[ -n $name_for_new_block ]] ; then + find_block=$(grep -n "\[$name_block\]" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/$name_for_new_block.reg") + else + find_block=$(grep -n "\[$name_block\]" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/"*.reg) + fi if [[ -n $find_block ]] ; then - find_file=${find_block//:*/} - find_line=${find_block//$find_file:/} - find_line=${find_line//:*/} + if [[ -n $name_for_new_block ]] ; then + find_file="${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/$name_for_new_block.reg" + find_line=${find_block//:*/} + else + find_file=${find_block//:*/} + find_line=${find_block//$find_file:/} + find_line=${find_line//:*/} + fi count=-1 - while IFS= read -r line_reg ; do + while read -r line_reg ; do ((count++)) if [[ $line_reg =~ $name_for_find ]] ; then + if [[ $line_reg == $name_for_find$name_for_set ]] ; then + # когда менять не нужно, потому что такое же + return 0 + fi find_number_line=$(( count + find_line )) find_check_file=1 break fi [[ -z $line_reg ]] && break - done <<< $(sed -n "$find_line"',$p' $find_file) - IFS="$orig_IFS" + done <<< "$(sed -n "$find_line"',$p' "$find_file")" fi - if [[ $1 == --add ]] ; then + if [[ $name_add_or_del == --add ]] ; then if [[ -z $find_block ]] ; then if [[ -n $name_for_new_block ]] ; then - sed -i '$a\\n'"${name_block_old//\\/\\\\}" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/$name_for_new_block.reg" - find_file=${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/$name_for_new_block.reg + sed -i '$a\\n'\["$name_block"\] "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/$name_for_new_block.reg" + find_file="${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/$name_for_new_block.reg" find_line=$(wc -l "$find_file" | awk -F" " '{print $1}') find_line=$(( find_line - 1 )) else - print_error "$name_block_old not found in reg files" + print_error "$name_fatal not found in reg files" return 1 fi fi - if [[ $name_for_set =~ ^[0-9]+$ ]] ; then - name_for_set=$(convert_dec_and_hex --dec "$name_for_set") - fi - if [[ ! $name_for_set =~ ^[0-9]+$ ]] ; then - if [[ $find_check_file == 1 ]] ; then - sed -i "${find_number_line}s/$name_for_find.*/$name_for_find\"$name_for_set\"/" "$find_file" - else - print_info "Added ${name_for_find//=*} to reg file" - sed -i "$(( find_line + 1 ))"'a\\n'"$name_for_find\"$name_for_set\"" "$find_file" - fi + if [[ $find_check_file == 1 ]] ; then + print_info "Change $name_for_find_old to reg file" + sed -i "${find_number_line}s|$name_for_find.*|$name_for_find$name_for_set|" "$find_file" else - if [[ $find_check_file == 1 ]] ; then - sed -i "${find_number_line}s/$name_for_find.*/$name_for_find$name_for_set/" "$find_file" - else - print_info "Added ${name_for_find//=*} to reg file" - sed -i "$(( find_line + 1 ))"'a\\n'"$name_for_find$name_for_set" "$find_file" - fi + print_info "Added $name_for_find_old to reg file" + sed -i "$(( find_line + 1 ))a$name_for_find$name_for_set" "$find_file" fi - elif [[ $1 == --delete ]] ; then + elif [[ $name_add_or_del == --delete ]] ; then [[ $find_check_file != 1 ]] && return 0 - print_info "Delete ${name_for_find//=*} to reg file" + print_info "Delete $name_for_find_old to reg file" sed -i "${find_number_line}d" "$find_file" fi } @@ -1337,7 +1413,7 @@ convert_dec_and_hex () { case "$type" in --dec) # Преобразование из десятичного в шестнадцатеричный - echo -n $(printf "%08x" $num) ;; + echo -n "$(printf "%08x" "$num")" ;; --hex) # Преобразование из шестнадцатеричного в десятичный echo $(( 0x$num )) ;; @@ -1346,12 +1422,39 @@ convert_dec_and_hex () { esac } +recommend_dpi () { + local height=$1 + + if [[ -z "$height" ]] ; then + echo "disabled" + return 1 + fi + local dpi=$(( height / 11 )) + (( dpi < 96 )) && dpi="96" + echo "$dpi" +} + +fixes_after_update () { + local fixes_path line fixes_info IFS + fixes_info=$1 + fixes_path="$PORT_WINE_TMP_PATH/fixes_apply" + [[ ! -f $fixes_path ]] && touch "$fixes_path" + + while read -r line ; do + if [[ $line == "$fixes_info" ]] ; then + return 1 + fi + done < "$fixes_path" + echo "$fixes_info" >> "$fixes_path" + return 0 +} + restart_pp () { case "$1" in --userconf) export RESTART_PP_USED="userconf" ;; --edit_db) export RESTART_PP_USED="edit_db" ;; esac - /usr/bin/env bash -c ${pw_full_command_line[@]} & + /usr/bin/env bash -c "${pw_full_command_line[@]}" & exit 0 } @@ -1450,7 +1553,7 @@ init_wine_ver () { else if [[ -d "${PORT_WINE_PATH}/data/dist" ]] ; then IFS=$'\n' - for dist_dir in $(ls -1 "${PORT_WINE_PATH}/data/dist/") ; do + for dist_dir in $(lsbash "${PORT_WINE_PATH}/data/dist/") ; do dist_dir_new=$(echo "${dist_dir}" | awk '$1=$1' | sed -e s/[[:blank:]]/_/g) if [[ ! -d "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}" ]] ; then mv -- "${PORT_WINE_PATH}/data/dist/$dist_dir" "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}" @@ -1458,7 +1561,7 @@ init_wine_ver () { done IFS="$orig_IFS" fi - if [[ -z $(ls "${PORT_WINE_PATH}/data/dist/" | grep "${PW_WINE_USE}") ]] ; then + if [[ -z $(lsbash "${PORT_WINE_PATH}/data/dist/" --grep "${PW_WINE_USE}") ]] ; then if [[ "$PW_WINE_USE" =~ PROTON_LG* ]] then export PW_WINE_USE=PROTON_LG else export PW_WINE_USE=WINE_LG @@ -1475,20 +1578,20 @@ init_wine_ver () { export WINELOADER="${WINEDIR}/bin/wine" export WINESERVER="${WINEDIR}/bin/wineserver" if [[ -d "${WINEDIR}/files" && ! -d "${WINEDIR}/dist" ]] ; then - for clear_dist_files in $(ls "${WINEDIR}" | sed -e "s/^files$//g" | sed -e "s/^version$//g") ; do + for clear_dist_files in $(lsbash "$WINEDIR" | sed -r "s/^(files|version)$//g") ; do rm -fr "${WINEDIR}/$clear_dist_files" done mv -f "${WINEDIR}/files"/* "${WINEDIR}/" rm -fr "${WINEDIR}/files" elif [[ ! -d "${WINEDIR}/files" && -d "${WINEDIR}/dist" ]] ; then - for clear_dist_files in $(ls "${WINEDIR}" | sed -e "s/^dist$//g" | sed -e "s/^version$//g") ; do + for clear_dist_files in $(lsbash "$WINEDIR" | sed -r "s/^(dist|version)$//g") ; do rm -fr "${WINEDIR}/$clear_dist_files" done mv -f "${WINEDIR}/dist"/* "${WINEDIR}/" rm -fr "${WINEDIR}/dist" elif [[ -f "${WINEDIR}/proton_dist.tar" ]] ; then unpack "${WINEDIR}/proton_dist.tar" "${WINEDIR}/" - for clear_dist_files in $(ls "${WINEDIR}" | sed -e "s/^bin$//g" | sed -e "s/^lib$//g" | sed -e "s/^lib64$//g" | sed -e "s/^share$//g" | sed -e "s/^version$//g") ; do + for clear_dist_files in $(lsbash "$WINEDIR" | sed -r "s/^(bin|lib|lib64|share|version)$//g") ; do rm -fr "${WINEDIR}/$clear_dist_files" done fi @@ -1520,7 +1623,7 @@ init_wine_ver () { if ! grep 'Global,"{41FCC608-8496-4DEF-B43E-7D9BD675A6FF}",0x10001,0x00000001' "${WINEDIR}/share/wine/wine.inf" &>/dev/null ; then echo 'HKLM,Software\NVIDIA Corporation\Global,"{41FCC608-8496-4DEF-B43E-7D9BD675A6FF}",0x10001,0x00000001' >> "${WINEDIR}/share/wine/wine.inf" - echo 'HKLM,System\ControlSet001\Services\nvlddmkm,"{41FCC608-8496-4DEF-B43E-7D9BD675A6FF}",0x10001,0x00000001' >> "${WINEDIR}/share/wine/wine.inf" + echo -e 'HKLM,System\ControlSet001\Services\nvlddmkm,"{41FCC608-8496-4DEF-B43E-7D9BD675A6FF}",0x10001,0x00000001' >> "${WINEDIR}/share/wine/wine.inf" sed -i '/Steam.exe/d' "${WINEDIR}/share/wine/wine.inf" sed -i '/\\Valve\\Steam/d' "${WINEDIR}/share/wine/wine.inf" sed -i '/winemenubuilder/d' "${WINEDIR}/share/wine/wine.inf" @@ -1558,7 +1661,9 @@ pw_init_runtime () { if grep -i "altlinux" "/etc/os-release" &>/dev/null ; then export LIBGL_DRIVERS_PATH="/usr/lib/X11/modules/dri:/usr/lib64/X11/modules/dri" - if [[ -f "/usr/share/vulkan/icd.d/nvidia_icd.json" ]] ; then + if [[ -f "/usr/share/vulkan/icd.d/nvidia_icd.json" ]] \ + && [[ "$LSPCI_VGA" == *nvidia* ]] + then VK_ADD_DRIVER_FILES="$(realpath /usr/share/vulkan/icd.d/nvidia_icd.json)" export VK_ADD_DRIVER_FILES fi @@ -1620,13 +1725,13 @@ ${PW_PV_OVERRIDES}/i386-linux-gnu/aliases:\ export FONTCONFIG_PATH='' unset PRESSURE_VESSEL_FILESYSTEMS_RO PRESSURE_VESSEL_FILESYSTEMS_RW - for PWRTMRO in ${PW_RT_MOUNT_RO[*]} ; do + for PWRTMRO in "${PW_RT_MOUNT_RO[@]}" ; do if [[ -n "${PRESSURE_VESSEL_FILESYSTEMS_RO}" ]] then export PRESSURE_VESSEL_FILESYSTEMS_RO="${PRESSURE_VESSEL_FILESYSTEMS_RO}:${PWRTMRO}" else export PRESSURE_VESSEL_FILESYSTEMS_RO="${PWRTMRO}" fi done - for PWRTMRW in ${PW_RT_MOUNT_RW[*]} ; do + for PWRTMRW in "${PW_RT_MOUNT_RW[@]}" ; do if [[ -n "${PRESSURE_VESSEL_FILESYSTEMS_RW}" ]] then export PRESSURE_VESSEL_FILESYSTEMS_RW="${PRESSURE_VESSEL_FILESYSTEMS_RW}:${PWRTMRW}" else export PRESSURE_VESSEL_FILESYSTEMS_RW="${PWRTMRW}" @@ -1769,7 +1874,7 @@ pw_kill_autostart () { fi done - if [[ -n "$(ls "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/drive_c/ | grep -m 1 ".tmp")" ]] ; then + if [[ -n "$(lsbash "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/drive_c/ | grep -m 1 ".tmp")" ]] ; then rm -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/drive_c/*.tmp fi @@ -1860,8 +1965,8 @@ pw_download_libs () { "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" ; then if unpack "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/" ; then try_remove_file "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" - if ls "${PORT_WINE_TMP_PATH}" | grep libs_v | grep -v libs"${PW_LIBS_VER}" ; then - for RM_LIBS in $(ls "${PORT_WINE_TMP_PATH}" | grep libs_v | grep -v libs"${PW_LIBS_VER}") + if lsbash "${PORT_WINE_TMP_PATH}" --grep libs_v --grep -v libs"${PW_LIBS_VER}" ; then + for RM_LIBS in $(lsbash "${PORT_WINE_TMP_PATH}" --grep libs_v --grep -v libs"${PW_LIBS_VER}") do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_LIBS}" done fi @@ -2011,9 +2116,9 @@ pw_check_and_download_plugins () { try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" # TODO: drop clear prefix, and add update prefix from new plugins pw_clear_pfx - if ls "${PORT_WINE_TMP_PATH}" | grep plugins_v | grep -v "plugins${PW_PLUGINS_VER}" + if lsbash "${PORT_WINE_TMP_PATH}" --grep plugins_v --grep -v "plugins${PW_PLUGINS_VER}" then - for RM_PLUGINS in $(ls "${PORT_WINE_TMP_PATH}" | grep plugins_v | grep -v "plugins${PW_PLUGINS_VER}") + for RM_PLUGINS in $(lsbash "${PORT_WINE_TMP_PATH}" --grep plugins_v --grep -v "plugins${PW_PLUGINS_VER}") do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}" done fi @@ -2044,9 +2149,9 @@ pw_check_and_download_plugins () { try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" # TODO: drop clear prefix, and add update prefix from new plugins pw_clear_pfx - if ls "${PORT_WINE_TMP_PATH}" | grep plugins_v | grep -v "plugins${PW_PLUGINS_VER}" + if lsbash "${PORT_WINE_TMP_PATH}" --grep plugins_v --grep -v "plugins${PW_PLUGINS_VER}" then - for RM_PLUGINS in $(ls "${PORT_WINE_TMP_PATH}" | grep plugins_v | grep -v "plugins${PW_PLUGINS_VER}") + for RM_PLUGINS in $(lsbash "${PORT_WINE_TMP_PATH}" --grep plugins_v --grep -v "plugins${PW_PLUGINS_VER}") do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}" done fi @@ -2148,7 +2253,7 @@ check_dirs_and_files_in_pfx () { } check_nvidia_rtx () { - if [[ -n $(echo "$LSPCI_VGA" | grep -i "nvidia") ]] ; then + if [[ "$LSPCI_VGA" == *nvidia* ]] ; then # Turing (without nvidia 16XX) [[ "$LSPCI_VGA" == *TU[0-9]* ]] && [[ "$LSPCI_VGA" != *TU11[6-7]* ]] && return 0 # Ampere @@ -2173,7 +2278,7 @@ pw_init_db () { # shellcheck source=/dev/null source "${PORTWINE_DB_FILE}" if echo "${portwine_exe}" | grep "/prefixes/" &>/dev/null ; then - if [[ -z $(ls "${PORT_WINE_PATH}/prefixes/" | grep -e ^"${PW_PREFIX_NAME}"$) ]] \ + if [[ -z $(lsbash "${PORT_WINE_PATH}/prefixes/" --grep ^"${PW_PREFIX_NAME}"$) ]] \ || [[ -z $(grep -e ^"export PW_PREFIX_NAME=" "${PORTWINE_DB_FILE}" 2>/dev/null) ]] then PW_PREFIX_NAME=$(echo "${portwine_exe}" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') @@ -2213,7 +2318,7 @@ pw_init_db () { try_copy_file "${PW_FIND_DB_FILE}" "${portwine_exe}".ppdb PORTWINE_DB_FILE="${portwine_exe}".ppdb if echo "${portwine_exe}" | grep "/prefixes/" &>/dev/null ; then - if [[ -z $(ls "${PORT_WINE_PATH}/prefixes/" | grep -e ^"${PW_PREFIX_NAME}"$) ]] \ + if [[ -z $(lsbash "${PORT_WINE_PATH}/prefixes/" --grep ^"${PW_PREFIX_NAME}"$) ]] \ || [[ -z $(grep -e ^"export PW_PREFIX_NAME=" "${PORTWINE_DB_FILE}" 2>/dev/null) ]] then PW_PREFIX_NAME=$(echo "${portwine_exe}" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') @@ -2262,7 +2367,7 @@ pw_init_db () { if [[ "${PW_WINE_CPU_TOPOLOGY}" == "disabled" ]] && [[ -n "${WINE_CPU_TOPOLOGY}" ]] ; then export PW_WINE_CPU_TOPOLOGY="${WINE_CPU_TOPOLOGY}" fi - if ls "${PATH_TO_GAME}"/*_Data/Resources/ 2>/dev/null | grep "unity" &>/dev/null \ + if lsbash "${PATH_TO_GAME}"/*_Data/Resources/ --grep "unity" &>/dev/null \ && [[ "${PW_WINE_CPU_TOPOLOGY}" == "disabled" ]] \ && [[ $(grep -c ^"processor" /proc/cpuinfo) -gt "8" ]] then @@ -2330,7 +2435,7 @@ pw_port_update () { return 1 fi - PW_UPDATE_ALL_LIST=($UPDATE_ETERFUND $UPDATE_GITHUB $UPDATE_PP_GITEA) + read -r -a PW_UPDATE_ALL_LIST <<< "$UPDATE_ETERFUND $UPDATE_GITHUB $UPDATE_PP_GITEA" UPDATE_MIN=${PW_UPDATE_ALL_LIST[0]} for i in "${!PW_UPDATE_ALL_LIST[@]}"; do @@ -2463,12 +2568,12 @@ pw_port_update () { "${pw_yad}" --title "${translations[Update scripts:]} v.(${scripts_install_ver}${BRANCH_VERSION})" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --width=1280 --height=720 --text-info --wrap --scroll \ - --button="${translations[DO NOT REMIND ME]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":16 \ - --button="${translations[REMIND ME LATER]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":18 \ - --button="${translations[UPDATING NOW]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":20 < "${PORT_WINE_TMP_PATH}/curent_var_ver" 2>/dev/null + --button="${translations[DO NOT REMIND ME]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!":16 \ + --button="${translations[REMIND ME LATER]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!":18 \ + --button="${translations[UPDATING NOW]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!":20 < "${PORT_WINE_TMP_PATH}/curent_var_ver" 2>/dev/null YAD_STATUS="$?" - # --button="${translations[EXIT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":252 \ + # --button="${translations[EXIT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!":252 \ fi try_remove_file "${PORT_WINE_TMP_PATH}/curent_var_ver" case $YAD_STATUS in @@ -2636,12 +2741,11 @@ edit_db_from_gui () { print_warning "Skipped edit_db_from_gui" return 0 fi - print_info "edit_db_from_gui PORTWINE_DB_FILE=$PORTWINE_DB_FILE" if [[ -n "$PORTWINE_DB_FILE" ]] \ && [[ -f "$PORTWINE_DB_FILE" ]] then - for mod_db in $@ ; do + for mod_db in "$@" ; do proxy_mod_db="${!mod_db}" if [[ $proxy_mod_db =~ (${translations[Disabled]}|${translations[Disable]}) ]] ; then proxy_mod_db=disabled @@ -2658,7 +2762,11 @@ edit_db_from_gui () { } edit_user_conf_from_gui () { - for mod_db in $@ ; do + for mod_db in "$@" ; do + if [[ -z "${!mod_db}" ]] ; then + sed -i "/^export ${mod_db}=/d" "${USER_CONF}" + continue + fi proxy_mod_db="${!mod_db}" if [[ $proxy_mod_db =~ (${translations[Disabled]}|${translations[Disable]}) ]] ; then proxy_mod_db=disabled @@ -2717,7 +2825,7 @@ pw_create_gui_png () { if [[ "$PW_PRODUCTNAME" =~ (Launcher|RU) ]] then - PW_PRODUCTNAME="${PW_PRODUCTNAME//(Launcher|RU)/}" + PW_PRODUCTNAME=$(echo "$PW_PRODUCTNAME" | sed -r "s/(Launcher|RU)//g") fi if [[ -n "$PW_PRODUCTNAME" ]] \ @@ -2729,7 +2837,7 @@ pw_create_gui_png () { fi fi - PORTPROTON_NAME="$(echo "${PORTPROTON_NAME}" | sed "s/\`//g" | sed "s/\"//g" | sed "s/'//g" | sed "s/\!//g")" + PW_PRODUCTNAME=$(echo "$PW_PRODUCTNAME" | sed -r "s/(\`|\"|'|\!)//g") export PORTPROTON_NAME edit_db_from_gui PORTPROTON_NAME FILE_DESCRIPTION fi @@ -2770,11 +2878,11 @@ pw_find_exe () { --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${translations[Create shortcut for...]}" \ --text="\n${translations[Choose the .exe file for which you need to create a shortcut and click OK.\\n]}" \ --column="${translations[Choose path to .exe file:]}" ${FIND_TO_GUI} \ - --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ - --button="${translations[OK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null)" + --button="${translations[CANCEL]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ + --button="${translations[OK]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null)" YAD_STATUS="$?" - IFS="$orig_IFS" + if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then print_info "Restarting..." restart_pp @@ -2893,10 +3001,11 @@ start_portwine () { fi check_variables VKD3D_DEBUG none + check_variables VKD3D_SHADER_DEBUG none check_variables DXVK_LOG_LEVEL none + check_variables DXVK_NVAPI_LOG_LEVEL none check_variables VK_LOADER_DEBUG none check_variables VKBASALT_LOG_LEVEL none - check_variables DXVK_NVAPI_LOG_LEVEL none if [[ "${PW_LOG}" == 1 ]] \ || [[ -n "$PW_DEBUG" ]] then @@ -2910,15 +3019,20 @@ start_portwine () { pw_wineboot () { LIST_NATIVE_WINE_DLL_LINKS="winevulkan ir50_32 amd_ags_x64 wined3d vulkan-1" - for change_wine_dll in $LIST_NATIVE_WINE_DLL_LINKS ; do - try_force_link_file "${WINEDIR}/lib64/wine/x86_64-windows/${change_wine_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/${change_wine_dll}.dll" - try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${change_wine_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${change_wine_dll}.dll" + for dll in $LIST_NATIVE_WINE_DLL_LINKS ; do + try_force_link_file "${WINEDIR}/lib64/wine/x86_64-windows/${dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/${dll}.dll" + try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${dll}.dll" done LIST_NATIVE_WINE_DLL_COPY="atl100 ntdll shell32" - for change_wine_dll in $LIST_NATIVE_WINE_DLL_COPY ; do - try_copy_file "${WINEDIR}/lib64/wine/x86_64-windows/${change_wine_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/${change_wine_dll}.dll" - try_copy_file "${WINEDIR}/lib/wine/i386-windows/${change_wine_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${change_wine_dll}.dll" + for dll in $LIST_NATIVE_WINE_DLL_COPY ; do + try_copy_file "${WINEDIR}/lib64/wine/x86_64-windows/${dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/${dll}.dll" + try_copy_file "${WINEDIR}/lib/wine/i386-windows/${dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${dll}.dll" + done + + LIST_ICU_DLL_LINKS="icuin68 icuuc68 icudt68" + for dll in $LIST_ICU_DLL_LINKS ; do + try_force_link_file "${WINEDIR}/lib64/icu/${dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/${dll}.dll" done print_info "Used wineboot $@ for prefix: ${PW_PREFIX_NAME}" @@ -2989,8 +3103,20 @@ start_portwine () { export WINEFSYNC_FUTEX2="0" else export WINEFSYNC="1" - export WINEFSYNC_FUTEX2="1" export WINEFSYNC_SPINCOUNT=100 + check_variables WINEFSYNC_FUTEX2 0 + fi + + # export WINE_SIMULATE_ASYNC_READ=1 + # export WINE_FSYNC_SIMULATE_SCHED_QUANTUM=1 + # export WINE_ALERT_SIMULATE_SCHED_QUANTUM=1 + # export WINE_FSYNC_YIELD_TO_WAITERS=1 + # export WINE_KERNEL_STACK_SIZE=64 + # export WINE_DISABLE_KERNEL_WRITEWATCH=1 + # export WINE_SIMULATE_WRITECOPY="1" + + if [[ "${PW_NO_WRITE_WATCH}" == 1 ]] ; then + export WINE_DISABLE_WRITE_WATCH="1" fi if [[ "${PW_FORCE_LARGE_ADDRESS_AWARE}" == 1 ]] @@ -3003,13 +3129,11 @@ start_portwine () { export __GL_ExtensionStringVersion="17700" #nvidia override fi - if [[ "${PW_NO_WRITE_WATCH}" == 1 ]] ; then - export WINE_DISABLE_WRITE_WATCH="1" - fi - if [[ "${PW_VULKAN_NO_ASYNC}" == 1 ]] ; then export RADV_DEBUG+="llvm " var_vkd3d_config_update single_queue + else + export DXVK_ASYNC="1" fi enabled_fake_nvidia_videocard () @@ -3033,7 +3157,7 @@ start_portwine () { sed -i /'dxgi.hideNvidiaGpu =/c dxgi.hideNvidiaGpu = False' "${DXVK_CONFIG_FILE}" export WINE_HIDE_NVIDIA_GPU="0" export WINE_HIDE_AMD_GPU="1" - export DXVK_NVAPI_DRIVER_VERSION="53713" + export DXVK_NVAPI_DRIVER_VERSION="99999" export DXVK_NVAPI_ALLOW_OTHER_DRIVERS="1" export WINEHAGS="1" ;; @@ -3069,7 +3193,6 @@ start_portwine () { try_copy_file_with_checksums "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/nvngx.dll" try_copy_file_with_checksums "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/nvngx.ini" "${WINEPREFIX}/drive_c/windows/system32/nvngx.ini" enabled_fake_nvidia_videocard old - var_winedlloverride_update "nvapi,nvapi64,nvngx=n;_nvngx=;nvcuda=b" elif [[ "${PW_USE_NVAPI_AND_DLSS}" == 1 ]] ; then DXVK_ENABLE_NVAPI="1" try_remove_file "${WINEPREFIX}/drive_c/windows/system32/nvngx.ini" @@ -3077,12 +3200,14 @@ start_portwine () { if [[ -n "$FIND_NVNGX" ]] ; then try_copy_file_with_checksums "${FIND_NVNGX}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/nvngx.dll" try_copy_file_with_checksums "${FIND_NVNGX}/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/_nvngx.dll" + export NVIDIA_WINE_DLL_DIR="${FIND_NVNGX}" else try_copy_file_with_checksums "${PW_PLUGINS_PATH}/nvngx/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/nvngx.dll" try_copy_file_with_checksums "${PW_PLUGINS_PATH}/nvngx/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/_nvngx.dll" + export NVIDIA_WINE_DLL_DIR="${PW_PLUGINS_PATH}/nvngx" fi enabled_fake_nvidia_videocard 0 - var_winedlloverride_update "nvngx,_nvngx,nvapi,nvapi64=n;nvcuda=b" + var_winedlloverride_update "nvngx,_nvngx=n" else DXVK_ENABLE_NVAPI="0" for rm_dll in "nvngx.ini" "nvngx.dll" "_nvngx.dll" ; do @@ -3191,7 +3316,7 @@ start_portwine () { if command -v systemd-inhibit &>/dev/null \ && [[ "$GAMEMODERUN" != "1" ]] then - PW_INHIBIT_SLR="systemd-inhibit --mode=block --who=ru.linux_gaming.PortProton --why=${PW_NAME_DESKTOP_PROXY// /_}" + PW_INHIBIT_SLR="systemd-inhibit --mode=block --who=ru.linux_gaming.PortProton --why=${translations[Launched]}" print_info "Screensaver will be inhibit" fi pw_other_fixes @@ -3279,7 +3404,7 @@ start_portwine () { print_info "VKD3D-PROTON v.${VKD3D_STABLE_VER} in use" PATH_TO_DXVK_FILES="${PW_VULKAN_DIR}/dxvk-${DXVK_STABLE_VER}" PATH_TO_VKD3D_FILES="${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_STABLE_VER}" - CP_DXVK_FILES="d3d11 d3d10core d3d10_1 d3d10 d3d9 dxgi" # openvr_api_dxvk + CP_DXVK_FILES="d3d11 d3d10core d3d10_1 d3d10 d3d9 dxgi openvr_api_dxvk" CP_VKD3D_FILES="d3d12 libvkd3d-shader-1" CP_WINE_FILES="d3d12core d3d8" ;; @@ -3289,7 +3414,7 @@ start_portwine () { print_info "VKD3D-PROTON v.${VKD3D_GIT_VER} in use" PATH_TO_DXVK_FILES="${PW_VULKAN_DIR}/dxvk-${DXVK_GIT_VER}" PATH_TO_VKD3D_FILES="${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_GIT_VER}" - CP_DXVK_FILES="d3d11 d3d10core d3d9 d3d8 dxgi" # openvr_api_dxvk + CP_DXVK_FILES="d3d11 d3d10core d3d9 d3d8 dxgi openvr_api_dxvk" CP_VKD3D_FILES="d3d12 d3d12core libvkd3d-1 libvkd3d-shader-1" CP_WINE_FILES="d3d10_1 d3d10" ;; @@ -3592,6 +3717,12 @@ start_portwine () { print_info "Try create symlink NVAPI files..." try_force_link_file "${PATH_TO_DXVK_FILES}/x32/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/nvapi.dll" try_force_link_file "${PATH_TO_DXVK_FILES}/x64/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/nvapi64.dll" + try_force_link_file "${PATH_TO_DXVK_FILES}/x64/nvofapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/nvofapi64.dll" + var_winedlloverride_update "nvapi64,nvofapi64,nvapi=n;nvcuda=b" + else + try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/nvapi.dll" + try_remove_file "${WINEPREFIX}/drive_c/windows/system32/nvapi64.dll" + try_remove_file "${WINEPREFIX}/drive_c/windows/system32/nvofapi64.dll" fi if [[ -n "$CP_VKD3D_FILES" ]] ; then @@ -3697,8 +3828,9 @@ start_portwine () { fi #run_winetricks_from_db - if [[ -n "${PW_MUST_HAVE_DLL}" ]] - then export PW_DLL_INSTALL="$(echo "${PW_MUST_HAVE_DLL} ${PW_DLL_INSTALL}" | awk '{ for(i=1;i<=NF;i++){a[$i]++} }END{ for(i in a){printf("%s ",i)} }' )" + if [[ -n "${PW_MUST_HAVE_DLL}" ]] ; then + PW_DLL_INSTALL="$(echo "${PW_MUST_HAVE_DLL} ${PW_DLL_INSTALL}" | awk '{ for(i=1;i<=NF;i++){a[$i]++} }END{ for(i in a){printf("%s ",i)} }' )" + export PW_DLL_INSTALL fi if [[ -n "${PW_DLL_INSTALL}" ]] ; then @@ -3740,7 +3872,7 @@ start_portwine () { if [[ -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/system.reg" ]] \ && [[ -z $(grep "Windows $PW_WINDOWS_VER" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/system.reg") ]] then - if [[ -n "${PW_WINDOWS_VER}" ]] \ + if [[ -n $PW_WINDOWS_VER ]] \ && [[ $(echo "$PW_WINDOWS_VER" | sed 's/.*/\L&/') == "xp" ]] then export PW_WINDOWS_VER="xp64" @@ -3752,42 +3884,51 @@ start_portwine () { echo "Set to win${PW_WINDOWS_VER}" fi - if [[ "$portwine_exe" == *-Shipping.exe ]] ; then + if [[ $portwine_exe == *-Shipping.exe ]] ; then echo "Disable EAC" [[ -z "$LAUNCH_PARAMETERS" ]] && export LAUNCH_PARAMETERS+=" -eac-nop-loaded " fi - if [[ "$PW_DINPUT_PROTOCOL" == "1" ]] ; then - get_and_set_reg_file --add '[System\\CurrentControlSet\\Services\\winebus]' '"DisableHidraw"=dword:' "0" - get_and_set_reg_file --add '[System\\CurrentControlSet\\Services\\winebus]' '"Enable SDL"=dword:' "0" + if [[ $PW_DINPUT_PROTOCOL == "1" ]] ; then + get_and_set_reg_file --add 'System\CurrentControlSet\Services\winebus' 'DisableHidraw' 'REG_DWORD' "0" "system" + get_and_set_reg_file --add 'System\CurrentControlSet\Services\winebus' 'Enable SDL' 'REG_DWORD' "0" "system" else - get_and_set_reg_file --add '[System\\CurrentControlSet\\Services\\winebus]' '"DisableHidraw"=dword:' "1" - get_and_set_reg_file --add '[System\\CurrentControlSet\\Services\\winebus]' '"Enable SDL"=dword:' "1" + get_and_set_reg_file --add 'System\CurrentControlSet\Services\winebus' 'DisableHidraw' 'REG_DWORD' "1" "system" + get_and_set_reg_file --add 'System\CurrentControlSet\Services\winebus' 'Enable SDL' 'REG_DWORD' "1" "system" fi - if [[ "$PW_WINE_DPI_VALUE" != "disabled" ]] ; then - get_and_set_reg_file --add '[Control Panel\\Desktop]' '"LogPixels"=dword:' "${PW_WINE_DPI_VALUE// (*/}" + if [[ $PW_WINE_DPI_VALUE != "disabled" ]] ; then + if [[ $PW_WINE_DPI_VALUE == "recommended" ]] ; then + PW_RECOMMENDED_DPI=$(recommend_dpi "${PW_SCREEN_RESOLUTION:5:8}") + get_and_set_reg_file --add 'Control Panel\Desktop' 'LogPixels' 'REG_DWORD' "$PW_RECOMMENDED_DPI" "user" + else + get_and_set_reg_file --add 'Control Panel\Desktop' 'LogPixels' 'REG_DWORD' "$PW_WINE_DPI_VALUE" "user" + fi fi - if [[ "$PW_USE_NATIVE_WAYLAND" == "1" ]] ; then + if [[ $PW_USE_NATIVE_WAYLAND == "1" ]] ; then export PW_DISPLAY="env DISPLAY=" export PW_USE_RUNTIME="0" - get_and_set_reg_file --add '[Software\\Wine\\Drivers]' '"Graphics"=' "x11,wayland" "user" + get_and_set_reg_file --add 'Software\Wine\Drivers' 'Graphics' 'REG_SZ' "x11,wayland" "user" else unset PW_DISPLAY - get_and_set_reg_file --delete '[Software\\Wine\\Drivers]' '"Graphics"=' "x11,wayland" + get_and_set_reg_file --delete 'Software\Wine\Drivers' 'Graphics' fi - if [[ "$PW_SOUND_DRIVER_USE" != "disabled" ]] ; then - get_and_set_reg_file --add '[Software\\Wine\\Drivers]' '"Audio"=' "$PW_SOUND_DRIVER_USE" "user" - fi + + case "$PW_SOUND_DRIVER_USE" in + pulse) get_and_set_reg_file --add 'Software\Wine\Drivers' 'Audio' 'REG_SZ' "pulse" "user" ;; + alsa) get_and_set_reg_file --add 'Software\Wine\Drivers' 'Audio' 'REG_SZ' "alsa" "user" ;; + oss) get_and_set_reg_file --add 'Software\Wine\Drivers' 'Audio' 'REG_SZ' "oss" "user" ;; + *) get_and_set_reg_file --delete 'Software\Wine\Drivers' 'Audio' ;; + esac pw_stop_progress_bar if ! check_start_from_steam ; then pw_tray_icon fi - if [[ "${PW_CHECK_AUTOINSTALL}" != "1" ]] ; then + if [[ $PW_CHECK_AUTOINSTALL != "1" ]] ; then pw_start_progress_bar_cover "${COVERS_PATH}/loading_${LANGUAGE_GIF}.gif" fi add_in_start_portwine @@ -3820,7 +3961,8 @@ start_portwine () { fi fi - # GAMESCOPE enable: + unset PW_GAMESCOPE_ARGS_NEW PW_GAMESCOPE_VARIABLES_BEFORE PW_GAMESCOPE_VARIABLES_AFTER + # GAMESCOPE fixes: if [[ "${PW_GAMESCOPE}" == "1" && "${GAMESCOPE_INSTALLED}" == "1" ]] \ || check_gamescope_session then @@ -3836,7 +3978,12 @@ start_portwine () { if [[ -d /sys/bus/pci/drivers/i915 ]] ; then export INTEL_DEBUG="norbc" fi + if [[ -d /sys/bus/pci/drivers/nvidia ]] ; then + PW_GAMESCOPE_VARIABLES_BEFORE+="__GL_THREADED_OPTIMIZATIONS=0 " + PW_GAMESCOPE_VARIABLES_AFTER+="__GL_THREADED_OPTIMIZATIONS=1 " + fi fi + # GAMESCOPE enable: if [[ "${PW_GAMESCOPE}" == "1" && "${GAMESCOPE_INSTALLED}" == "1" ]] \ && ! check_gamescope_session then @@ -3849,7 +3996,6 @@ start_portwine () { fi #checkbox - unset PW_GAMESCOPE_ARGS_NEW [[ "${PW_GS_FULLSCREEN}" == "1" ]] && PW_GAMESCOPE_ARGS_NEW+=" -f" [[ "${PW_GS_FORCE_FULLSCREEN}" == "1" ]] && PW_GAMESCOPE_ARGS_NEW+=" --force-windows-fullscreen" [[ "${PW_GS_BORDERLESS_WINDOW}" == "1" ]] && PW_GAMESCOPE_ARGS_NEW+=" -b" @@ -3879,6 +4025,7 @@ start_portwine () { [[ "${PW_GS_BACKEND_SDL}" == "1" ]] && PW_GAMESCOPE_ARGS_NEW+=" --backend sdl" [[ "${PW_GS_SDL_VIDEODRIVER_X11}" == "1" ]] && export SDL_VIDEODRIVER="x11" + [[ "${PW_GS_CURSOR_SCALE_HEIGHT}" == "1" ]] && PW_GAMESCOPE_ARGS_NEW+=" --cursor-scale-height 1" #combobox if [[ "${PW_GS_SHOW_RESOLUTION}" != "disabled" ]] ; then @@ -3921,7 +4068,7 @@ start_portwine () { [[ "${PW_GS_ITM_TARGET_NITS}" != "0" ]] && PW_GAMESCOPE_ARGS_NEW+=" --hdr-itm-target-nits ${PW_GS_ITM_TARGET_NITS}" edit_db_from_gui PW_GAMESCOPE_ARGS_NEW - export PW_RUN_GAMESCOPE="gamescope${PW_ID_VIDEO}${PW_GAMESCOPE_ARGS_NEW} --" + export PW_RUN_GAMESCOPE="env ${PW_GAMESCOPE_VARIABLES_BEFORE}gamescope${PW_ID_VIDEO}${PW_GAMESCOPE_ARGS_NEW} env ${PW_GAMESCOPE_VARIABLES_AFTER}--" fi pw_mangohud_check @@ -3968,7 +4115,7 @@ pw_run () { ${PW_GAMEMODERUN_SLR} \ ${PW_MANGOHUD_SLR} \ ${PW_DISPLAY} \ - "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[@]} &>>"${PW_LOG_TO_FILE}" + "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS} &>>"${PW_LOG_TO_FILE}" else if [[ "$PW_USE_TERMINAL" == 1 ]] ; then PW_ADD_TO_ARGS_IN_RUNTIME="--xterm" @@ -3987,7 +4134,7 @@ pw_run () { ${PW_GAMEMODERUN_SLR} \ ${PW_MANGOHUD_SLR} \ ${PW_DISPLAY} \ - "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[@]} &>>"${PW_LOG_TO_FILE}" + "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS} &>>"${PW_LOG_TO_FILE}" print_info "Update prefix log:" [[ -f "${PW_TMPFS_PATH}/update_pfx_log" ]] && cat "${PW_TMPFS_PATH}/update_pfx_log" echo @@ -4015,7 +4162,7 @@ pw_run () { ${PW_MANGOHUD_SLR} \ ${PW_DISPLAY} \ ${PW_INHIBIT_SLR}\ - "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[@]} &>>"${PW_LOG_TO_FILE}" + "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS} &>>"${PW_LOG_TO_FILE}" wait_wineserver else print_info "Update prefix log:" @@ -4034,7 +4181,7 @@ pw_run () { ${PW_MANGOHUD_SLR} \ ${PW_DISPLAY} \ ${PW_INHIBIT_SLR}\ - "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[@]} + "${WINELOADER}" "$@" ${LAUNCH_PARAMETERS} wait_wineserver fi fi @@ -4042,7 +4189,7 @@ pw_run () { export -f pw_run pw_yad_set_form () { - if [[ $(<"${PW_TMPFS_PATH}/tmp_yad_form") != "" ]] ; then + if [[ -n $(<"${PW_TMPFS_PATH}/tmp_yad_form") ]] ; then pw_skip_get_info PW_YAD_SET=$(head -n 1 "${PW_TMPFS_PATH}/tmp_yad_form" | awk '{print $1}') export PW_YAD_SET @@ -4050,7 +4197,7 @@ pw_yad_set_form () { } pw_yad_form_vulkan () { - if [[ "$(<"${PW_TMPFS_PATH}/tmp_yad_form_vulkan")" != "" ]] ; then + if [[ -n "$(<"${PW_TMPFS_PATH}/tmp_yad_form_vulkan")" ]] ; then if [[ -n "${KEY_START}" ]] ; then YAD_FORM_VULKAN=$(sed 's/$/\;/' "${PW_TMPFS_PATH}/tmp_yad_form_vulkan") VULKAN_MOD=$(echo "${YAD_FORM_VULKAN}" | grep \;\; | awk -F";" '{print $1}') @@ -4062,12 +4209,9 @@ pw_yad_form_vulkan () { PW_PREFIX_NAME=$(echo "${YAD_FORM_VULKAN}" | grep \;\; | awk -F";" '{print $2}' | sed -e s/[[:blank:]]/_/g) PW_WINE_VER=$(echo "${YAD_FORM_VULKAN}" | grep \;\; | awk -F";" '{print $3}') fi - if [[ -z "${PW_PREFIX_NAME}" ]] \ - || [[ -n "$(echo "${PW_PREFIX_NAME}" | grep -E '^_.*' )" ]] - then - PW_PREFIX_NAME="DEFAULT" - else - PW_PREFIX_NAME="${PW_PREFIX_NAME^^}" + if [[ -z "${PW_PREFIX_NAME}" ]] + then PW_PREFIX_NAME="DEFAULT" + else PW_PREFIX_NAME="${PW_PREFIX_NAME^^}" fi export PW_PREFIX_NAME PW_WINE_VER VULKAN_MOD fi @@ -4083,20 +4227,20 @@ portwine_launch () { [[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME" case "${portwine_exe,,}" in *.exe) - pw_run ${PW_VD_TMP[@]} ${WINE_WIN_START} "$portwine_exe" + pw_run "${PW_VD_TMP[@]}" ${WINE_WIN_START} "$portwine_exe" ;; *.bat) PW_USE_TERMINAL=1 - pw_run ${PW_VD_TMP[@]} "$portwine_exe" + pw_run "${PW_VD_TMP[@]}" "$portwine_exe" ;; *.msi) - pw_run ${PW_VD_TMP[@]} msiexec /i "$portwine_exe" + pw_run "${PW_VD_TMP[@]}" msiexec /i "$portwine_exe" ;; *.reg) - pw_run ${PW_VD_TMP[@]} regedit "$portwine_exe" + pw_run "${PW_VD_TMP[@]}" regedit "$portwine_exe" ;; *) - pw_run ${PW_VD_TMP[@]} winefile + pw_run "${PW_VD_TMP[@]}" winefile ;; esac } @@ -4158,7 +4302,7 @@ yad_info () { --gui-type-layout="${YAD_INFO_GUI_TYPE_LAYOUT}" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/info.svg" \ --text-align=center --fixed \ - --button="${translations[OK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png" 2>/dev/null + --button="${translations[OK]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png" 2>/dev/null } export -f yad_info @@ -4173,7 +4317,7 @@ yad_error () { --gui-type-layout="${YAD_INFO_GUI_TYPE_LAYOUT}" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/error.svg" \ --text-align=center --fixed \ - --button="${translations[EXIT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png" 2>/dev/null + --button="${translations[EXIT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png" 2>/dev/null } export -f yad_error @@ -4187,8 +4331,8 @@ yad_error_download () { --gui-type-layout="${YAD_INFO_GUI_TYPE_LAYOUT}" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/download.svg" \ --no-wrap --text-align=center \ - --button="${translations[SKIP]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ - --button="${translations[REPEAT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null + --button="${translations[SKIP]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ + --button="${translations[REPEAT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null [[ "$?" != 0 ]] && return 1 || return 0 } @@ -4202,8 +4346,8 @@ yad_question () { --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/question.svg" \ --gui-type-layout="${YAD_INFO_GUI_TYPE_LAYOUT}" \ --no-wrap --text-align=center --fixed \ - --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ - --button="${translations[OK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null + --button="${translations[CANCEL]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ + --button="${translations[OK]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null [[ "$?" != 0 ]] && return 1 || return 0 } @@ -4313,10 +4457,10 @@ pw_start_progress_bar_install_game () { pw_stop_progress_bar () { if [[ -n ${PW_YAD_PID_PROGRESS_BAR[0]} ]] ; then local pid - for pid in ${PW_YAD_PID_PROGRESS_BAR[@]} ; do + for pid in "${PW_YAD_PID_PROGRESS_BAR[@]}" ; do # Здесь sleep нужен, потому что pid может уже быть, но kill его не убьет # со sleep 0.01 он делает 2 kill, c 0.02 нормально один - while $(sleep 0.02) && [[ -f /proc/$pid/exe ]] ; do + while sleep 0.02 && [[ -f /proc/$pid/exe ]] ; do kill -s SIGUSR1 "$pid" &>/dev/null done done @@ -4326,7 +4470,10 @@ pw_stop_progress_bar () { export -f pw_stop_progress_bar open_changelog () { - [[ "$LANGUAGE" == ru ]] && local PW_CHANGELOG_FILE="changelog_ru" || local PW_CHANGELOG_FILE="changelog_en" + if [[ "$LANGUAGE" == ru ]] + then local PW_CHANGELOG_FILE="changelog_ru" + else local PW_CHANGELOG_FILE="changelog_en" + fi "${pw_yad}" --title="${translations[CHANGELOG]}" --no-buttons \ --text-info --show-uri --wrap --width=1200 --height=700 --uri-color=red \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ @@ -4416,47 +4563,39 @@ gui_proton_downloader () { pw_start_progress_bar_block "${translations[Check new version WINE...]}" # PROTON_GE - export PROTON_GE_GIT=($(curl -s "https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases" | grep "browser_download_url.*\.tar\.gz" | cut -d \" -f 4)) - if [[ -n "${PROTON_GE_GIT}" ]] ; then - for PGEGIT in ${PROTON_GE_GIT[@]} ; do - echo ${PGEGIT} | awk -F/ '{print $NF}' | sed 's/.tar.gz//' >> "${PW_TMPFS_PATH}/tmp_proton_ge_git" + read -r -d '' -a PROTON_GE_GIT < <(curl -s "https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases" | grep "browser_download_url.*\.tar\.gz" | cut -d \" -f 4) + if [[ -n "${PROTON_GE_GIT[0]}" ]] ; then + for PGEGIT in "${PROTON_GE_GIT[@]}" ; do + echo "${PGEGIT}" | awk -F/ '{print $NF}' | sed 's/.tar.gz//' >> "${PW_TMPFS_PATH}/tmp_proton_ge_git" done - sed -i '/Proton-6.5-GE-2/,$d' "${PW_TMPFS_PATH}/tmp_proton_ge_git" - sed -i '/github-action/d' "${PW_TMPFS_PATH}/tmp_proton_ge_git" - sed -i '/^$/d' "${PW_TMPFS_PATH}/tmp_proton_ge_git" + sed -i -e '/Proton-6.5-GE-2/,$d' -e '/github-action/d' -e '/^$/d' "${PW_TMPFS_PATH}/tmp_proton_ge_git" fi # WINE_KRON4EK - export WINE_KRON4EK=($(curl -s "https://api.github.com/repos/Kron4ek/Wine-Builds/releases" | grep "browser_download_url.*\.tar\.xz" | cut -d \" -f 4)) - if [[ -n "${WINE_KRON4EK}" ]] ; then - for PGEGIT in ${WINE_KRON4EK[@]} ; do - echo ${PGEGIT} | awk -F/ '{print $NF}' | sed 's/.tar.xz//' >> "${PW_TMPFS_PATH}/tmp_wine_kron4ek_git" + read -r -d '' -a WINE_KRON4EK < <(curl -s "https://api.github.com/repos/Kron4ek/Wine-Builds/releases" | grep "browser_download_url.*\.tar\.xz" | cut -d \" -f 4) + if [[ -n "${WINE_KRON4EK[0]}" ]] ; then + for PGEGIT in "${WINE_KRON4EK[@]}" ; do + echo "${PGEGIT}" | awk -F/ '{print $NF}' | sed 's/.tar.xz//' >> "${PW_TMPFS_PATH}/tmp_wine_kron4ek_git" done - sed -i '/6.3/,$d' "${PW_TMPFS_PATH}/tmp_wine_kron4ek_git" - sed -i '/-x86/d' "${PW_TMPFS_PATH}/tmp_wine_kron4ek_git" - sed -i '/-wow64/d' "${PW_TMPFS_PATH}/tmp_wine_kron4ek_git" - sed -i '/^$/d' "${PW_TMPFS_PATH}/tmp_wine_kron4ek_git" + sed -i -e '/6.3/,$d' -e '/-x86/d' -e '/-wow64/d' -e '/^$/d' "${PW_TMPFS_PATH}/tmp_wine_kron4ek_git" fi # WINE_GE_CUSTOM - export WINE_GE_CUSTOM=($(curl -s "https://api.github.com/repos/GloriousEggroll/wine-ge-custom/releases" | grep "browser_download_url.*\.tar\.xz" | cut -d \" -f 4)) - if [[ -n "${WINE_GE_CUSTOM}" ]] ; then - for PGEGIT in ${WINE_GE_CUSTOM[@]} ; do - echo ${PGEGIT} | awk -F/ '{print $NF}' | sed 's/.tar.xz//' >> "${PW_TMPFS_PATH}/tmp_wine_ge_custom_git" + read -r -d '' -a WINE_GE_CUSTOM < <(curl -s "https://api.github.com/repos/GloriousEggroll/wine-ge-custom/releases" | grep "browser_download_url.*\.tar\.xz" | cut -d \" -f 4) + if [[ -n "${WINE_GE_CUSTOM[0]}" ]] ; then + for PGEGIT in "${WINE_GE_CUSTOM[@]}" ; do + echo "${PGEGIT}" | awk -F/ '{print $NF}' | sed 's/.tar.xz//' >> "${PW_TMPFS_PATH}/tmp_wine_ge_custom_git" done - sed -i '/6.23/,$d' "${PW_TMPFS_PATH}/tmp_wine_ge_custom_git" - sed -i '/^$/d' "${PW_TMPFS_PATH}/tmp_wine_ge_custom_git" + sed -i -e '/6.23/,$d' -e '/^$/d' "${PW_TMPFS_PATH}/tmp_wine_ge_custom_git" fi # PROTON_LG - export PROTON_PW_GIT=($(curl -s "https://api.github.com/repos/Castro-Fidel/wine_builds/releases" | grep "browser_download_url.*\.tar\.xz" | cut -d \" -f 4 | sort -r)) - if [[ -n "${PROTON_PW_GIT}" ]] ; then - for PPWGIT in ${PROTON_PW_GIT[@]} ; do - echo ${PPWGIT} | awk -F/ '{print $NF}' | sed 's/.tar.xz//' >> "${PW_TMPFS_PATH}/tmp_proton_pw_git" + read -r -d '' -a PROTON_PW_GIT < <(curl -s "https://api.github.com/repos/Castro-Fidel/wine_builds/releases" | grep "browser_download_url.*\.tar\.xz" | cut -d \" -f 4 | sort -r) + if [[ -n "${PROTON_PW_GIT[0]}" ]] ; then + for PPWGIT in "${PROTON_PW_GIT[@]}" ; do + echo "${PPWGIT}" | awk -F/ '{print $NF}' | sed 's/.tar.xz//' >> "${PW_TMPFS_PATH}/tmp_proton_pw_git" done - sed -i /${PW_WINE_LG_VER}/d "${PW_TMPFS_PATH}/tmp_proton_pw_git" - sed -i '/plugins/d' "${PW_TMPFS_PATH}/tmp_proton_pw_git" - sed -i '/^$/d' "${PW_TMPFS_PATH}/tmp_proton_pw_git" + sed -i -e "/${PW_WINE_LG_VER}/d" -e '/plugins/d' -e '/^$/d' "${PW_TMPFS_PATH}/tmp_proton_pw_git" fi pw_stop_progress_bar @@ -4467,10 +4606,9 @@ gui_proton_downloader () { pushd "${PORT_WINE_PATH}/data/dist/" || fatal for INSTALLING_VERSION_IN_DIST in * ; do - sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PW_TMPFS_PATH}/tmp_proton_pw_git" - sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PW_TMPFS_PATH}/tmp_proton_ge_git" - sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PW_TMPFS_PATH}/tmp_wine_kron4ek_git" - sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PW_TMPFS_PATH}/tmp_wine_ge_custom_git" + sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PW_TMPFS_PATH}/tmp_proton_pw_git" \ + "${PW_TMPFS_PATH}/tmp_proton_ge_git" "${PW_TMPFS_PATH}/tmp_wine_kron4ek_git" \ + "${PW_TMPFS_PATH}/tmp_wine_ge_custom_git" done popd 1>/dev/null || fatal @@ -4479,7 +4617,7 @@ gui_proton_downloader () { TMP_PROTON_KR_GIT="$(sed 's/^/FALSE /' "${PW_TMPFS_PATH}/tmp_wine_kron4ek_git" | tr '\n' ' ')" TMP_PROTON_CU_GIT="$(sed 's/^/FALSE /' "${PW_TMPFS_PATH}/tmp_wine_ge_custom_git" | tr '\n' ' ')" - ls -l ${PORT_WINE_PATH}/data/dist | awk '{print $9}' | sed "/$PW_PROTON_LG_VER/d" | sed "/$PW_WINE_LG_VER/d" | sed '/^$/d' 1>${PW_TMPFS_PATH}/tmp_installed_wine + ls -l ${PORT_WINE_PATH}/data/dist | awk '{print $9}' | sed -e "/$PW_PROTON_LG_VER/d" -e "/$PW_WINE_LG_VER/d" -e '/^$/d' 1>"${PW_TMPFS_PATH}/tmp_installed_wine" TMP_INSTALLED_WINE="$(sed 's/^/FALSE /' "${PW_TMPFS_PATH}/tmp_installed_wine" | tr '\n' ' ')" if [[ "$1" != "silent" ]] ; then @@ -4530,13 +4668,13 @@ gui_proton_downloader () { --gui-type="settings-notebook" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${translations[WINE MANAGER]}" --separator="" --expand \ --tab-pos="top" \ - --tab="PROTON-LG"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="WINE-KRON4EK"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="PROTON-GE"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="WINE-GE-CUSTOM"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[INSTALLED]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ - --button="${translations[OK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":0 2>/dev/null + --tab="PROTON-LG!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="WINE-KRON4EK!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="PROTON-GE!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="WINE-GE-CUSTOM!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[INSTALLED]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --button="${translations[CANCEL]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!":1 \ + --button="${translations[OK]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!":0 2>/dev/null YAD_WINE_STATUS="$?" if [[ "$YAD_WINE_STATUS" == "1" || "$YAD_WINE_STATUS" == "252" ]] ; then restart_pp @@ -4570,7 +4708,7 @@ gui_proton_downloader () { if unpack "${PORT_WINE_PATH}/data/tmp/${FILENAME}" "${PORT_WINE_PATH}/data/dist/" ; then try_remove_file "${PORT_WINE_PATH}/data/tmp/${FILENAME}" if [[ -n "${portwine_exe}" ]] ; then - PW_WINE_USE="$(echo "${VERSION_WINE_GIT}" | tr [[:lower:]] [[:upper:]])" + PW_WINE_USE=${VERSION_WINE_GIT^^} edit_db_from_gui PW_WINE_USE fi else @@ -4604,9 +4742,9 @@ gui_proton_downloader () { if [[ "$1" != "silent" ]] ; then for GIVE_ALL_WINE in ${VERSION_WINE_GIT} ; do - for GIVE_WINE_URL in ${WINE_GE_CUSTOM[@]} ${PROTON_GE_GIT[@]} ${WINE_KRON4EK[@]} ${PROTON_PW_GIT[@]} ; do - if [[ -n $(echo ${GIVE_WINE_URL} | grep -i "${GIVE_ALL_WINE}") ]] ; then - export URL_VERSION_PROTON_GIT="${GIVE_WINE_URL}" + for GIVE_WINE_URL in "${WINE_GE_CUSTOM[@]}" "${PROTON_GE_GIT[@]}" "${WINE_KRON4EK[@]}" "${PROTON_PW_GIT[@]}" ; do + if [[ ${GIVE_WINE_URL^^} =~ ${GIVE_ALL_WINE^^} ]] ; then + export URL_VERSION_PROTON_GIT=$GIVE_WINE_URL fi done pw_download_get_wine "" @@ -4615,9 +4753,9 @@ gui_proton_downloader () { restart_pp else print_error "$PW_WINE_USE" - for GIVE_WINE_URL in ${WINE_GE_CUSTOM[@]} ${PROTON_GE_GIT[@]} ${WINE_KRON4EK[@]} ${PROTON_PW_GIT[@]} ; do - if [[ -n $(echo ${GIVE_WINE_URL} | grep -i "${PW_WINE_USE}") ]] ; then - export URL_VERSION_PROTON_GIT="${GIVE_WINE_URL}" + for GIVE_WINE_URL in "${WINE_GE_CUSTOM[@]}" "${PROTON_GE_GIT[@]}" "${WINE_KRON4EK[@]}" "${PROTON_PW_GIT[@]}" ; do + if [[ ${GIVE_WINE_URL^^} =~ ${PW_WINE_USE^^} ]] ; then + export URL_VERSION_PROTON_GIT=$GIVE_WINE_URL fi done pw_download_get_wine "" @@ -4722,18 +4860,26 @@ gui_edit_db () { esac unset ADD_CHK_BOX_EDIT_DB - for int_to_boole in ${PW_EDIT_DB_LIST[@]} ; do + for int_to_boole in "${PW_EDIT_DB_LIST[@]}" ; do if [[ "${!int_to_boole}" == "1" ]] - then export ${int_to_boole}="TRUE" - else export ${int_to_boole}="FALSE" + then export "$int_to_boole"="TRUE" + else export "$int_to_boole"="FALSE" fi TMP_HELP_FOR_GUI="${int_to_boole}_INFO" int_to_boole_non_pw="${int_to_boole//PW_/}" int_to_boole_non_pw="${int_to_boole_non_pw//"_"/" "}" - if [[ ! "${PW_VULKAN_USE}" == [12] ]] \ - && [[ "${DISABLE_EDIT_DB_LIST}" =~ ${int_to_boole} ]] - then ADD_CHK_BOX_EDIT_DB+="--field=${CHKBOX_SPACE}${int_to_boole_non_pw}!${!TMP_HELP_FOR_GUI}:D${THEME_CHKBOX}%${!int_to_boole}%" - else ADD_CHK_BOX_EDIT_DB+="--field=${CHKBOX_SPACE}${int_to_boole_non_pw}!${!TMP_HELP_FOR_GUI}:${THEME_CHKBOX}%${!int_to_boole}%" + if [[ ! "${PW_VULKAN_USE}" =~ ^(1|2)$ ]] \ + && [[ -n $DISABLE_EDIT_DB_LIST ]] ; then + unset CHECK_BOOLE_TRUE + for check_boole in $DISABLE_EDIT_DB_LIST ; do + if [[ $check_boole == "$int_to_boole" ]] ; then + CHECK_BOOLE_TRUE=1 + ADD_CHK_BOX_EDIT_DB+="--field=${CHKBOX_SPACE}${int_to_boole_non_pw}!${!TMP_HELP_FOR_GUI}:D${THEME_CHKBOX}%${!int_to_boole}%" + fi + done + fi + if [[ $CHECK_BOOLE_TRUE != 1 ]] ; then + ADD_CHK_BOX_EDIT_DB+="--field=${CHKBOX_SPACE}${int_to_boole_non_pw}!${!TMP_HELP_FOR_GUI}:${THEME_CHKBOX}%${!int_to_boole}%" fi done @@ -4770,9 +4916,7 @@ A brief instruction: * library=n,b - use WINDOWS library and then WINE * library=b,n - use WINE library and then WINDOWS * library= - disable the use of this library]} :CBE" "$(combobox_fix --empty "${WINEDLLOVERRIDES}" "libglesv2=!d3dx9_36,d3dx9_42=n,b;mfc120=b,n")" \ - --field=":LBLH" "" \ - --field="${translations[ADD ARGUMENTS FOR .EXE FILE]}!${translations[Adding an argument after the .exe file, just like you would add an argument in a shortcut on a WINDOWS system]} :CBE" "$(combobox_fix --empty "\\${LAUNCH_PARAMETERS[@]}" "-dx11 -skipintro 1")" \ - --field=":LBLH" "" \ + --field="${translations[ADD ARGUMENTS FOR .EXE FILE]}!${translations[Adding an argument after the .exe file, just like you would add an argument in a shortcut on a WINDOWS system]} :CBE" "$(combobox_fix --empty "\\${LAUNCH_PARAMETERS}" "-dx11 -skipintro 1")" \ --field="${translations[Limit the use of processor cores]}!${translations[Limiting the number of CPU cores is useful for Unity games (It is recommended to set the value equal to 8)]} :CB" "$(combobox_fix --disabled "${CPU_LIMIT_VAR}" "${GET_LOGICAL_CORE}")" \ --field="${translations[Forcibly select the OpenGL version for the game]}!${translations[You can select the required OpenGL version, some games require a forced Compatibility Profile (COMPAT). (Examples are in the drop-down list)]} :CB" "$(combobox_fix --disabled "${PW_MESA_GL_VERSION_OVERRIDE}" "4.6COMPAT!4.5COMPAT!4.3COMPAT!4.1COMPAT!3.3COMPAT!3.2COMPAT")" \ --field="${translations[Forcibly select the VKD3D feature level]}!${translations[You can set a forced feature level VKD3D for games on DirectX12]} :$VKD3D_CB" "$(combobox_fix --disabled "${PW_VKD3D_FEATURE_LEVEL}" "12_2!12_1!12_0!11_1!11_0")" \ @@ -4788,12 +4932,12 @@ relaxed - Same as fifo but allows tearing when below the monitors refresh rate.] --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --separator=" " --expand \ --gui-type="settings-base" \ --gui-type-text="${NOTEBOOK_GUI_TYPE_TEXT}" --gui-type-layout="${NOTEBOOK_GUI_TYPE_LAYOUT}" \ - --tab="${translations[MAIN]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[ADVANCED]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --button="${translations[CANCEL THE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Cancel the current changes and return to the previous menu]}":1 \ - --button="${translations[RESET SETTINGS]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Restore default settings]}":2 \ - --button="${translations[OPEN THE SETTINGS FILE]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Open the .ppdb settings file in a system text editor to view and change variables manually]}":150 \ - --button="${translations[SAVE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Save the current changes, and go to the previous menu]}":0 2>/dev/null + --tab="${translations[MAIN]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[ADVANCED]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --button="${translations[CANCEL THE CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Cancel the current changes and return to the previous menu]}":1 \ + --button="${translations[RESET SETTINGS]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Restore default settings]}":2 \ + --button="${translations[OPEN THE SETTINGS FILE]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Open the .ppdb settings file in a system text editor to view and change variables manually]}":150 \ + --button="${translations[SAVE CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Save the current changes, and go to the previous menu]}":0 2>/dev/null YAD_STATUS="$?" case "$YAD_STATUS" in @@ -4809,28 +4953,27 @@ relaxed - Same as fifo but allows tearing when below the monitors refresh rate.] ;; esac - output_yad_edit_db=($(<"${PW_TMPFS_PATH}/tmp_output_yad_edit_db")) + read -r -a output_yad_edit_db <"${PW_TMPFS_PATH}/tmp_output_yad_edit_db" bool_from_yad="0" - for boole_to_int in ${PW_EDIT_DB_LIST[@]} ; do - export ${boole_to_int}="${output_yad_edit_db[$bool_from_yad]}" + for boole_to_int in "${PW_EDIT_DB_LIST[@]}" ; do + export "${boole_to_int}"="${output_yad_edit_db[$bool_from_yad]}" if [[ "${!boole_to_int}" == "TRUE" ]] - then export ${boole_to_int}="1" - else export ${boole_to_int}="0" + then export "${boole_to_int}"="1" + else export "${boole_to_int}"="0" fi export bool_from_yad=$(( bool_from_yad + 1 )) done IFS='%' read -r -a PW_ADD_SETTINGS <"${PW_TMPFS_PATH}/tmp_output_yad_fps_limit" - IFS="$orig_IFS" PW_WINDOWS_VER="${PW_ADD_SETTINGS[0]}" PW_DLL_INSTALL="${PW_ADD_SETTINGS[1]}" WINEDLLOVERRIDES="${PW_ADD_SETTINGS[2]}" - LAUNCH_PARAMETERS="${PW_ADD_SETTINGS[4]}" - CPU_LIMIT="${PW_ADD_SETTINGS[6]}" - PW_MESA_GL_VERSION_OVERRIDE="${PW_ADD_SETTINGS[7]}" - PW_VKD3D_FEATURE_LEVEL="${PW_ADD_SETTINGS[8]}" - PW_LOCALE_SELECT="${PW_ADD_SETTINGS[9]}" - PW_MESA_VK_WSI_PRESENT_MODE="${PW_ADD_SETTINGS[10]}" + LAUNCH_PARAMETERS="${PW_ADD_SETTINGS[3]}" + CPU_LIMIT="${PW_ADD_SETTINGS[4]}" + PW_MESA_GL_VERSION_OVERRIDE="${PW_ADD_SETTINGS[5]}" + PW_VKD3D_FEATURE_LEVEL="${PW_ADD_SETTINGS[6]}" + PW_LOCALE_SELECT="${PW_ADD_SETTINGS[7]}" + PW_MESA_VK_WSI_PRESENT_MODE="${PW_ADD_SETTINGS[8]}" if [[ "${CPU_LIMIT}" =~ ^[0-9]+$ ]] ; then PW_WINE_CPU_TOPOLOGY="${CPU_LIMIT}:$(seq -s, 0 $(( CPU_LIMIT - 1 )))" @@ -4839,7 +4982,7 @@ relaxed - Same as fifo but allows tearing when below the monitors refresh rate.] fi export PW_WINE_CPU_TOPOLOGY - edit_db_from_gui ${PW_EDIT_DB_LIST[@]} LAUNCH_PARAMETERS PW_WINDOWS_VER PW_DLL_INSTALL WINEDLLOVERRIDES PW_WINE_CPU_TOPOLOGY \ + edit_db_from_gui "${PW_EDIT_DB_LIST[@]}" LAUNCH_PARAMETERS PW_WINDOWS_VER PW_DLL_INSTALL WINEDLLOVERRIDES PW_WINE_CPU_TOPOLOGY \ PW_MESA_GL_VERSION_OVERRIDE PW_VKD3D_FEATURE_LEVEL PW_LOCALE_SELECT PW_MESA_VK_WSI_PRESENT_MODE if [[ -z "$MANGOHUD_CONFIG" ]] ; then @@ -4864,8 +5007,8 @@ relaxed - Same as fifo but allows tearing when below the monitors refresh rate.] gui_vkbasalt () { KEY_FX_GUI=$RANDOM FILE_VKBASALT_CONF="${PORT_WINE_PATH}/data/vkBasalt.conf" - LIST_FX=($(grep -E '.fx$|.fxh$' "${FILE_VKBASALT_CONF}" | awk '{print $1}')) - GET_FX_IN_FILE=($(echo ${PW_VKBASALT_EFFECTS} | sed s/"cas:"// | sed s/":"/" "/g)) + read -r -d '' -a LIST_FX < <(grep -E '.fx$|.fxh$' "$FILE_VKBASALT_CONF" | awk '{print $1}') + read -r -a GET_FX_IN_FILE < <(echo "$PW_VKBASALT_EFFECTS" | sed -e s/"cas:"// -e s/":"/" "/g) PW_3DFX_INFO=${translations[Simulation of an old 3dfx graphics accelerator (adds horizontal stripes)]} PW_AdaptiveSharpen_INFO=${translations[Sharpness increase, can be used with CAS]} @@ -4924,11 +5067,16 @@ gui_vkbasalt () { PW_PPFX_Bloom_INFO=${translations[Adds a Bloom effect]} unset ADD_GUI_FX GUI_FX_RESULT - for add_list_fx in ${LIST_FX[@]} ; do + for add_list_fx in "${LIST_FX[@]}" ; do + unset PW_FX_TRUE PW_VKBASALT_GUI_HELP="PW_${add_list_fx}_INFO" - if [[ ${GET_FX_IN_FILE[*]} =~ ${add_list_fx} ]]; then - ADD_GUI_FX+="--field=${CHKBOX_SPACE}${add_list_fx}!${!PW_VKBASALT_GUI_HELP}:${THEME_CHKBOX}%TRUE%" - else + for check_list_fx in "${GET_FX_IN_FILE[@]}" ; do + if [[ $check_list_fx == "$add_list_fx" ]] ; then + PW_FX_TRUE=1 + ADD_GUI_FX+="--field=${CHKBOX_SPACE}${add_list_fx}!${!PW_VKBASALT_GUI_HELP}:${THEME_CHKBOX}%TRUE%" + fi + done + if [[ $PW_FX_TRUE != 1 ]] ; then ADD_GUI_FX+="--field=${CHKBOX_SPACE}${add_list_fx}!${!PW_VKBASALT_GUI_HELP}:${THEME_CHKBOX}%FALSE%" fi done @@ -4950,16 +5098,16 @@ gui_vkbasalt () { "${pw_yad}" --plug=$KEY_FX_GUI --tabnum="2" --separator=" " --form \ --gui-type-layout="${PANED_GUI_TYPE_LAYOUT_DOWN}" \ - --field="AMD FidelityFX - Contrast Adaptive Sharpening"!"${translations[AMD FidelityFX - CAS is designed to dramatically improve texture sharpness without additional modification settings for games, with minimal loss of performance. (For older games it is recommended to set value = 100)]}":SCL "${VKBASALT_FFX_CAS_GUI}" \ + --field="AMD FidelityFX - Contrast Adaptive Sharpening!${translations[AMD FidelityFX - CAS is designed to dramatically improve texture sharpness without additional modification settings for games, with minimal loss of performance. (For older games it is recommended to set value = 100)]}":SCL "${VKBASALT_FFX_CAS_GUI}" \ 1> "${PW_TMPFS_PATH}/tmp_yad_cas_set" 2>/dev/null & "${pw_yad}" --paned --key="$KEY_FX_GUI" --sensitive --title="vkBasalt" \ --gui-type="settings-paned" \ --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ - --button="${translations[CANCEL THE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Cancel the current changes and return to the previous menu]}":1 \ - --button="${translations[RESET]} VKBASALT"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Restore default settings for]} vkBasalt":178 \ - --button="${translations[DISABLE]} VKBASALT"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Disable vkBasalt and go to the previous menu]}":180 \ - --button="${translations[SAVE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Save the current changes, and go to the previous menu]}":182 2>/dev/null + --button="${translations[CANCEL THE CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Cancel the current changes and return to the previous menu]}":1 \ + --button="${translations[RESET]} VKBASALT!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Restore default settings for]} vkBasalt":178 \ + --button="${translations[DISABLE]} VKBASALT!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Disable vkBasalt and go to the previous menu]}":180 \ + --button="${translations[SAVE CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Save the current changes, and go to the previous menu]}":182 2>/dev/null YAD_VKBASALT_STATUS="$?" case "${YAD_VKBASALT_STATUS}" in @@ -5080,28 +5228,40 @@ gui_mangohud () { GET_REFRESH_RATE=(30 40 45 48 60 75 90 120 144 165 175 240) if [[ -n "$MANGOHUD_CONFIG" ]] ; then - PW_MANGOHUD_CONFIG=($(echo "$MANGOHUD_CONFIG" | tr ',' '\n' | grep -v '=' | tr [[:lower:]] [[:upper:]])) + PW_MANGOHUD_CONFIG=$MANGOHUD_CONFIG else - PW_MANGOHUD_CONFIG=($(echo "$DEFAULT_MANGOHUD_CONFIG" | tr ',' '\n' | grep -v '=' | tr [[:lower:]] [[:upper:]])) + PW_MANGOHUD_CONFIG=$DEFAULT_MANGOHUD_CONFIG fi + IFS=',' read -r -a PW_MANGOHUD_CONFIG <<< "${PW_MANGOHUD_CONFIG^^}" if [[ -n "$FPS_LIMIT" ]] ; then - PW_FPS_LIMIT_VAR=($(echo "$FPS_LIMIT" | tr '' '\n' | grep -v '=')) + IFS='+' read -r -a PW_FPS_LIMIT_VAR <<< "$FPS_LIMIT" fi - for add_list_mh in "${LIST_MH[@]}"; do + for add_list_mh in "${LIST_MH[@]}" ; do + unset PW_MH_TRUE PW_MH_GUI_HELP="PW_MH_${add_list_mh}_INFO" - if [[ ${PW_MANGOHUD_CONFIG[*]} =~ $add_list_mh ]]; then - ADD_GUI_MH+="--field=${CHKBOX_SPACE}${add_list_mh//"_"/" "}!${!PW_MH_GUI_HELP}:${THEME_CHKBOX}%TRUE%" - else + for check_list_mh in "${PW_MANGOHUD_CONFIG[@]}" ; do + [[ $check_list_mh =~ = ]] && continue + if [[ $check_list_mh == "$add_list_mh" ]] ; then + PW_MH_TRUE=1 + ADD_GUI_MH+="--field=${CHKBOX_SPACE}${add_list_mh//"_"/" "}!${!PW_MH_GUI_HELP}:${THEME_CHKBOX}%TRUE%" + fi + done + if [[ $PW_MH_TRUE != 1 ]] ; then ADD_GUI_MH+="--field=${CHKBOX_SPACE}${add_list_mh//"_"/" "}!${!PW_MH_GUI_HELP}:${THEME_CHKBOX}%FALSE%" fi done - for add_list_mh_fps in "${GET_REFRESH_RATE[@]}"; do - if [[ ${PW_FPS_LIMIT_VAR[*]} =~ $add_list_mh_fps ]]; then - ADD_GUI_MH_FPS+="--field=${CHKBOX_SPACE}$add_list_mh_fps:${THEME_CHKBOX}%TRUE%" - else + for add_list_mh_fps in "${GET_REFRESH_RATE[@]}" ; do + unset PW_MH_TRUE + for check_list_mh_fps in "${PW_FPS_LIMIT_VAR[@]}" ; do + if [[ $check_list_mh_fps == "$add_list_mh_fps" ]] ; then + PW_MH_TRUE=1 + ADD_GUI_MH_FPS+="--field=${CHKBOX_SPACE}$add_list_mh_fps:${THEME_CHKBOX}%TRUE%" + fi + done + if [[ $PW_MH_TRUE != 1 ]] ; then ADD_GUI_MH_FPS+="--field=${CHKBOX_SPACE}$add_list_mh_fps:${THEME_CHKBOX}%FALSE%" fi done @@ -5120,11 +5280,11 @@ gui_mangohud () { "${pw_yad}" --paned --key="$KEY_MH_GUI" --title="MangoHud" \ --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --sensitive \ --gui-type="settings-paned" \ - --button="${translations[CANCEL THE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Cancel the current changes and return to the previous menu]}":1 \ - --button="${translations[RESET]} MANGOHUD"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Restore default settings for]} MangoHud":180 \ - --button="${translations[PREVIEW CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Start vkcube for preview changes]}":184 \ - --button="${translations[DISABLE]} MANGOHUD"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Disable MangoHud and go to the previous menu]}":182 \ - --button="${translations[SAVE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Save the current changes, and go to the previous menu]}":186 2>/dev/null + --button="${translations[CANCEL THE CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Cancel the current changes and return to the previous menu]}":1 \ + --button="${translations[RESET]} MANGOHUD!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Restore default settings for]} MangoHud":180 \ + --button="${translations[PREVIEW CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Start vkcube for preview changes]}":184 \ + --button="${translations[DISABLE]} MANGOHUD!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Disable MangoHud and go to the previous menu]}":182 \ + --button="${translations[SAVE CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Save the current changes, and go to the previous menu]}":186 2>/dev/null YAD_MANGOHUD_STATUS="$?" case "${YAD_MANGOHUD_STATUS}" in @@ -5159,7 +5319,8 @@ gui_mangohud () { fi ((INT_COUNT_MH++)) done - GUI_MH_RESULT=$(echo "$GUI_MH_RESULT" | sed 's/ /_/g' | tr '[:upper:]' '[:lower:]') + GUI_MH_RESULT=${GUI_MH_RESULT// /_} + GUI_MH_RESULT=${GUI_MH_RESULT,,} INT_COUNT_MH_FPS="0" for read_list_mh_fps in ${YAD_MH_FPS_LIMIT} ; do @@ -5190,7 +5351,7 @@ gui_mangohud () { fi if [[ "${GUI_MH_RESULT}" =~ "fps_only" ]] ; then - local GUI_MH_RESULT="fps_only" + GUI_MH_RESULT="fps_only" print_info "In the MangoHud config fps_only is detected all settings are reseted" fi @@ -5254,18 +5415,26 @@ gui_dgvoodoo2 () { esac unset ADD_CHK_BOX_DGV2 - for int_to_boole in ${PW_DGV2_LIST[@]} ; do + for int_to_boole in "${PW_DGV2_LIST[@]}" ; do if [[ "${!int_to_boole}" == "1" ]] - then export ${int_to_boole}="TRUE" - else export ${int_to_boole}="FALSE" + then export "$int_to_boole"="TRUE" + else export "$int_to_boole"="FALSE" fi TMP_HELP_FOR_GUI="${int_to_boole}_INFO" int_to_boole_non_pw="${int_to_boole//PW_DGV2/}" int_to_boole_non_pw="${int_to_boole_non_pw//"_"/" "}" - if [[ ! "${PW_VULKAN_USE}" == [12] ]] \ - && [[ "${DISABLE_DGV2_LIST}" =~ ${int_to_boole} ]] - then ADD_CHK_BOX_DGV2+="--field=${CHKBOX_SPACE}${int_to_boole_non_pw}!${!TMP_HELP_FOR_GUI}:D${THEME_CHKBOX}%${!int_to_boole}%" - else ADD_CHK_BOX_DGV2+="--field=${CHKBOX_SPACE}${int_to_boole_non_pw}!${!TMP_HELP_FOR_GUI}:${THEME_CHKBOX}%${!int_to_boole}%" + if [[ ! "${PW_VULKAN_USE}" =~ ^(1|2)$ ]] \ + && [[ -n $DISABLE_DGV2_LIST ]] ; then + unset CHECK_BOOLE_TRUE + for check_boole in $DISABLE_DGV2_LIST ; do + if [[ $check_boole == "$int_to_boole" ]] ; then + CHECK_BOOLE_TRUE=1 + ADD_CHK_BOX_DGV2+="--field=${CHKBOX_SPACE}${int_to_boole_non_pw}!${!TMP_HELP_FOR_GUI}:D${THEME_CHKBOX}%${!int_to_boole}%" + fi + done + fi + if [[ $CHECK_BOOLE_TRUE != 1 ]] ; then + ADD_CHK_BOX_DGV2+="--field=${CHKBOX_SPACE}${int_to_boole_non_pw}!${!TMP_HELP_FOR_GUI}:${THEME_CHKBOX}%${!int_to_boole}%" fi done @@ -5319,10 +5488,10 @@ gui_dgvoodoo2 () { "${pw_yad}" --paned --key=$KEY_DGV2_GUI --height="350" --title="dgVoodoo2" \ --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --gui-type="settings-paned" \ - --button="${translations[CANCEL THE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Cancel the current changes and return to the previous menu]}":1 \ - --button="${translations[RESET]} DGVOODOO2"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Restore default settings for]} dgVoodoo2":162 \ - --button="${translations[DISABLE]} DGVOODOO2"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Disable dgVoodoo2 and go to the previous menu]}":164 \ - --button="${translations[SAVE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Save the current changes, and go to the previous menu]}":166 \ + --button="${translations[CANCEL THE CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Cancel the current changes and return to the previous menu]}":1 \ + --button="${translations[RESET]} DGVOODOO2!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Restore default settings for]} dgVoodoo2":162 \ + --button="${translations[DISABLE]} DGVOODOO2!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Disable dgVoodoo2 and go to the previous menu]}":164 \ + --button="${translations[SAVE CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Save the current changes, and go to the previous menu]}":166 \ 2>/dev/null YAD_DGV2_STATUS="$?" @@ -5343,19 +5512,18 @@ gui_dgvoodoo2 () { ;; esac - output_yad_dgv2=($(<"${PW_TMPFS_PATH}/tmp_yad_dgv2_set")) + read -r -a output_yad_dgv2 <"${PW_TMPFS_PATH}/tmp_yad_dgv2_set" bool_from_yad=0 - for boole_to_int in ${PW_DGV2_LIST[@]} ; do - export ${boole_to_int}="${output_yad_dgv2[$bool_from_yad]}" + for boole_to_int in "${PW_DGV2_LIST[@]}" ; do + export "${boole_to_int}"="${output_yad_dgv2[$bool_from_yad]}" if [[ "${!boole_to_int}" == "TRUE" ]] - then export ${boole_to_int}="1" - else export ${boole_to_int}="0" + then export "${boole_to_int}"="1" + else export "${boole_to_int}"="0" fi export bool_from_yad=$(( bool_from_yad + 1 )) done IFS='%' read -r -a PW_ADD_SETTINGS_DGV2 <"${PW_TMPFS_PATH}/tmp_yad_dgv2_set_cb" - IFS="$orig_IFS" PW_DGV2_RESOLUTION="${PW_ADD_SETTINGS_DGV2[0]}" PW_DGV2_FPS_LIMIT="${PW_ADD_SETTINGS_DGV2[1]}" PW_DGV2_FILTERING="${PW_ADD_SETTINGS_DGV2[2]}" @@ -5370,7 +5538,7 @@ gui_dgvoodoo2 () { PW_DGV2_RESAMPLING="${PW_ADD_SETTINGS_DGV2[11]}" PW_DGV2_CURSOR_SCALE="${PW_ADD_SETTINGS_DGV2[12]}" - edit_db_from_gui ${PW_DGV2_LIST[@]} PW_DGVOODOO2 PW_DGV2_FILTERING PW_DGV2_ANTIALIASING PW_DGV2_VRAM PW_DGV2_RESOLUTION \ + edit_db_from_gui "${PW_DGV2_LIST[@]}" PW_DGVOODOO2 PW_DGV2_FILTERING PW_DGV2_ANTIALIASING PW_DGV2_VRAM PW_DGV2_RESOLUTION \ PW_DGV2_FPS_LIMIT PW_DGV2_BIT_DEPTH PW_DGV2_BRIGHTNESS PW_DGV2_COLOR PW_DGV2_CONTRAST PW_DGV2_VIDEOCARD PW_DGV2_DISPLAY_ROI \ PW_DGV2_CURSOR_SCALE PW_DGV2_RESAMPLING @@ -5386,16 +5554,19 @@ gui_gamescope () { PW_GS_EXPOSE_WAYLAND PW_GS_REALTIME_SCHEDULING ) - grep -e '--mangoapp' "${PW_TMPFS_PATH}/gamescope.tmp" &>/dev/null && add_to_array "PW_GS_LIST" PW_GS_MANGOAPP - grep -e '--backend' "${PW_TMPFS_PATH}/gamescope.tmp" &>/dev/null && add_to_array "PW_GS_LIST" PW_GS_BACKEND_SDL PW_GS_SDL_VIDEODRIVER_X11 + [[ $(<"${PW_TMPFS_PATH}/gamescope.tmp") =~ '--mangoapp' ]] && add_to_array "PW_GS_LIST" PW_GS_MANGOAPP + [[ $(<"${PW_TMPFS_PATH}/gamescope.tmp") =~ '--backend' ]] && add_to_array "PW_GS_LIST" PW_GS_BACKEND_SDL + check_wayland_session && add_to_array "PW_GS_LIST" PW_GS_SDL_VIDEODRIVER_X11 + [[ $(<"${PW_TMPFS_PATH}/gamescope.tmp") =~ '--cursor-scale-height' ]] && add_to_array "PW_GS_LIST" PW_GS_CURSOR_SCALE_HEIGHT - GS_FILTER_CB="linear!nearest!fsr!nis!pixel" #debian bookworm fix - if grep -e '-U, --fsr-upscaling' "${PW_TMPFS_PATH}/gamescope.tmp" &>/dev/null ; then + if [[ $(<"${PW_TMPFS_PATH}/gamescope.tmp") =~ '-U, --fsr-upscaling' ]] ; then GS_FILTER_CB="fsr!nis" export PW_GS_FILTER_MODE_OLD="true" rm_from_array "PW_GS_LIST" PW_GS_FORCE_GRAB_CURSOR PW_GS_FORCE_GRAB_KEYBOARD PW_GS_HDR_ENABLE PW_GS_HDR_FORCE_SUPPORT \ PW_GS_HDR_FORCE_OUTPUT + else + GS_FILTER_CB="linear!nearest!fsr!nis!pixel" fi PW_GS_FULLSCREEN_INFO=${translations[Make the window fullscreen]} @@ -5416,15 +5587,16 @@ gui_gamescope () { PW_GS_MANGOAPP_INFO=${translations[Launch with the mangoapp (mangohud) performance overlay enabled. You should use this instead of using mangohud on the game or gamescope.]} PW_GS_BACKEND_SDL_INFO=${translations[Use sdl backend. (by default wayland backend is used).]} PW_GS_SDL_VIDEODRIVER_X11_INFO=${translations[Force use sdl videodriver x11, works with BACKEND SDL. (Default is wayland)]} + PW_GS_CURSOR_SCALE_HEIGHT_INFO=${translations[if specified, sets a base output height to linearly scale the cursor against.]} unset ADD_CHK_BOX_GS if [[ "${GAMESCOPE_INSTALLED}" == 1 ]] ; then GAMESCOPE_NEED_INSTALL="${translations[Change settings gamescope for]} $PW_NAME_DESKTOP_PROXY\n ${translations[NOTE: To display help for each item, simply hover your mouse over the text]}" GS_CB="CB" && GS_CBE="CBE" && GS_NUM="NUM" && GS_NUMN="NUMN" - for int_to_boole in ${PW_GS_LIST[@]} ; do + for int_to_boole in "${PW_GS_LIST[@]}" ; do if [[ "${!int_to_boole}" == "1" ]] - then export ${int_to_boole}="TRUE" - else export ${int_to_boole}="FALSE" + then export "$int_to_boole"="TRUE" + else export "$int_to_boole"="FALSE" fi TMP_HELP_FOR_GUI="${int_to_boole}_INFO" int_to_boole_non_pw="${int_to_boole//PW_GS/}" @@ -5440,10 +5612,10 @@ gui_gamescope () { GAMESCOPE_NEED_INSTALL="${translations[Gamescope is not detected on the system, please contact the manufacturer of your distribution\\nor search the Internet for information on how to install gamescope on your system.]}" fi GS_CB="DCB" && GS_CBE="DCBE" && GS_NUM="DNUM" && GS_NUMN="DNUMN" - for int_to_boole in ${PW_GS_LIST[@]} ; do + for int_to_boole in "${PW_GS_LIST[@]}" ; do if [[ "${!int_to_boole}" == "1" ]] - then export ${int_to_boole}="TRUE" - else export ${int_to_boole}="FALSE" + then export "$int_to_boole"="TRUE" + else export "$int_to_boole"="FALSE" fi TMP_HELP_FOR_GUI="${int_to_boole}_INFO" int_to_boole_non_pw="${int_to_boole//PW_GS/}" @@ -5484,10 +5656,10 @@ gui_gamescope () { "${pw_yad}" --paned --key="$KEY_GS_GUI" --title="GameScope" \ --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --gui-type="settings-paned" \ - --button="${translations[CANCEL THE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Cancel the current changes and return to the previous menu]}":1 \ - --button="${translations[RESET]} GAMESCOPE"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Restore default settings for]} GameScope":162 \ - --button="${translations[DISABLE]} GAMESCOPE"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Disable GameScope and go to the previous menu]}":164 \ - --button="${translations[SAVE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Save the current changes, and go to the previous menu]}":166 \ + --button="${translations[CANCEL THE CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Cancel the current changes and return to the previous menu]}":1 \ + --button="${translations[RESET]} GAMESCOPE!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Restore default settings for]} GameScope":162 \ + --button="${translations[DISABLE]} GAMESCOPE!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Disable GameScope and go to the previous menu]}":164 \ + --button="${translations[SAVE CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Save the current changes, and go to the previous menu]}":166 \ 2>/dev/null YAD_GAMESCOPE_STATUS="$?" @@ -5508,19 +5680,18 @@ gui_gamescope () { ;; esac - output_yad_gs=($(<"${PW_TMPFS_PATH}/tmp_yad_gs_set")) + read -r -a output_yad_gs <"${PW_TMPFS_PATH}/tmp_yad_gs_set" bool_from_yad="0" - for boole_to_int in ${PW_GS_LIST[@]} ; do - export ${boole_to_int}="${output_yad_gs[$bool_from_yad]}" + for boole_to_int in "${PW_GS_LIST[@]}" ; do + export "${boole_to_int}"="${output_yad_gs[$bool_from_yad]}" if [[ "${!boole_to_int}" == "TRUE" ]] - then export ${boole_to_int}="1" - else export ${boole_to_int}="0" + then export "${boole_to_int}"="1" + else export "${boole_to_int}"="0" fi export bool_from_yad=$(( bool_from_yad + 1 )) done IFS='%' read -r -a PW_ADD_SETTINGS_GS <"${PW_TMPFS_PATH}/tmp_yad_gs_set_cb" - IFS="$orig_IFS" PW_GS_SHOW_RESOLUTION="${PW_ADD_SETTINGS_GS[0]}" PW_GS_INTERNAL_RESOLUTION="${PW_ADD_SETTINGS_GS[1]//','/'.'}" PW_GS_FRAME_LIMIT="${PW_ADD_SETTINGS_GS[2]}" @@ -5533,7 +5704,7 @@ gui_gamescope () { PW_GS_ITM_SDR_NITS="${PW_ADD_SETTINGS_GS[9]}" PW_GS_ITM_TARGET_NITS="${PW_ADD_SETTINGS_GS[10]}" - edit_db_from_gui ${PW_GS_LIST[@]} PW_GAMESCOPE PW_GS_SHOW_RESOLUTION PW_GS_INTERNAL_RESOLUTION \ + edit_db_from_gui "${PW_GS_LIST[@]}" PW_GAMESCOPE PW_GS_SHOW_RESOLUTION PW_GS_INTERNAL_RESOLUTION \ PW_GS_FRAME_LIMIT PW_GS_SCALER_MODE PW_GS_FILTER_MODE \ PW_GS_UPSCALE_SHARPNESS PW_GS_MAX_SCALE_FACTOR PW_GS_MOUSE_SENSITIVITY \ PW_GS_SDR_CONTENT_NITS PW_GS_ITM_SDR_NITS PW_GS_ITM_TARGET_NITS @@ -5573,10 +5744,10 @@ gui_userconf () { "${pw_yad}" --plug=$KEY_USERCONF_GUI --tabnum="1" --form --columns=2 --separator=" " --text-align=center \ --text "${translations[Change global settings]} (edit user.conf)\n ${translations[NOTE: To display help for each item, simply hover your mouse over the text]}" \ --align-buttons --homogeneous-column --gui-type-text="${PANED_GUI_TYPE_TEXT_UP}" --gui-type-layout="${PANED_GUI_TYPE_LAYOUT_UP}" \ - --field=" ${translations[Change mirror to]} $NEW_MIRROR"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Depending on which mirror is selected, updates will be downloaded from there.]}":"FBTN" '@bash -c "button_click --userconf change_mirror"' \ - --field=" ${translations[Change branch to]} $NEW_BRANCH"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Depending on the version of the scripts, PortProton will receive the latest changes first (the DEVEL branch), the STABLE branch is updated later and is stable.]}":"FBTN" '@bash -c "button_click --userconf change_branch"' \ - --field=" ${translations[Change start gui to]} $NEW_START_GUI"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[When using PANED in the game start menu, additional buttons are located on one large page; if NOTEBOOK, then they are divided into several.]}":"FBTN" '@bash -c "button_click --userconf change_gui_start"' \ - --field=" $NEW_STEAM_BEHAVIOR ${translations[steam covers download]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[If downloading steam covers is enabled, they will be downloaded and created. (Disablement is provided in cases where their downloading is unavailable for some reason)]}":"FBTN" '@bash -c "button_click --userconf change_download_grid"' \ + --field=" ${translations[Change mirror to]} $NEW_MIRROR!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!${translations[Depending on which mirror is selected, updates will be downloaded from there.]}":"FBTN" '@bash -c "button_click --userconf change_mirror"' \ + --field=" ${translations[Change branch to]} $NEW_BRANCH!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!${translations[Depending on the version of the scripts, PortProton will receive the latest changes first (the DEVEL branch), the STABLE branch is updated later and is stable.]}":"FBTN" '@bash -c "button_click --userconf change_branch"' \ + --field=" ${translations[Change start gui to]} $NEW_START_GUI!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!${translations[When using PANED in the game start menu, additional buttons are located on one large page; if NOTEBOOK, then they are divided into several.]}":"FBTN" '@bash -c "button_click --userconf change_gui_start"' \ + --field=" $NEW_STEAM_BEHAVIOR ${translations[steam covers download]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!${translations[If downloading steam covers is enabled, they will be downloaded and created. (Disablement is provided in cases where their downloading is unavailable for some reason)]}":"FBTN" '@bash -c "button_click --userconf change_download_grid"' \ 2>/dev/null & if [[ -n "$PW_SOUND_DRIVER_USE" ]] \ @@ -5611,6 +5782,9 @@ gui_userconf () { SORT_WITH_TIME="enabled" fi + if [[ $PW_WINE_DPI_VALUE == "recommended" ]] ; then + PW_WINE_DPI_VALUE="${translations[Recommended value]}" + fi if [[ -n "$PW_WINE_DPI_VALUE" ]] \ && [[ "$PW_WINE_DPI_VALUE" != "disabled" ]] then @@ -5619,12 +5793,28 @@ gui_userconf () { YAD_DPI_VAR="disabled" fi - "${pw_yad}" --plug=$KEY_USERCONF_GUI --tabnum="2" --form --columns=1 --separator="@" --homogeneous-row \ + if [[ $GUI_THEME == default ]] ; then GUI_THEME=${translations[default]} + elif [[ $GUI_THEME == compact ]] ; then GUI_THEME=${translations[compact]} + elif [[ $GUI_THEME == classic ]] ; then GUI_THEME=${translations[classic]} + fi + + if command -v gsettings &>/dev/null ; then + YAD_GTK_THEME=$(gsettings get org.gnome.desktop.interface gtk-theme) + [[ $YAD_GTK_THEME == \'Adwaita\' ]] && unset YAD_GTK_THEME + [[ -n $YAD_GTK_THEME ]] && YAD_GTK_THEME="${YAD_GTK_THEME//\'/}!" + fi + if [[ -z $GTK_THEME ]] ; then GTK_THEME=${translations[default]} + elif [[ $GTK_THEME =~ light$ ]] ; then GTK_THEME="${GTK_THEME//light/${translations[light]}}" + elif [[ $GTK_THEME =~ dark$ ]] ; then GTK_THEME="${GTK_THEME//dark/${translations[dark]}}" + fi + + "${pw_yad}" --plug=$KEY_USERCONF_GUI --tabnum="2" --form --columns=1 --separator="%" --homogeneous-row \ --gui-type-text="$PANED_GUI_TYPE_TEXT_DOWN" --gui-type-layout="$PANED_GUI_TYPE_LAYOUT_DOWN" \ --field="${translations[Choose a graphics card to run the game]}!${translations[Select which video card will be used to run the game (used for all running games and programs in PortProton)]} :CB" "$(combobox_fix --disabled "$GPU_VAR" "$GET_GPU_NAMES")" \ - --field="${translations[Force dpi for fonts]}!${translations[Here you can set forced dpi for fonts in wine]} :CB" "$(combobox_fix --disabled "$YAD_DPI_VAR" "96 (100%)!120 (125%)!144 (150%)!168 (175%)!192 (200%)!216 (225%)!240 (250%)!264 (275%)!288 (300%)")" \ + --field="${translations[Force dpi]}!${translations[Here you can set forced dpi for applications wine]} :CB" "$(combobox_fix --disabled "$YAD_DPI_VAR" "${translations[Recommended value]}!80!96!120!144!168!192!216!240")" \ --field="${translations[Choice wine audio driver]}!${translations[Fixes sound popling if choice alsa]} :CB" "$(combobox_fix --disabled "$SOUND_DRIVER_VAR" "alsa!oss!pulse")" \ - --field="${translations[Choice gui themes]}!${translations[Allows you to select a theme for PortProton]} :CB" "$(combobox_fix "$GUI_THEME" "default!compact!classic")" \ + --field="${translations[Select PortProton theme]}!${translations[Allows you to select a theme for PortProton]} :CB" "$(combobox_fix "$GUI_THEME" "${translations[default]}!${translations[compact]}!${translations[classic]}")" \ + --field="${translations[Select gtk theme]}!${translations[Allows you to select a theme for GTK.]} :CB" "$(combobox_fix "$GTK_THEME" "${YAD_GTK_THEME}Adwaita:${translations[light]}!Adwaita:${translations[dark]}!${translations[default]}")" \ --field="${translations[Time display]}!${translations[Displays time spent in an application or game]} :CB" "$(combobox_fix --disabled "$DESKTOP_WITH_TIME" "enabled")" \ --field="${translations[Sort shortcuts by time]}!${translations[This setting sorts the shortcuts in the main menu depending on the time spent in the application or game]} :CB" "$(combobox_fix --disabled "$SORT_WITH_TIME" "enabled")" \ 1> "${PW_TMPFS_PATH}/tmp_yad_userconf_set_cb" 2>/dev/null & @@ -5633,10 +5823,10 @@ gui_userconf () { --title="${translations[GLOBAL SETTINGS (USER.CONF)]}" \ --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --gui-type="settings-paned" \ - --button="${translations[CANCEL THE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Cancel the current changes and return to the previous menu]}":1 \ - --button="${translations[RESET]} USER.CONF"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Restore default settings for]} user.conf":2 \ - --button="${translations[OPEN THE SETTINGS FILE]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Open the user.conf settings file in a system text editor to view and change variables manually]}":164 \ - --button="${translations[SAVE CHANGES]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Save the current changes, and go to the previous menu]}":166 \ + --button="${translations[CANCEL THE CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Cancel the current changes and return to the previous menu]}":1 \ + --button="${translations[RESET]} USER.CONF!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Restore default settings for]} user.conf":2 \ + --button="${translations[OPEN THE SETTINGS FILE]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Open the user.conf settings file in a system text editor to view and change variables manually]}":164 \ + --button="${translations[SAVE CHANGES]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Save the current changes, and go to the previous menu]}":166 \ 2>/dev/null YAD_USERCONF_STATUS="$?" @@ -5657,15 +5847,28 @@ gui_userconf () { gui_open_user_conf ;; 166) - IFS='@' read -r -a PW_ADD_SETTINGS_UC <"${PW_TMPFS_PATH}/tmp_yad_userconf_set_cb" - IFS="$orig_IFS" + IFS='%' read -r -a PW_ADD_SETTINGS_UC <"${PW_TMPFS_PATH}/tmp_yad_userconf_set_cb" PW_GPU_USE="${PW_ADD_SETTINGS_UC[0]}" PW_WINE_DPI_VALUE="${PW_ADD_SETTINGS_UC[1]}" PW_SOUND_DRIVER_USE="${PW_ADD_SETTINGS_UC[2]}" GUI_THEME="${PW_ADD_SETTINGS_UC[3]}" - DESKTOP_WITH_TIME="${PW_ADD_SETTINGS_UC[4]}" - SORT_WITH_TIME="${PW_ADD_SETTINGS_UC[5]}" - edit_user_conf_from_gui PW_GPU_USE PW_WINE_DPI_VALUE PW_SOUND_DRIVER_USE GUI_THEME DESKTOP_WITH_TIME SORT_WITH_TIME + GTK_THEME="${PW_ADD_SETTINGS_UC[4]}" + DESKTOP_WITH_TIME="${PW_ADD_SETTINGS_UC[5]}" + SORT_WITH_TIME="${PW_ADD_SETTINGS_UC[6]}" + + if [[ $PW_WINE_DPI_VALUE == "${translations[Recommended value]}" ]] ; then + PW_WINE_DPI_VALUE="recommended" + fi + if [[ $GUI_THEME == "${translations[default]}" ]] ; then GUI_THEME=default + elif [[ $GUI_THEME == "${translations[compact]}" ]] ; then GUI_THEME=compact + elif [[ $GUI_THEME == "${translations[classic]}" ]] ; then GUI_THEME=classic + fi + if [[ $GTK_THEME == "${translations[default]}" ]] ; then unset GTK_THEME + elif [[ $GTK_THEME =~ ${translations[light]} ]] ; then GTK_THEME=${GTK_THEME//${translations[light]}/light} + elif [[ $GTK_THEME =~ ${translations[dark]} ]] ; then GTK_THEME=${GTK_THEME//${translations[dark]}/dark} + fi + + edit_user_conf_from_gui PW_GPU_USE PW_WINE_DPI_VALUE PW_SOUND_DRIVER_USE GUI_THEME GTK_THEME DESKTOP_WITH_TIME SORT_WITH_TIME restart_pp ;; esac @@ -5699,7 +5902,8 @@ resize_png () { fi if [[ -f "${PORT_WINE_PATH}/data/img/${RESIZE_NAME_PNG}.png" ]] \ - || [[ ! -f "${RESIZE_FILE}" ]] + || [[ ! -f "${RESIZE_FILE}" ]] \ + || [[ ! ${RESIZE_FILE,,} =~ .exe$ ]] then return 0 fi @@ -5753,15 +5957,15 @@ portwine_create_shortcut () { --field=" ${translations[Add shortcut to MENU -> GAMES]}":CHK "$PW_SHORTCUT_MENU" \ --field=" ${translations[Add shortcut to Desktop]}":CHK "$PW_SHORTCUT_DESKTOP" \ --field=" ${translations[Add shortcut to STEAM library]}":CHK "$PW_SHORTCUT_STEAM" \ - --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":2 \ - --button="${translations[CREATE SHORTCUT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) + --button="${translations[CANCEL]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":2 \ + --button="${translations[CREATE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) PW_YAD_OUT=$? portwine_output_yad_shortcut } portwine_output_yad_shortcut () { if [[ "$PW_YAD_OUT" == "0" ]] ; then - name_desktop=$(echo "$OUTPUT" | awk -F'|' '{print $1}' | sed "s/\`//g" | sed "s/\"//g" | sed "s/'//g" | sed "s/\!//g") + name_desktop=$(echo "$OUTPUT" | awk -F'|' '{print $1}' | sed -e "s/\`//g" -e "s/\"//g" -e "s/'//g" -e "s/\!//g") PW_SHORTCUT_MENU=$(echo "$OUTPUT" | awk -F'|' '{print $2}') PW_SHORTCUT_DESKTOP=$(echo "$OUTPUT" | awk -F'|' '{print $3}') PW_SHORTCUT_STEAM=$(echo "$OUTPUT" | awk -F'|' '{print $4}') @@ -5809,7 +6013,7 @@ portwine_output_yad_shortcut () { if [[ -f "${SLUF}" ]]; then SLUFUB=false STUID64="" - while IFS= read -r line; do + while read -r line; do if [[ "${line}" =~ ^[[:space:]]*\"([0-9]+)\"$ ]]; then STUIDCUR="${BASH_REMATCH[1]}" SLUFUB=true @@ -5831,6 +6035,7 @@ portwine_output_yad_shortcut () { create_new_dir "${STUIDPATH}/config/" create_new_dir "${STUIDPATH}/config/grid" export SGGRIDDIR="${STUIDPATH}/config/grid" + # shellcheck source=/dev/null source "${PORT_SCRIPTS_PATH}/add_in_steam.sh" if [[ "${PW_SKIP_RESTART_STEAM}" != 1 ]] && pgrep -i steam &>/dev/null ; then if yad_question "${translations[For adding shortcut to STEAM, needed restart.\\n\\nRestart STEAM now?]}" ; then @@ -5860,7 +6065,7 @@ portwine_output_yad_shortcut () { [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB restart_pp fi - elif [[ "$PW_YAD_OUT" =~ (^1$|^2$|^252$) ]] ; then + elif [[ "$PW_YAD_OUT" =~ ^(1|2|252)$ ]] ; then print_info "Restarting PP..." [[ -n $KEY_MENU ]] && unset portwine_exe [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB @@ -5879,16 +6084,15 @@ pw_auto_create_shortcut () { fi unset LINKS - for link_file in "${PORT_WINE_PATH}"/data/prefixes/*/drive_c/users/*/Desktop/*.lnk - do - link_file=$(readlink -f "${link_file}") - LINKS+=(${link_file// /@_@}) + for link_file in "${PORT_WINE_PATH}"/data/prefixes/*/drive_c/users/*/Desktop/*.lnk ; do + link_file=$(readlink -f "$link_file") + LINKS+=("${link_file// /#@_@#}") done [[ -z "${LINKS[0]}" ]] && return 0 - read -r -a SORTED_LINKS < <(echo ${LINKS[@]} | tr ' ' '\n' | sort -u | tr '\n' ' ') + read -r -a SORTED_LINKS < <(echo "${LINKS[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ') - for link_file in "${SORTED_LINKS[@]//@_@/ }" ; do + for link_file in "${SORTED_LINKS[@]//#@_@#/ }" ; do if command -v exiftool &>/dev/null ; then if timeout 3 exiftool "$link_file" &> "${PW_TMPFS_PATH}/exiftool.tmp" ; then prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') @@ -5967,8 +6171,8 @@ portwine_change_shortcut () { --field=" ${translations[Add shortcut to MENU -> GAMES]}":CHK "$PW_SHORTCUT_MENU" \ --field=" ${translations[Add shortcut to Desktop]}":CHK "$PW_SHORTCUT_DESKTOP" \ --field=" ${translations[Add shortcut to STEAM library]}":CHK "$PW_SHORTCUT_STEAM" \ - --button="${translations[REMOVE SHORTCUT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ - --button="${translations[CHANGE SHORTCUT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) + --button="${translations[REMOVE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ + --button="${translations[CHANGE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) PW_YAD_OUT=$? PORTWINE_CHANGE_SHORTCUT=1 if [[ $PW_YAD_OUT == 1 ]] ; then @@ -5982,22 +6186,22 @@ portwine_change_shortcut () { portwine_search_shortcut () { unset PW_DELETE_SHORTCUT_MENU PW_DELETE_SHORTCUT_DESKTOP PW_DELETE_MENU="$(grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop 2>/dev/null)" - PW_DELETE_SHORTCUT_MENU+=(${PW_DELETE_MENU// /@_@}) + read -r -d '' -a PW_DELETE_SHORTCUT_MENU <<< "${PW_DELETE_SHORTCUT_MENU[*]} ${PW_DELETE_MENU// /#@_@#}" PW_DELETE_PP="$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop 2>/dev/null)" - PW_DELETE_SHORTCUT_MENU+=(${PW_DELETE_PP// /@_@}) + read -r -d '' -a PW_DELETE_SHORTCUT_MENU <<< "${PW_DELETE_SHORTCUT_MENU[*]} ${PW_DELETE_PP// /#@_@#}" if [[ -d "${HOME}/Desktop" ]] ; then PW_DELETE_DESKTOP="$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop 2>/dev/null)" - PW_DELETE_SHORTCUT_DESKTOP+=(${PW_DELETE_DESKTOP// /@_@}) + read -r -d '' -a PW_DELETE_SHORTCUT_DESKTOP <<< "${PW_DELETE_SHORTCUT_DESKTOP[*]} ${PW_DELETE_DESKTOP// /#@_@#}" fi if [[ -d "${HOME}/Рабочий стол" ]] ; then PW_DELETE_DESKTOP="$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop 2>/dev/null)" - PW_DELETE_SHORTCUT_DESKTOP+=(${PW_DELETE_DESKTOP// /@_@}) + read -r -d '' -a PW_DELETE_SHORTCUT_DESKTOP <<< "${PW_DELETE_SHORTCUT_DESKTOP[*]} ${PW_DELETE_DESKTOP// /#@_@#}" fi if [[ $(xdg-user-dir DESKTOP) ]] ; then PW_DELETE_DESKTOP="$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop 2>/dev/null)" - PW_DELETE_SHORTCUT_DESKTOP+=(${PW_DELETE_DESKTOP// /@_@}) + read -r -d '' -a PW_DELETE_SHORTCUT_DESKTOP <<< "${PW_DELETE_SHORTCUT_DESKTOP[*]} ${PW_DELETE_DESKTOP// /#@_@#}" fi } @@ -6007,8 +6211,8 @@ portwine_delete_shortcut () { fi unset PORTWINE_CHANGE_SHORTCUT - for delete_shortcut in ${PW_DELETE_SHORTCUT_MENU[@]} ${PW_DELETE_SHORTCUT_DESKTOP[@]} ; do - rm -f "${delete_shortcut//@_@/ }" + for delete_shortcut in "${PW_DELETE_SHORTCUT_MENU[@]}" "${PW_DELETE_SHORTCUT_DESKTOP[@]}" ; do + rm -f "${delete_shortcut//#@_@#/ }" done } @@ -6017,14 +6221,17 @@ portwine_missing_shortcut () { --window-icon "$PW_GUI_ICON_PATH/portproton.svg" --fixed \ --image "$PW_GUI_ICON_PATH/error.svg" \ --text "\n${translations[Could not find the file:]}\n$(print_wrapped "${portwine_exe}" "50")\n\n${translations[ATTENTION:\\nIf you forgot to mount the disk with the running application, click CANCEL!]}\n" \ - --button="${translations[DELETE SHORTCUT]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 \ - --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 + --button="${translations[DELETE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 \ + --button="${translations[CANCEL]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 if [[ $? -eq "0" ]] ; then portwine_delete_shortcut fi - if [[ -n "$TAB_MAIN_MENU" ]] - then restart_pp - else exit 0 + if [[ -n $AI_SKIP ]] + then + unset TAB_MAIN_MENU + restart_pp + else + exit 0 fi } @@ -6099,13 +6306,13 @@ pw_prefix_manager () { --width=700 --height=700 --expand \ --gui-type="settings-notebook" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${translations[PREFIX MANAGER]}" \ - --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ - --button="${translations[FORCE INSTALL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Installation with forced redownload of libraries]}":2 \ - --button="${translations[INSTALL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Standard installation.]}":0 \ + --button="${translations[CANCEL]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!":1 \ + --button="${translations[FORCE INSTALL]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Installation with forced redownload of libraries]}":2 \ + --button="${translations[INSTALL]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Standard installation.]}":0 \ --tab-pos="top" \ - --tab="${translations[DLLS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[FONTS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[SETTINGS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" 2>/dev/null + --tab="${translations[DLLS]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[FONTS]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[SETTINGS]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" 2>/dev/null YAD_STATUS="$?" try_remove_file "${PW_TMPFS_PATH}/dll_list_tmp" @@ -6238,9 +6445,9 @@ portwine_start_debug () { echo "RAM:" >> "${PORT_WINE_PATH}/PortProton.log" free -m >> "${PORT_WINE_PATH}/PortProton.log" echo "--------------------------------------------------------------" >> "${PORT_WINE_PATH}/PortProton.log" - echo "Filesystem "${PATH_TO_GAME}" - $(stat -f -c %T "${PATH_TO_GAME}")" >> "${PORT_WINE_PATH}/PortProton.log" - echo "Filesystem "${PORT_WINE_PATH}" - $(stat -f -c %T "${PORT_WINE_PATH}")" >> "${PORT_WINE_PATH}/PortProton.log" - echo "Filesystem "${PW_TMPFS_PATH}" - $(stat -f -c %T "${PW_TMPFS_PATH}")" >> "${PORT_WINE_PATH}/PortProton.log" + echo "Filesystem ${PATH_TO_GAME} - $(stat -f -c %T "${PATH_TO_GAME}")" >> "${PORT_WINE_PATH}/PortProton.log" + echo "Filesystem ${PORT_WINE_PATH} - $(stat -f -c %T "${PORT_WINE_PATH}")" >> "${PORT_WINE_PATH}/PortProton.log" + echo "Filesystem ${PW_TMPFS_PATH} - $(stat -f -c %T "${PW_TMPFS_PATH}")" >> "${PORT_WINE_PATH}/PortProton.log" echo "---------------------------------------------------------------" >> "${PORT_WINE_PATH}/PortProton.log" echo "Graphic cards and drivers:" >> "${PORT_WINE_PATH}/PortProton.log" echo 'lspci -k | grep -EA3 VGA|3D|Display :' >> "${PORT_WINE_PATH}/PortProton.log" @@ -6304,7 +6511,7 @@ portwine_start_debug () { sleep 3 pw_stop_progress_bar local PW_TIMER=0 - while read -r line || [[ -n $(pgrep -a yad | grep "yad_gui_pp --text-info --tail --button="STOP"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 --title="DEBUG"" | awk '{print $1}') ]] ; do + while read -r line || [[ -n $(pgrep -a yad | grep "yad_gui_pp --text-info --tail --button="STOP!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 --title="DEBUG"" | awk '{print $1}') ]] ; do sleep 0.005 if [[ -n "${line}" ]] && ! echo "${line}" | grep -qi "kerberos\|ntlm" ; then echo "# ${line}" @@ -6313,7 +6520,7 @@ portwine_start_debug () { sleep 3 PW_TIMER=1 fi - done < "${PORT_WINE_PATH}/PortProton.log" | "${pw_yad}" --text-info --tail --button="STOP"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 --title="DEBUG" \ + done < "${PORT_WINE_PATH}/PortProton.log" | "${pw_yad}" --text-info --tail --button="STOP!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 --title="DEBUG" \ --skip-taskbar --width=800 --height=400 --text "${translations[Please wait! After finishing the PortProton, click STOP.]}" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" 2>/dev/null && kill_portwine sed -i '/.fx$/d' "${PORT_WINE_PATH}/PortProton.log" @@ -6335,8 +6542,8 @@ pw_create_prefix_backup () { cd "$HOME" || : PW_PREFIX_TO_BACKUP=$("${pw_yad}" --file --directory --width=800 --height=500 \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${translations[BACKUP PREFIX TO...]}" \ - --button="${translations[CANCEL]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ - --button="${translations[OK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) + --button="${translations[CANCEL]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":1 \ + --button="${translations[OK]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png":0 2>/dev/null) YAD_STATUS="$?" if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then @@ -6392,8 +6599,8 @@ pw_autoinstall_from_db () { export PW_MANGOHUD=0 export PW_VKBASALT=0 export PW_USE_D3D_EXTRAS=1 + # shellcheck source=/dev/null . "${PORT_SCRIPTS_PATH}/pw_autoinstall/${PW_YAD_SET}" - } button_click () { @@ -6401,16 +6608,16 @@ button_click () { case "$1" in --normal) - kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY_MENU}" | awk '{print $1}') > /dev/null 2>&1 + kill -s SIGUSR1 "$(pgrep -a yad | grep "\--key=${KEY_MENU}" | awk '{print $1}')" > /dev/null 2>&1 ;; --start) - kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY_START}" | awk '{print $1}') > /dev/null 2>&1 + kill -s SIGUSR1 "$(pgrep -a yad | grep "\--key=${KEY_START}" | awk '{print $1}')" > /dev/null 2>&1 ;; --userconf) - kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY_USERCONF_GUI}" | awk '{print $1}') > /dev/null 2>&1 + kill -s SIGUSR1 "$(pgrep -a yad | grep "\--key=${KEY_USERCONF_GUI}" | awk '{print $1}')" > /dev/null 2>&1 ;; --desktop) - kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY_MENU}" | awk '{print $1}') > /dev/null 2>&1 + kill -s SIGUSR1 "$(pgrep -a yad | grep "\--key=${KEY_MENU}" | awk '{print $1}')" > /dev/null 2>&1 PW_YAD_SET="${PORT_WINE_PATH}/${PW_YAD_SET//#@_@#/ }" if [[ -n $PW_DESKTOP_FILES_REGEX ]] ; then local count=1 @@ -6561,8 +6768,8 @@ gui_open_user_conf () { PW_USERCONF_GUI="$("${pw_yad}" --title="${translations[EDIT USER CONFIG]}" \ --text-info --editable --width=800 --height=600 \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ - --button="${translations[BACK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ - --button="${translations[SAVE]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":2 \ + --button="${translations[BACK]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!":1 \ + --button="${translations[SAVE]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!":2 \ --filename="${PORT_WINE_PATH}/data/user.conf" 2>/dev/null)" YAD_STATUS="$?" @@ -6584,8 +6791,8 @@ gui_edit_db_file () { GUI_EDIT_DB_FILE="$("${pw_yad}" --title="${translations[EDIT DB]}" \ --text-info --editable --width=800 --height=600 \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ - --button="${translations[BACK]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ - --button="${translations[SAVE]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":2 \ + --button="${translations[BACK]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!":1 \ + --button="${translations[SAVE]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!":2 \ --filename="${PORTWINE_DB_FILE}" 2>/dev/null)" YAD_STATUS="$?" @@ -6641,7 +6848,7 @@ See the License for details.]}" 2>/dev/null & Developer assistants and testers:]} $(credits_devel)" 2>/dev/null & - "${pw_yad}" --plug="${KEY_CREDITS}" --tabnum=3 --text-info --scroll <<< "$(eval_translations "MIT License + "${pw_yad}" --plug="${KEY_CREDITS}" --tabnum=3 --text-info --scroll < <(eval_translations "MIT License Copyright © \$%DATE% Castro-Fidel (linux-gaming.ru) @@ -6661,7 +6868,7 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE." "DATE=$(date +%Y)")" 2>/dev/null & +SOFTWARE." "DATE=$(date +%Y)") 2>/dev/null & "${pw_yad}" --plug="${KEY_CREDITS}" --tabnum=4 \ --text-info --show-uri --scroll \ diff --git a/data_from_portwine/scripts/portwine_db/BlackDesertOnline.ppdb b/data_from_portwine/scripts/portwine_db/BlackDesertOnline.ppdb index 9f614050..edec3d64 100644 --- a/data_from_portwine/scripts/portwine_db/BlackDesertOnline.ppdb +++ b/data_from_portwine/scripts/portwine_db/BlackDesertOnline.ppdb @@ -5,6 +5,10 @@ #####################examples########################### export PW_WINDOWS_VER="10" export PW_VULKAN_USE="2" -export PW_WINE_USE=PROTON_LG +export PW_WINE_USE="PROTON_LG" export PW_PREFIX_NAME="BLACK_DESERT_ONLINE" # export DISABLE_CP_DEFPFX=1 +export PORTPROTON_NAME="BlackDesertLauncher" +export FILE_DESCRIPTION="BlackDesertLauncher" +export WINE_DISABLE_KERNEL_WRITEWATCH="1" +export DXVK_CONFIG="dxgi.syncInterval=0" diff --git a/data_from_portwine/scripts/portwine_db/Cyberpunk2077.ppdb b/data_from_portwine/scripts/portwine_db/Cyberpunk2077.ppdb index cbe6dae7..09c9047e 100644 --- a/data_from_portwine/scripts/portwine_db/Cyberpunk2077.ppdb +++ b/data_from_portwine/scripts/portwine_db/Cyberpunk2077.ppdb @@ -5,5 +5,5 @@ #####################examples########################### export WINEDLLOVERRIDES="Crash*,REDEngineErrorReporter.exe=" export PW_REDUCE_PULSE_LATENCY=1 -export LAUNCH_PARAMETERS=("--launcher-skip") # Additional launch options +export LAUNCH_PARAMETERS="--launcher-skip" export VKD3D_CONFIG=force_bindless_texel_buffer,multi_queue diff --git a/data_from_portwine/scripts/portwine_db/GTAIV.ppdb b/data_from_portwine/scripts/portwine_db/GTAIV.ppdb index 50d3c13f..508b5672 100644 --- a/data_from_portwine/scripts/portwine_db/GTAIV.ppdb +++ b/data_from_portwine/scripts/portwine_db/GTAIV.ppdb @@ -4,5 +4,5 @@ #Rating=1-5 ################################################ export LAUNCH_PARAMETERS="-nomemrestrict -norestrictions -percentvidmem 100 -availablevidmem 2048 -noprecache -novblank -heapsize 2097152" # Additional launch options -export PW_NO_ESYNC=1 +export PW_NO_ESYNC=0 export PW_NO_FSYNC=1 diff --git a/data_from_portwine/scripts/portwine_db/MK10.ppdb b/data_from_portwine/scripts/portwine_db/MK10.ppdb new file mode 100644 index 00000000..882bc6e3 --- /dev/null +++ b/data_from_portwine/scripts/portwine_db/MK10.ppdb @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +#Author: Mels +#MK10.exe +#Rating=1-5 +export PW_VULKAN_USE="2" +export PW_WINE_USE="WINE_LG" +export PORTPROTON_NAME="Mortal Kombat XL" diff --git a/data_from_portwine/scripts/portwine_db/NieRAutomata.ppdb b/data_from_portwine/scripts/portwine_db/NieRAutomata.ppdb new file mode 100644 index 00000000..398c5d20 --- /dev/null +++ b/data_from_portwine/scripts/portwine_db/NieRAutomata.ppdb @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +#Author: deck +#NieRAutomata.exe +#Rating=1-5 +export PW_VULKAN_USE="2" +export PW_WINE_USE="WINE_LG" +export PORTPROTON_NAME="NieRAutomata" diff --git a/data_from_portwine/scripts/portwine_db/RDR.ppdb b/data_from_portwine/scripts/portwine_db/RDR.ppdb new file mode 100644 index 00000000..7f9134b5 --- /dev/null +++ b/data_from_portwine/scripts/portwine_db/RDR.ppdb @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +#Author: prefix +#PlayRDR.exe +#Rating=1-5 +export PW_WINE_USE="WINE_LG" +export LAUNCH_PARAMETERS="-nomemrestrict -norestrictions -percentvidmem 100 -availablevidmem 2048 -noprecache -novblank -heapsize 2097152" +export PW_NO_ESYNC="0" +export PW_NO_FSYNC="1" +export PORTPROTON_NAME="PlayRDR" +export PW_VULKAN_USE="2" diff --git a/data_from_portwine/scripts/portwine_db/Saturn.ppdb b/data_from_portwine/scripts/portwine_db/Saturn.ppdb new file mode 100644 index 00000000..56d46d4e --- /dev/null +++ b/data_from_portwine/scripts/portwine_db/Saturn.ppdb @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +#Author: Dervart +#Saturn.exe +#Rating=1-5 +if [[ "$LANGUAGE" == "ru" ]] ; then + export PW_COMMENT_DB="При сворачивании или переключении фокуса окна возможны вылеты игры.\nРекомендуется использовать GAMESCOPE, либо VIRTUAL_DESKTOP в настройках" +else + export PW_COMMENT_DB="When minimizing or switching the window focus, the game may crash.\nRecommended to use GAMESCOPE or VIRTUAL_DESKTOP in the SETTINGS" +fi +export PW_VULKAN_USE="2" +export PW_WINE_USE="WINE_LG" +export PW_PREFIX_NAME="NINSAR" +export PORTPROTON_NAME="Saturn" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_AGE_OF_EMPIRES_ONLINE b/data_from_portwine/scripts/pw_autoinstall/PW_AGE_OF_EMPIRES_ONLINE index 1264c9d6..80bb53b1 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_AGE_OF_EMPIRES_ONLINE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_AGE_OF_EMPIRES_ONLINE @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="AGE_OF_EMPIRES_ONLINE" -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Celeste.Installer.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Age of Empires Online" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_ALBION_ONLINE b/data_from_portwine/scripts/pw_autoinstall/PW_ALBION_ONLINE index c7d539ee..abfbe965 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_ALBION_ONLINE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_ALBION_ONLINE @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="ALBION_ONLINE" -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/albion-online-setup.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Albion Online" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_ANKAMA b/data_from_portwine/scripts/pw_autoinstall/PW_ANKAMA index 8f68a4ad..577e43c8 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_ANKAMA +++ b/data_from_portwine/scripts/pw_autoinstall/PW_ANKAMA @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Ankama-Setup.exe" start_portwine if try_download "https://download.ankama.com/launcher/full/win/" "${PW_AUTOINSTALL_EXE}" no_mirror diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_ANOMALY_ZONE b/data_from_portwine/scripts/pw_autoinstall/PW_ANOMALY_ZONE index 71fdf654..6c9b46ba 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_ANOMALY_ZONE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_ANOMALY_ZONE @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/az_webinst.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Anomaly Zone" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_ARIZONA_GAMES_LAUNCHER b/data_from_portwine/scripts/pw_autoinstall/PW_ARIZONA_GAMES_LAUNCHER index 09bc2c79..2cb90dfe 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_ARIZONA_GAMES_LAUNCHER +++ b/data_from_portwine/scripts/pw_autoinstall/PW_ARIZONA_GAMES_LAUNCHER @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="ARIZONA_GAMES_LAUNCHER" -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Arizona Installer.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Arizona Games Launcher" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_BLACK_DESERT_ONLINE b/data_from_portwine/scripts/pw_autoinstall/PW_BLACK_DESERT_ONLINE index 1e695872..0d1949e2 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_BLACK_DESERT_ONLINE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_BLACK_DESERT_ONLINE @@ -10,9 +10,9 @@ export PW_PREFIX_NAME="BLACK_DESERT_ONLINE" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/BlackDesert_Installer_RU.exe" export LAUNCH_PARAMETERS="/silent" export PW_MUST_HAVE_DLL="" -export PW_VULKAN_USE=1 -export PW_USE_D3D_EXTRAS=1 -export PW_WINE_USE=PROTON_LG +export PW_VULKAN_USE="1" +export PW_USE_D3D_EXTRAS="1" +export PW_WINE_USE="PROTON_LG" # export DISABLE_CP_DEFPFX=1 pw_clear_pfx diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_BLOOD_AND_SOUL b/data_from_portwine/scripts/pw_autoinstall/PW_BLOOD_AND_SOUL index 10531861..b51e5e39 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_BLOOD_AND_SOUL +++ b/data_from_portwine/scripts/pw_autoinstall/PW_BLOOD_AND_SOUL @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="BLOOD_AND_SOUL" -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/bs-install.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Blood and Soul" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_BROKEN_RANKS b/data_from_portwine/scripts/pw_autoinstall/PW_BROKEN_RANKS index d976ec19..9360ddac 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_BROKEN_RANKS +++ b/data_from_portwine/scripts/pw_autoinstall/PW_BROKEN_RANKS @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="BROKEN_RANKS" -export LAUNCH_PARAMETERS=("/q") +export LAUNCH_PARAMETERS="/q" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/BrokenRanksInstaller.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Broken Ranks" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_BSR b/data_from_portwine/scripts/pw_autoinstall/PW_BSR index 5a3dbb31..4faba8ce 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_BSR +++ b/data_from_portwine/scripts/pw_autoinstall/PW_BSR @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/bsr_setup.exe" start_portwine if try_download "https://battleofspaceraiders.com/install/bsr_setup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_CALIBER b/data_from_portwine/scripts/pw_autoinstall/PW_CALIBER index 2886c091..140ff624 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_CALIBER +++ b/data_from_portwine/scripts/pw_autoinstall/PW_CALIBER @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="CALIBER" -export LAUNCH_PARAMETERS=("/VERYSILENT" "/CLOSEAPPLICATIONS") +export LAUNCH_PARAMETERS="/VERYSILENT /CLOSEAPPLICATIONS" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/CaliberSetup.exe" export PW_WINE_USE="PROTON_LG" # export DISABLE_CP_DEFPFX="1" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_CHICKEN_INVADERS_UNIVERSE b/data_from_portwine/scripts/pw_autoinstall/PW_CHICKEN_INVADERS_UNIVERSE index fcbf1604..fbe10442 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_CHICKEN_INVADERS_UNIVERSE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_CHICKEN_INVADERS_UNIVERSE @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="CHICKEN_INVADERS_UNIVERSE" -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/ChickenInvadersUniverseInstaller.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Chicken Invaders Universe" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_CONTRACT_WARS b/data_from_portwine/scripts/pw_autoinstall/PW_CONTRACT_WARS index 476f932d..051b918d 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_CONTRACT_WARS +++ b/data_from_portwine/scripts/pw_autoinstall/PW_CONTRACT_WARS @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/VERYSILENT") +export LAUNCH_PARAMETERS="/VERYSILENT" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/CWClient_Install.exe" start_portwine if try_download "https://cdn-01.contractwarsgame.com/standalone/CWClient_Install.exe" "${PW_AUTOINSTALL_EXE}" no_mirror diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_CROSSOUT b/data_from_portwine/scripts/pw_autoinstall/PW_CROSSOUT index 12d4a6cf..81ce58d8 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_CROSSOUT +++ b/data_from_portwine/scripts/pw_autoinstall/PW_CROSSOUT @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/VERYSILENT") +export LAUNCH_PARAMETERS="/VERYSILENT" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/crossout.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Crossout" export PW_PREFIX_NAME="CROSSOUT" @@ -18,7 +18,7 @@ then pw_kill_autostart launcher.exe 3 & pw_run "${PW_AUTOINSTALL_EXE}" portwine_exe="${WINEPREFIX}/drive_c/users/$USER/AppData/Local/Crossout/launcher.exe" - pw_run reg add "HKEY_CURRENT_USER\Software\Wine\X11 Driver" /v "Decorated" /t REG_SZ /d "N" /f + get_and_set_reg_file --add 'Software\Wine\X11' 'Decorated' 'REG_SZ' "N" "user" pw_create_unique_exe "crossout_launcher_pp" try_remove_file "${PW_AUTOINSTALL_EXE}" try_remove_file "${portwine_exe}.ppdb" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_DOLPHIN b/data_from_portwine/scripts/pw_autoinstall/PW_DOLPHIN index 32bfaf45..4b5e2b25 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_DOLPHIN +++ b/data_from_portwine/scripts/pw_autoinstall/PW_DOLPHIN @@ -6,7 +6,7 @@ # info_en: # info_ru: ########################################################################## -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/dolphin-x64-5.0.exe" start_portwine if try_download "https://dl-mirror.dolphin-emu.org/5.0/dolphin-x64-5.0.exe" "${PW_AUTOINSTALL_EXE}" no_mirror diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_DOOMSDAY b/data_from_portwine/scripts/pw_autoinstall/PW_DOOMSDAY index 621718b2..f75c1bea 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_DOOMSDAY +++ b/data_from_portwine/scripts/pw_autoinstall/PW_DOOMSDAY @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="DOOMSDAY" -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/dls_installer_1.0.30_1729944485-3778620.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Doomsday" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_EAAPP b/data_from_portwine/scripts/pw_autoinstall/PW_EAAPP index b45adf77..4d604a54 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_EAAPP +++ b/data_from_portwine/scripts/pw_autoinstall/PW_EAAPP @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/silent" "/repair" ) +export LAUNCH_PARAMETERS="/silent /repair" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/EAappInstaller.exe" export PORTWINE_CREATE_SHORTCUT_NAME="EALauncher" export PW_VULKAN_USE="2" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_ELDEVIN b/data_from_portwine/scripts/pw_autoinstall/PW_ELDEVIN index 63e5f829..dde96a9f 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_ELDEVIN +++ b/data_from_portwine/scripts/pw_autoinstall/PW_ELDEVIN @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="ELDEVIN" -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/eldevin_win64.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Eldevin" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_ELSWORD b/data_from_portwine/scripts/pw_autoinstall/PW_ELSWORD index 4bc79ee2..76fd6c9b 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_ELSWORD +++ b/data_from_portwine/scripts/pw_autoinstall/PW_ELSWORD @@ -8,7 +8,7 @@ ######################################################################## export PW_WINE_USE="WINE_LG" export PW_PREFIX_NAME="ELSWORD" -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/ElswordInstaller_NA(64bit).exe" export PORTWINE_CREATE_SHORTCUT_NAME="Elsword" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_EPIC b/data_from_portwine/scripts/pw_autoinstall/PW_EPIC index 7191a7fa..4dfdfd28 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_EPIC +++ b/data_from_portwine/scripts/pw_autoinstall/PW_EPIC @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/q" ) +export LAUNCH_PARAMETERS="/q" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/EpicGamesLauncherInstaller.msi" export PW_USE_D3D_EXTRAS=1 export PORTWINE_CREATE_SHORTCUT_NAME="Epic Games Launcher" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_EXOTANKS b/data_from_portwine/scripts/pw_autoinstall/PW_EXOTANKS index 7f5c387d..019cd9b9 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_EXOTANKS +++ b/data_from_portwine/scripts/pw_autoinstall/PW_EXOTANKS @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="EXOTANKS" -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/ExoTanksMOBA_Setup.exe" export PORTWINE_CREATE_SHORTCUT_NAME="ExoTanks" #UE4PrereqSetup diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_GAMEFORGE b/data_from_portwine/scripts/pw_autoinstall/PW_GAMEFORGE index b6eb195f..7d2f5534 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_GAMEFORGE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_GAMEFORGE @@ -24,7 +24,6 @@ pw_shutdown_please () { fi } -export LAUNCH_PARAMETERS=("") export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/GameforgeInstaller.exe" start_portwine if try_download "https://raw.githubusercontent.com/WarfaceZ/lutris-clients/master/GameforgeInstaller.exe" "${PW_AUTOINSTALL_EXE}" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_GAME_XP b/data_from_portwine/scripts/pw_autoinstall/PW_GAME_XP index b2c0b254..c4af4f09 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_GAME_XP +++ b/data_from_portwine/scripts/pw_autoinstall/PW_GAME_XP @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="GAMEXP" -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/InstallGameXPlauncher.exe" export PORTWINE_CREATE_SHORTCUT_NAME="GameXP" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_GOG b/data_from_portwine/scripts/pw_autoinstall/PW_GOG index 119416cb..b4a4fca6 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_GOG +++ b/data_from_portwine/scripts/pw_autoinstall/PW_GOG @@ -11,7 +11,7 @@ GOG_VER="$(curl "https://remote-config.gog.com/components/webinstaller?component | awk -F'.exe' '{print $1}')" [[ "${GOG_VER}" != 2.* ]] && yad_error "ERROR: Get the GOG version." && exit 1 export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/setup_galaxy_${GOG_VER}.exe" -export LAUNCH_PARAMETERS=("/VERYSILENT") +export LAUNCH_PARAMETERS="/VERYSILENT" export PW_PREFIX_NAME="GOG" export DISABLE_CP_DEFPFX="1" export PW_WINE_USE="WINE_LG" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_GOOSE_GOOSE_DUCK b/data_from_portwine/scripts/pw_autoinstall/PW_GOOSE_GOOSE_DUCK index 0108eb64..b4d6fd28 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_GOOSE_GOOSE_DUCK +++ b/data_from_portwine/scripts/pw_autoinstall/PW_GOOSE_GOOSE_DUCK @@ -8,7 +8,7 @@ ######################################################################## VERSION="3.11.00" export PW_PREFIX_NAME="GOOSE_GOOSE_DUCK" -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Goose Goose Duck Installer $VERSION release.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Goose Goose Duck" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_GUILD_WARS_2 b/data_from_portwine/scripts/pw_autoinstall/PW_GUILD_WARS_2 index 0c2e05bd..1fa35518 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_GUILD_WARS_2 +++ b/data_from_portwine/scripts/pw_autoinstall/PW_GUILD_WARS_2 @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/VERYSILENT") +export LAUNCH_PARAMETERS="/VERYSILENT" export PW_PREFIX_NAME="GW2" export WINEDLLOVERRIDES="mscoree,mshtml=" export PW_MUST_HAVE_DLL="" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_HO_YO_PLAY b/data_from_portwine/scripts/pw_autoinstall/PW_HO_YO_PLAY index 53cef2f5..9959ec80 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_HO_YO_PLAY +++ b/data_from_portwine/scripts/pw_autoinstall/PW_HO_YO_PLAY @@ -20,7 +20,7 @@ then export PATH_TO_GAME="${PW_USER_TEMP}" pw_run "${PW_AUTOINSTALL_EXE}" export portwine_exe="$WINEPREFIX/drive_c/Program Files/HoYoPlay/launcher.exe" - pw_run reg add "HKEY_CURRENT_USER\Software\Wine\X11 Driver" /v "Decorated" /t REG_SZ /d "N" /f + get_and_set_reg_file --add 'Software\Wine\X11' 'Decorated' 'REG_SZ' "N" "user" pw_create_unique_exe "hoyoplay_launcher_pp" try_remove_file "${PW_AUTOINSTALL_EXE}" try_remove_file "${portwine_exe}.ppdb" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_IGCLIENT b/data_from_portwine/scripts/pw_autoinstall/PW_IGCLIENT index 6f6c0543..a95b0bb2 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_IGCLIENT +++ b/data_from_portwine/scripts/pw_autoinstall/PW_IGCLIENT @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/igclient_setup.exe" export PW_DLL_INSTALL="vcrun2019" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_ITCH b/data_from_portwine/scripts/pw_autoinstall/PW_ITCH index 6fa20a40..e616a0ba 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_ITCH +++ b/data_from_portwine/scripts/pw_autoinstall/PW_ITCH @@ -6,7 +6,7 @@ # info_en: # info_ru: ########################################################################## -export LAUNCH_PARAMETERS=("--silent") +export LAUNCH_PARAMETERS="--silent" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/itch-setup.exe" start_portwine diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_LGC b/data_from_portwine/scripts/pw_autoinstall/PW_LGC index 69078978..3f1dedde 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_LGC +++ b/data_from_portwine/scripts/pw_autoinstall/PW_LGC @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/VERYSILENT") +export LAUNCH_PARAMETERS="/VERYSILENT" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Lesta_Game_Center_Install_RU.exe" export PW_PREFIX_NAME="LGC" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_METAL_WAR_ONLINE b/data_from_portwine/scripts/pw_autoinstall/PW_METAL_WAR_ONLINE index 6f6887c5..1e80509f 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_METAL_WAR_ONLINE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_METAL_WAR_ONLINE @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/s" "/nr" "/l=Russian") +export LAUNCH_PARAMETERS="/s /nr /l=Russian" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/MWO_Launcher_Setup.exe" start_portwine if try_download "http://mwogame.com/download.php" "${PW_AUTOINSTALL_EXE}" no_mirror diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_MODERN_WARSHIPS b/data_from_portwine/scripts/pw_autoinstall/PW_MODERN_WARSHIPS index 7505514b..9c093d6e 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_MODERN_WARSHIPS +++ b/data_from_portwine/scripts/pw_autoinstall/PW_MODERN_WARSHIPS @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/VERYSILENT") +export LAUNCH_PARAMETERS="/VERYSILENT" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/modern_warships.exe" export PW_PREFIX_NAME="MODERN_WARSHIPS" export PORTWINE_CREATE_SHORTCUT_NAME="Modern Warships" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_PANZAR b/data_from_portwine/scripts/pw_autoinstall/PW_PANZAR index 1d427407..288a65b3 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_PANZAR +++ b/data_from_portwine/scripts/pw_autoinstall/PW_PANZAR @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/VERYSILENT") +export LAUNCH_PARAMETERS="/VERYSILENT" export PW_WINDOWS_VER="7" export PW_PREFIX_NAME="PANZAR" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Panzar.exe" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_PATH_OF_EXILE b/data_from_portwine/scripts/pw_autoinstall/PW_PATH_OF_EXILE index 19392f1b..86f47a38 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_PATH_OF_EXILE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_PATH_OF_EXILE @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/PathOfExileInstaller.exe" start_portwine diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_PLARIUM_PLAY b/data_from_portwine/scripts/pw_autoinstall/PW_PLARIUM_PLAY index fb99098d..96afab1e 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_PLARIUM_PLAY +++ b/data_from_portwine/scripts/pw_autoinstall/PW_PLARIUM_PLAY @@ -6,15 +6,14 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/s" ) +export LAUNCH_PARAMETERS="/s" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/plarium_play_setup.exe" export PW_WINDOWS_VER="10" -# export PW_DLL_INSTALL="dotnet461" export PW_PREFIX_NAME="DOTNET" - +export PORTWINE_CREATE_SHORTCUT_NAME="Plarium Play" start_portwine -if try_download "https://plarium.com/services/api/downloads/desktop?lid=1&arc=64&os=windows" "${PW_AUTOINSTALL_EXE}" no_mirror +if try_download "https://installer.plarium.com/desktop?lid=2&arc=64&os=windows" "${PW_AUTOINSTALL_EXE}" no_mirror then pw_start_progress_bar_install_game "Plarium Play." pw_kill_autostart PlariumPlay.exe & @@ -24,7 +23,6 @@ then try_remove_file "${portwine_exe}.ppdb" kill_portwine pw_stop_progress_bar - export PORTWINE_CREATE_SHORTCUT_NAME="Plarium Play" portwine_create_shortcut fi stop_portwine diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_PPSSPP b/data_from_portwine/scripts/pw_autoinstall/PW_PPSSPP index 3cbde487..d14c1019 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_PPSSPP +++ b/data_from_portwine/scripts/pw_autoinstall/PW_PPSSPP @@ -6,7 +6,7 @@ # info_en: # info_ru: ########################################################################## -export LAUNCH_PARAMETERS=("/VERYSILENT") +export LAUNCH_PARAMETERS="/VERYSILENT" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/PPSSPPSetup.exe" start_portwine if try_download "https://ppsspp.org/files/1_16_5/PPSSPPSetup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_PROJECT64 b/data_from_portwine/scripts/pw_autoinstall/PW_PROJECT64 index 8ca9a777..745c410d 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_PROJECT64 +++ b/data_from_portwine/scripts/pw_autoinstall/PW_PROJECT64 @@ -11,7 +11,7 @@ PR64_VER="$(curl https://www.pj64-emu.com/public-releases | grep 'installer' | h | awk -F'installer"' '{print $1}')" [[ "${PR64_VER}" != *-3-* ]] && yad_error "ERROR: Get the Project64 version." && exit 1 -export LAUNCH_PARAMETERS=("/VERYSILENT") +export LAUNCH_PARAMETERS="/VERYSILENT" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Project64${PR64_VER}setup.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Project64" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_RISE_OF_FLIGHT b/data_from_portwine/scripts/pw_autoinstall/PW_RISE_OF_FLIGHT index 247c9440..185042cb 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_RISE_OF_FLIGHT +++ b/data_from_portwine/scripts/pw_autoinstall/PW_RISE_OF_FLIGHT @@ -8,7 +8,7 @@ ######################################################################## export PW_PREFIX_NAME="RISE_OF_FLIGHT" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/ROF_UE.zip" -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" export PORTWINE_CREATE_SHORTCUT_NAME="Rise of Flight" start_portwine diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_RUSSIAN_FISHING b/data_from_portwine/scripts/pw_autoinstall/PW_RUSSIAN_FISHING index 78de5f6b..c0c5cf30 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_RUSSIAN_FISHING +++ b/data_from_portwine/scripts/pw_autoinstall/PW_RUSSIAN_FISHING @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/q" ) +export LAUNCH_PARAMETERS="/q" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/RF4SetupRU.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Russian Fishing 4" export PW_PREFIX_NAME="RUSSIAN_FISHING" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_SATURN b/data_from_portwine/scripts/pw_autoinstall/PW_SATURN new file mode 100644 index 00000000..4c1ac85c --- /dev/null +++ b/data_from_portwine/scripts/pw_autoinstall/PW_SATURN @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# Author: Dervart +# type: games +# name: Saturn +# image: saturn +# info_en: +# info_ru: +######################################################################## +export PW_PREFIX_NAME="NINSAR" +export PW_WINE_USE="WINE_LG" +export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/saturn.zip" +start_portwine +if try_download "https://cdn-s3.quadrosim.ru/saturn/saturn.zip" "${PW_AUTOINSTALL_EXE}" no_mirror +then + pw_start_progress_bar_install_game "Saturn." + "$pw_7z" x -y "${PW_AUTOINSTALL_EXE}" -o"$WINEPREFIX/drive_c/Program Files (x86)/saturn" + portwine_exe="$WINEPREFIX/drive_c/Program Files (x86)/saturn/Saturn.exe" + try_remove_file "${PW_AUTOINSTALL_EXE}" + try_remove_file "${portwine_exe}.ppdb" + kill_portwine + pw_stop_progress_bar + export PORTWINE_CREATE_SHORTCUT_NAME="Saturn" + portwine_create_shortcut +fi +stop_portwine diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_SECRET_WORLD_LEGENDS b/data_from_portwine/scripts/pw_autoinstall/PW_SECRET_WORLD_LEGENDS index 19125d2a..bc743a71 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_SECRET_WORLD_LEGENDS +++ b/data_from_portwine/scripts/pw_autoinstall/PW_SECRET_WORLD_LEGENDS @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export WINEDLLOVERRIDES="d3d9=b" -export LAUNCH_PARAMETERS=("/VERYSILENT") +export LAUNCH_PARAMETERS="/VERYSILENT" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/SecretWorldLegendsMin.exe" export PW_PREFIX_NAME="SECRET_WORLD_LEGENDS" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_STALCRAFT b/data_from_portwine/scripts/pw_autoinstall/PW_STALCRAFT index 50426ed3..36b0c8e5 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_STALCRAFT +++ b/data_from_portwine/scripts/pw_autoinstall/PW_STALCRAFT @@ -6,7 +6,6 @@ # info_en: # info_ru: ######################################################################## -# export LAUNCH_PARAMETERS=("/S" ) export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/EXBO_Setup_ru.exe" export PW_PREFIX_NAME="DOTNET" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_STALKER_ONLINE b/data_from_portwine/scripts/pw_autoinstall/PW_STALKER_ONLINE index 294dbdba..b261e51d 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_STALKER_ONLINE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_STALKER_ONLINE @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/SO_installer.exe" start_portwine if try_download "https://update-nl-release.stalker.so/launcher/SO_installer.exe" "${PW_AUTOINSTALL_EXE}" no_mirror diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_STAR_CONFLICT b/data_from_portwine/scripts/pw_autoinstall/PW_STAR_CONFLICT index 7979cfac..cf5c055f 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_STAR_CONFLICT +++ b/data_from_portwine/scripts/pw_autoinstall/PW_STAR_CONFLICT @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="STAR_CONFLICT" -export LAUNCH_PARAMETERS=("/VERYSILENT") +export LAUNCH_PARAMETERS="/VERYSILENT" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/starconf_installer.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Star Conflict" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_STEAM b/data_from_portwine/scripts/pw_autoinstall/PW_STEAM index 9c709268..2d32dec2 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_STEAM +++ b/data_from_portwine/scripts/pw_autoinstall/PW_STEAM @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/S" "/D=c:\Program Files (x86)\Steam") +export LAUNCH_PARAMETERS="/S /D=c:\Program Files (x86)\Steam" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/SteamSetup.exe" start_portwine if try_download "https://cdn.cloudflare.steamstatic.com/client/installer/SteamSetup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_TANKI_ONLINE b/data_from_portwine/scripts/pw_autoinstall/PW_TANKI_ONLINE index 86aa8155..c9d94d13 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_TANKI_ONLINE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_TANKI_ONLINE @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="TANKI_ONLINE" -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/TankiOnlineSetup.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Tanki Online" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_THE_LORD_OF_THE_RINGS_ONLINE b/data_from_portwine/scripts/pw_autoinstall/PW_THE_LORD_OF_THE_RINGS_ONLINE index 611c59c8..a92eb2f4 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_THE_LORD_OF_THE_RINGS_ONLINE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_THE_LORD_OF_THE_RINGS_ONLINE @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="THE_LORD_OF_THE_RINGS_ONLINE" -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP- /LANG=en") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP- /LANG=en" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/lotrolive.exe" export PORTWINE_CREATE_SHORTCUT_NAME="The Lord of the Rings Online" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_THE_WORLD_NIFTY_CRAFT b/data_from_portwine/scripts/pw_autoinstall/PW_THE_WORLD_NIFTY_CRAFT index 2dd10af3..256765cd 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_THE_WORLD_NIFTY_CRAFT +++ b/data_from_portwine/scripts/pw_autoinstall/PW_THE_WORLD_NIFTY_CRAFT @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="THE_WORLD_NIFTY_CRAFT" -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/web_installer.exe" export PORTWINE_CREATE_SHORTCUT_NAME="The World of Nifty Craft" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_TOONTOWN_REWRITTEN b/data_from_portwine/scripts/pw_autoinstall/PW_TOONTOWN_REWRITTEN index 7364db3b..f94dd30f 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_TOONTOWN_REWRITTEN +++ b/data_from_portwine/scripts/pw_autoinstall/PW_TOONTOWN_REWRITTEN @@ -11,7 +11,7 @@ URL_VER=$(curl https://www.toontownrewritten.com/play \ | awk -F".exe" '{print $1}' | grep "v1" | head -n1) export PW_PREFIX_NAME="TOONTOWN_REWRITTEN" -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/TTRInstaller-$URL_VER.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Toontown Rewritten" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_TORIBASH b/data_from_portwine/scripts/pw_autoinstall/PW_TORIBASH index 7a208203..1aa84b22 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_TORIBASH +++ b/data_from_portwine/scripts/pw_autoinstall/PW_TORIBASH @@ -11,7 +11,7 @@ URL_VER=$(curl https://www.toribash.com/downloads.php \ | awk -F"-Setup.exe" '{print $1}' | grep "5" | head -n1) export PW_PREFIX_NAME="TORIBASH" -export LAUNCH_PARAMETERS=("/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-") +export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Toribash-${URL_VER}-Setup.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Toribash" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_UBISOFT b/data_from_portwine/scripts/pw_autoinstall/PW_UBISOFT index a6fadc8f..65662009 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_UBISOFT +++ b/data_from_portwine/scripts/pw_autoinstall/PW_UBISOFT @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/S" "/D=c:\Program Files (x86)\Ubisoft Game Launcher") +export LAUNCH_PARAMETERS="/S /D=c:\Program Files (x86)\Ubisoft Game Launcher" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/UbisoftConnectInstaller.exe" export PORTWINE_CREATE_SHORTCUT_NAME="Ubisoft Connect" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_VKPLAY b/data_from_portwine/scripts/pw_autoinstall/PW_VKPLAY index 042da8cd..7b3b7562 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_VKPLAY +++ b/data_from_portwine/scripts/pw_autoinstall/PW_VKPLAY @@ -6,7 +6,6 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("") export PW_PREFIX_NAME="VK_PLAY" export PW_AUTOINSTALL_EXE="${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/steamuser/AppData/Local/VKPlayLoader.exe" export WINEDLLOVERRIDES="mscoree,mshtml=" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_W3D_HUB b/data_from_portwine/scripts/pw_autoinstall/PW_W3D_HUB index 76b6ef50..4a71226f 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_W3D_HUB +++ b/data_from_portwine/scripts/pw_autoinstall/PW_W3D_HUB @@ -7,7 +7,7 @@ # info_ru: ######################################################################## export PW_PREFIX_NAME="DOTNET" -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/w3dhub_launcher_install.exe" export PORTWINE_CREATE_SHORTCUT_NAME="W3D Hub Launcher" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_WARFRAME b/data_from_portwine/scripts/pw_autoinstall/PW_WARFRAME index 49ba23a0..a340c50b 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_WARFRAME +++ b/data_from_portwine/scripts/pw_autoinstall/PW_WARFRAME @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/q") +export LAUNCH_PARAMETERS="/q" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Warframe.msi" export PORTWINE_CREATE_SHORTCUT_NAME="Warframe" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_WGC b/data_from_portwine/scripts/pw_autoinstall/PW_WGC index 43020e4b..f8d37848 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_WGC +++ b/data_from_portwine/scripts/pw_autoinstall/PW_WGC @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/VERYSILENT") +export LAUNCH_PARAMETERS="/VERYSILENT" [[ "$LANGUAGE" == "ru" ]] && export WGC_LOC=RU || export WGC_LOC=EU export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Wargaming_Game_Center_Install_WoT_${WGC_LOC}.exe" export PW_PREFIX_NAME="WGC" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_WORLD_OF_SEA_BATTLE b/data_from_portwine/scripts/pw_autoinstall/PW_WORLD_OF_SEA_BATTLE index 1ad22003..c410f4f8 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_WORLD_OF_SEA_BATTLE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_WORLD_OF_SEA_BATTLE @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_PREFIX_NAME="WORLD_OF_SEA_BATTLE" export PW_VULKAN_USE="2" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/installer.exe" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_YABAUSE b/data_from_portwine/scripts/pw_autoinstall/PW_YABAUSE index 28750960..62037819 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_YABAUSE +++ b/data_from_portwine/scripts/pw_autoinstall/PW_YABAUSE @@ -6,7 +6,7 @@ # info_en: # info_ru: ######################################################################## -export LAUNCH_PARAMETERS=("/S") +export LAUNCH_PARAMETERS="/S" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/yabause-0.9.15-win64.exe" start_portwine if try_download "https://download.tuxfamily.org/yabause/releases/0.9.15/yabause-0.9.15-win64.exe" "${PW_AUTOINSTALL_EXE}" no_mirror diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index 793eb4c0..885b00fa 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash # Author: Castro-Fidel (linux-gaming.ru) # Development assistants: Cefeiko; Dezert1r; Taz_mania; Anton_Famillianov; gavr; RidBowt; chal55rus; UserDiscord; Boria138; Vano; Akai; Htylol -# shellcheck disable=SC2140,SC2119,SC2206,SC2068 ######################################################################## export url_site="https://linux-gaming.ru/portproton/" export url_cloud="https://cloud.linux-gaming.ru/portproton" @@ -41,7 +40,8 @@ source "$PORT_SCRIPTS_PATH/functions_helper" export PW_START_PID="$$" export NO_AT_BRIDGE="1" export GDK_BACKEND="x11" -export pw_full_command_line=("$0" $*) +read -r -a pw_full_command_line <<< "$0 $*" +export pw_full_command_line export orig_IFS="$IFS" MISSING_DESKTOP_FILE="0" @@ -52,25 +52,21 @@ if [[ "${1,,}" =~ .ppack$ ]] ; then export PW_NO_RESTART_PPDB="1" export PW_DISABLED_CREATE_DB="1" portwine_exe="$1" -elif [[ -f "$1" ]] ; then - portwine_exe="$(realpath -s "$1")" -elif [[ -f "$OLDPWD/$1" ]] \ -&& [[ "${1,,}" =~ (.exe$|.bat$|.msi$|.reg$) ]] -then - portwine_exe="$(realpath -s "$OLDPWD/$1")" -elif [[ "$1" =~ (^--debug$|^--launch$|^--edit-db$) ]] \ -&& [[ -f "$2" ]] -then - portwine_exe="$(realpath -s "$2")" -elif [[ "$1" =~ (^--debug$|^--launch$|^--edit-db$) ]] \ -&& [[ -f "$OLDPWD/$2" ]] \ -&& [[ "${2,,}" =~ (.exe$|.bat$|.msi$|.reg$) ]] -then - portwine_exe="$(realpath -s "$OLDPWD/$2")" -elif [[ "${1,,}" =~ (.exe$|.bat$|.msi$|.reg$) ]] -then - portwine_exe="$1" - MISSING_DESKTOP_FILE="1" +elif [[ "${1,,}" =~ .(exe|bat|msi|reg)$ ]] ; then + if [[ -f "$1" ]] ; then + portwine_exe="$(realpath -s "$1")" + elif [[ -f "$OLDPWD/$1" ]] ; then + portwine_exe="$(realpath -s "$OLDPWD/$1")" + elif [[ ! -f "$1" ]] ; then + portwine_exe="$1" + MISSING_DESKTOP_FILE="1" + fi +elif [[ "$1" =~ ^--(debug|launch|edit-db)$ && "${2,,}" =~ .(exe|bat|msi|reg)$ ]] ; then + if [[ -f "$2" ]] ; then + portwine_exe="$(realpath -s "$2")" + elif [[ -f "$OLDPWD/$2" ]] ; then + portwine_exe="$(realpath -s "$OLDPWD/$2")" + fi fi export portwine_exe @@ -248,6 +244,18 @@ if [[ ! $PW_GUI_START =~ (PANED|NOTEBOOK) ]] ; then export PW_GUI_START="NOTEBOOK" fi +# TODO:fixes_after_update +if fixes_after_update "2372: Reset PW_WINE_DPI_VALUE in user.conf" ; then + sed -i '/export PW_WINE_DPI_VALUE=/d' "$USER_CONF" + unset PW_WINE_DPI_VALUE +fi + +# choose wine dpi default +if [[ -z $PW_WINE_DPI_VALUE ]] ; then + echo 'export PW_WINE_DPI_VALUE="recommended"' >> "$USER_CONF" + export PW_WINE_DPI_VALUE="recommended" +fi + if check_flatpak ; then if check_gamescope_session then PW_TERM="env LANG=C xterm -fullscreen -bg black -fg white -e" @@ -333,11 +341,9 @@ if [[ $(basename "${portwine_exe,,}") =~ .ppack$ ]] ; then then NO_XATTRS_NEED="-no-xattrs" else NO_XATTRS_NEED="" fi - PW_PREFIX_NAME=$(basename "${1,,}" .ppack) - PW_PREFIX_NAME="${PW_PREFIX_NAME^^}" + PW_PREFIX_NAME=$(basename "${1^^}" .PPACK) cat << EOF > "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack.sh #!/usr/bin/env bash - ${TMP_ALL_PATH} unsquashfs -f -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}" "$1" \ ${TMP_ALL_PATH} unsquashfs $NO_XATTRS_NEED -f -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}" "$1" \ || echo "ERROR" > "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack_error EOF @@ -351,7 +357,7 @@ EOF else try_remove_file "${PORT_WINE_TMP_PATH}"/pp_pfx_unpack.sh if [[ -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.create_shortcut" ]] ; then - while IFS= read -r line + while read -r line do export portwine_exe="$PORT_WINE_PATH/data/prefixes/$PW_PREFIX_NAME/$line" portwine_create_shortcut @@ -386,7 +392,7 @@ case "$1" in --debug) clear export PW_DEBUG="set -x" - /usr/bin/env bash -c ${pw_full_command_line[@]} 2>&1 | tee "$PORT_WINE_PATH/scripts-debug.log" & + /usr/bin/env bash -c "${pw_full_command_line[@]}" 2>&1 | tee "$PORT_WINE_PATH/scripts-debug.log" & exit 0 ;; --server-file-access) @@ -405,7 +411,7 @@ case "$1" in ;; --edit-db) # --edit-db /полный/путь/до/файла.exe PW_MANGOHUD=1 PW_VKBASALT=0 (и т.д) для примера - set_several_variables ${@:3} + set_several_variables "${@:3}" edit_db_from_gui $keys_all exit 0 ;; @@ -415,24 +421,19 @@ esac unset PW_ADD_PREFIXES_TO_GUI if [[ -d "${PORT_WINE_PATH}/data/prefixes/" ]] ; then - PW_PREFIX_NAME="${PW_PREFIX_NAME//[[:blank:]]/_}" for PAIG in "${PORT_WINE_PATH}"/data/prefixes/* ; do - if [[ "${PAIG//"${PORT_WINE_PATH}/data/prefixes/"/}" != "${PORTWINE_DB^^//[[:blank:]]/_}" ]] \ - && [[ "${PAIG//"${PORT_WINE_PATH}/data/prefixes/"/}" != "${PW_PREFIX_NAME}" ]] \ - && [[ "${PAIG//"${PORT_WINE_PATH}/data/prefixes/"/}" != "*" ]] + if [[ ! "${PAIG//"${PORT_WINE_PATH}/data/prefixes/"/}" =~ ^($PW_PREFIX_NAME|'*')$ ]] then PW_ADD_PREFIXES_TO_GUI="${PW_ADD_PREFIXES_TO_GUI}!${PAIG//"${PORT_WINE_PATH}/data/prefixes/"/}" fi done - PW_ADD_PREFIXES_TO_GUI="${PW_PREFIX_NAME^^}${PW_ADD_PREFIXES_TO_GUI}" + PW_ADD_PREFIXES_TO_GUI="${PW_PREFIX_NAME}${PW_ADD_PREFIXES_TO_GUI}" fi unset DIST_ADD_TO_GUI if [[ -d "${PORT_WINE_PATH}/data/dist/" ]] ; then for DAIG in "${PORT_WINE_PATH}"/data/dist/* ; do - if [[ "${DAIG//"${PORT_WINE_PATH}/data/dist/"/}" != "${PW_WINE_LG_VER}" ]] \ - && [[ "${DAIG//"${PORT_WINE_PATH}/data/dist/"/}" != "${PW_PROTON_LG_VER}" ]] \ - && [[ "${DAIG//"${PORT_WINE_PATH}/data/dist/"/}" != "*" ]] + if [[ ! "${DAIG//"${PORT_WINE_PATH}/data/dist/"/}" =~ ^($PW_WINE_LG_VER|$PW_PROTON_LG_VER|'*')$ ]] then DIST_ADD_TO_GUI="${DIST_ADD_TO_GUI}!${DAIG//"${PORT_WINE_PATH}/data/dist/"/}" fi @@ -450,7 +451,7 @@ SORT_NEWEST="${translations[Newest DXVK, VKD3D, D8VK (Vulkan v1.3+)]}" SORT_G_NINE="${translations[Gallium Nine (DirectX 9 for MESA)]}" SORT_G_ZINK="${translations[Gallium Zink (OpenGL to Vulkan)]}" -case "${PW_VULKAN_USE}" in +case "$PW_VULKAN_USE" in 0) PW_DEFAULT_VULKAN_USE="$SORT_OPENGL!$SORT_NEWEST!$SORT_STABLE!$SORT_LEGACY!$SORT_G_ZINK!$SORT_G_NINE!$SORT_VULKAN" ;; 6) PW_DEFAULT_VULKAN_USE="$SORT_VULKAN!$SORT_NEWEST!$SORT_STABLE!$SORT_LEGACY!$SORT_G_ZINK!$SORT_G_NINE!$SORT_OPENGL" ;; 1) PW_DEFAULT_VULKAN_USE="$SORT_STABLE!$SORT_NEWEST!$SORT_LEGACY!$SORT_G_ZINK!$SORT_G_NINE!$SORT_OPENGL!$SORT_VULKAN" ;; @@ -472,11 +473,11 @@ else PW_DEFAULT_WINE_USE="${PW_PROTON_LG_VER}!${PW_WINE_LG_VER}${DIST_ADD_TO_GUI}!${translations[GET-OTHER-WINE]}" fi -if [[ -z "${PORTWINE_DB_FILE}" ]] ; then +if [[ -z "$PORTWINE_DB_FILE" ]] ; then unset PW_GUI_DISABLED_CS fi -if [[ -f "${portwine_exe}" ]] ; then +if [[ -f "$portwine_exe" ]] ; then unset TAB_MAIN_MENU if [[ "$RESTART_PP_USED" == "edit_db" ]] ; then unset RESTART_PP_USED @@ -485,45 +486,45 @@ if [[ -f "${portwine_exe}" ]] ; then unset RESTART_PP_USED gui_userconf fi - if [[ "${PW_GUI_DISABLED_CS}" != 1 ]] ; then + if [[ $PW_GUI_DISABLED_CS != 1 ]] ; then pw_create_gui_png - if ! grep -il "${portwine_exe}" "$PORT_WINE_PATH"/*.desktop &>/dev/null ; then + if ! grep -il "$portwine_exe" "$PORT_WINE_PATH"/*.desktop &>/dev/null ; then PW_SHORTCUT="${translations[CREATE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Create shortcut for select file...]}:100" else PW_SHORTCUT="${translations[CHANGE SHORTCUT]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Change shortcut for select file...]}:98" fi create_name_desktop - if [[ -z "${PW_COMMENT_DB}" ]] ; then + if [[ -z $PW_COMMENT_DB ]] ; then PW_COMMENT_DB="${translations[Launching]} $(print_wrapped "$PW_NAME_DESKTOP_PROXY" "50")$(seconds_to_time "$TIME_CURRENT")" else PW_COMMENT_DB="$PW_COMMENT_DB$(seconds_to_time "$TIME_CURRENT")" fi export KEY_START="$RANDOM" - if [[ "${PW_GUI_START}" == "NOTEBOOK" ]] ; then - "${pw_yad}" --plug=$KEY_START --tabnum=1 --form --separator=";" ${START_GUI_TYPE} \ - --gui-type-box="${START_GUI_TYPE_BOX}" --gui-type-layout="${START_GUI_TYPE_LAYOUT_UP}" \ - --gui-type-text="${START_GUI_TYPE_TEXT}" --gui-type-images="${START_GUI_TYPE_IMAGE}" \ - --image="${PW_ICON_FOR_YAD}" --text-align="center" --text "$PW_COMMENT_DB" \ - --field="3D API : :CB" "${PW_DEFAULT_VULKAN_USE}" \ - --field=" WINE : :CB" "$(combobox_fix "${PW_WINE_USE}" "${PW_DEFAULT_WINE_USE}")" \ - --field="PREFIX : :CBE" "${PW_ADD_PREFIXES_TO_GUI}" \ + if [[ $PW_GUI_START == "NOTEBOOK" ]] ; then + "${pw_yad}" --plug=$KEY_START --tabnum=1 --form --separator=";" $START_GUI_TYPE \ + --gui-type-box="$START_GUI_TYPE_BOX" --gui-type-layout="$START_GUI_TYPE_LAYOUT_UP" \ + --gui-type-text="$START_GUI_TYPE_TEXT" --gui-type-images="$START_GUI_TYPE_IMAGE" \ + --image="$PW_ICON_FOR_YAD" --text-align="center" --text "$PW_COMMENT_DB" \ + --field="3D API : :CB" "$PW_DEFAULT_VULKAN_USE" \ + --field=" WINE : :CB" "$(combobox_fix "$PW_WINE_USE" "$PW_DEFAULT_WINE_USE")" \ + --field="PREFIX : :CBE" "$PW_ADD_PREFIXES_TO_GUI" \ 1> "${PW_TMPFS_PATH}/tmp_yad_form_vulkan" 2>/dev/null & - "${pw_yad}" --plug=$KEY_START --tabnum=2 --form --columns="${START_GUI_NOTEBOOK_COLUMNS}" --align-buttons --homogeneous-column \ - --gui-type-layout="${START_GUI_TYPE_LAYOUT_NOTEBOOK}" \ - --field=" ${translations[Base settings]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Edit database file for]} ${PORTWINE_DB}":"FBTN" '@bash -c "button_click --start 118"' \ - --field=" ${translations[Global settings]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Settings for user.conf]}":"FBTN" '@bash -c "button_click --start 128"' \ - --field=" ${translations[Open directory]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Open directory with .ppdb file]}":"FBTN" '@bash -c "button_click --start open_game_folder"' \ - --field=" vkBasalt"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)]}":"FBTN" '@bash -c "button_click --start 120"' \ - --field=" MangoHud"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable Mangohud by default (R_SHIFT + F12 keyboard shortcuts disable Mangohud)]}":"FBTN" '@bash -c "button_click --start 122"' \ - --field=" dgVoodoo2"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable dgVoodoo2 by default (This wrapper fixes many compatibility and rendering issues when running old games)]}":"FBTN" '@bash -c "button_click --start 124"' \ - --field=" GameScope"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable GameScope by default (Wayland micro compositor)]}":"FBTN" '@bash -c "button_click --start 126"' \ + "${pw_yad}" --plug=$KEY_START --tabnum=2 --form --columns="$START_GUI_NOTEBOOK_COLUMNS" --align-buttons --homogeneous-column \ + --gui-type-layout="$START_GUI_TYPE_LAYOUT_NOTEBOOK" \ + --field=" ${translations[Base settings]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Edit database file for]} ${PORTWINE_DB}":"FBTN" '@bash -c "button_click --start 118"' \ + --field=" ${translations[Global settings]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Settings for user.conf]}":"FBTN" '@bash -c "button_click --start 128"' \ + --field=" ${translations[Open directory]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Open directory with .ppdb file]}":"FBTN" '@bash -c "button_click --start open_game_folder"' \ + --field=" vkBasalt!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)]}":"FBTN" '@bash -c "button_click --start 120"' \ + --field=" MangoHud!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Enable Mangohud by default (R_SHIFT + F12 keyboard shortcuts disable Mangohud)]}":"FBTN" '@bash -c "button_click --start 122"' \ + --field=" dgVoodoo2!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Enable dgVoodoo2 by default (This wrapper fixes many compatibility and rendering issues when running old games)]}":"FBTN" '@bash -c "button_click --start 124"' \ + --field=" GameScope!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Enable GameScope by default (Wayland micro compositor)]}":"FBTN" '@bash -c "button_click --start 126"' \ 2>/dev/null & - if [[ "${PW_YAD_FORM_TAB}" == "1" ]] \ - && [[ -n "${TAB_START}" ]] + if [[ "$PW_YAD_FORM_TAB" == "1" ]] \ + && [[ -n "$TAB_START" ]] then export TAB_START="2" unset PW_YAD_FORM_TAB @@ -531,57 +532,57 @@ if [[ -f "${portwine_exe}" ]] ; then export TAB_START="1" fi - "${pw_yad}" --key=$KEY_START --notebook --active-tab="${TAB_START}" \ + "${pw_yad}" --key=$KEY_START --notebook --active-tab="$TAB_START" \ --gui-type="settings-notebook" \ - --width="${PW_START_SIZE_W}" --tab-pos="${PW_TAB_POSITON}" \ - --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" --expand \ + --width="$PW_START_SIZE_W" --tab-pos="$PW_TAB_POSITON" \ + --title "PortProton-$install_ver (${scripts_install_ver}${BRANCH_VERSION})" --expand \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ - --tab="${translations[GENERAL]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[SETTINGS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --button="${translations[MAIN MENU]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Main menu]}":128 \ + --tab="${translations[GENERAL]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[SETTINGS]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --button="${translations[MAIN MENU]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Main menu]}":128 \ --button="${PW_SHORTCUT}" \ - --button="${translations[DEBUG]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Launch with the creation of a .log file at the root PortProton]}":102 \ - --button="${translations[LAUNCH]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Run file ...]}":106 2>/dev/null + --button="${translations[DEBUG]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Launch with the creation of a .log file at the root PortProton]}":102 \ + --button="${translations[LAUNCH]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Run file ...]}":106 2>/dev/null PW_YAD_SET="$?" export PW_YAD_FORM_TAB="1" - elif [[ "${PW_GUI_START}" == "PANED" ]] ; then - "${pw_yad}" --plug=$KEY_START --tabnum=1 --form --separator=";" ${START_GUI_TYPE} \ - --gui-type-box="${START_GUI_TYPE_BOX}" --gui-type-layout="${START_GUI_TYPE_LAYOUT_UP}" \ - --gui-type-text="${START_GUI_TYPE_TEXT}" --gui-type-images="${START_GUI_TYPE_IMAGE}" \ - --image="${PW_ICON_FOR_YAD}" --text-align="center" --text "$PW_COMMENT_DB" \ - --field="3D API : :CB" "${PW_DEFAULT_VULKAN_USE}" \ - --field=" WINE : :CB" "$(combobox_fix "${PW_WINE_USE}" "${PW_DEFAULT_WINE_USE}")" \ - --field="PREFIX : :CBE" "${PW_ADD_PREFIXES_TO_GUI}" \ + elif [[ $PW_GUI_START == "PANED" ]] ; then + "${pw_yad}" --plug=$KEY_START --tabnum=1 --form --separator=";" $START_GUI_TYPE \ + --gui-type-box="$START_GUI_TYPE_BOX" --gui-type-layout="$START_GUI_TYPE_LAYOUT_UP" \ + --gui-type-text="$START_GUI_TYPE_TEXT" --gui-type-images="$START_GUI_TYPE_IMAGE" \ + --image="$PW_ICON_FOR_YAD" --text-align="center" --text "$PW_COMMENT_DB" \ + --field="3D API : :CB" "$PW_DEFAULT_VULKAN_USE" \ + --field=" WINE : :CB" "$(combobox_fix "$PW_WINE_USE" "$PW_DEFAULT_WINE_USE")" \ + --field="PREFIX : :CBE" "$PW_ADD_PREFIXES_TO_GUI" \ 1> "${PW_TMPFS_PATH}/tmp_yad_form_vulkan" 2>/dev/null & - "${pw_yad}" --plug=$KEY_START --tabnum=2 --form --columns="${START_GUI_PANED_COLUMNS}" \ - --gui-type-layout="${START_GUI_TYPE_LAYOUT_PANED}" \ + "${pw_yad}" --plug=$KEY_START --tabnum=2 --form --columns="$START_GUI_PANED_COLUMNS" \ + --gui-type-layout="$START_GUI_TYPE_LAYOUT_PANED" \ --align-buttons --homogeneous-row --homogeneous-column \ - --field=" ${translations[Base settings]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Edit database file for]} ${PORTWINE_DB}":"FBTN" '@bash -c "button_click --start 118"' \ - --field=" ${translations[Global settings]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Settings for user.conf]}":"FBTN" '@bash -c "button_click --start 128"' \ - --field=" ${translations[Open directory]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Open directory with .ppdb file]}":"FBTN" '@bash -c "button_click --start open_game_folder"' \ - --field=" vkBasalt"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)]}":"FBTN" '@bash -c "button_click --start 120"' \ - --field=" MangoHud"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable Mangohud by default (R_SHIFT + F12 keyboard shortcuts disable Mangohud)]}":"FBTN" '@bash -c "button_click --start 122"' \ - --field=" dgVoodoo2"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable dgVoodoo2 by default (This wrapper fixes many compatibility and rendering issues when running old games)]}":"FBTN" '@bash -c "button_click --start 124"' \ - --field=" GameScope"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Enable GameScope by default (Wayland micro compositor)]}":"FBTN" '@bash -c "button_click --start 126"' \ + --field=" ${translations[Base settings]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Edit database file for]} ${PORTWINE_DB}":"FBTN" '@bash -c "button_click --start 118"' \ + --field=" ${translations[Global settings]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Settings for user.conf]}":"FBTN" '@bash -c "button_click --start 128"' \ + --field=" ${translations[Open directory]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Open directory with .ppdb file]}":"FBTN" '@bash -c "button_click --start open_game_folder"' \ + --field=" vkBasalt!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)]}":"FBTN" '@bash -c "button_click --start 120"' \ + --field=" MangoHud!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Enable Mangohud by default (R_SHIFT + F12 keyboard shortcuts disable Mangohud)]}":"FBTN" '@bash -c "button_click --start 122"' \ + --field=" dgVoodoo2!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Enable dgVoodoo2 by default (This wrapper fixes many compatibility and rendering issues when running old games)]}":"FBTN" '@bash -c "button_click --start 124"' \ + --field=" GameScope!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Enable GameScope by default (Wayland micro compositor)]}":"FBTN" '@bash -c "button_click --start 126"' \ 2>/dev/null & "${pw_yad}" --key=$KEY_START --paned \ --gui-type="settings-paned" \ - --width="${PW_START_SIZE_W}" --tab-pos="${PW_TAB_POSITON}" \ - --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ + --width="$PW_START_SIZE_W" --tab-pos="$PW_TAB_POSITON" \ + --title "PortProton-$install_ver (${scripts_install_ver}${BRANCH_VERSION})" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ - --button="${translations[MAIN MENU]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Main menu]}":128 \ + --button="${translations[MAIN MENU]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Main menu]}":128 \ --button="${PW_SHORTCUT}" \ - --button="${translations[DEBUG]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Launch with the creation of a .log file at the root PortProton]}":102 \ - --button="${translations[LAUNCH]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"${translations[Run file ...]}":106 2>/dev/null + --button="${translations[DEBUG]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Launch with the creation of a .log file at the root PortProton]}":102 \ + --button="${translations[LAUNCH]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE.png!${translations[Run file ...]}":106 2>/dev/null PW_YAD_SET="$?" fi case "$PW_YAD_SET" in 128) [[ "$PW_GUI_START" == "NOTEBOOK" ]] && unset PW_YAD_FORM_TAB - PORTWINE_DB_FOR_UNSET=$(sed -n '/export/p' "${PORTWINE_DB_FILE}" | sed 's/\(export\|=.*\| \)//g') + PORTWINE_DB_FOR_UNSET=$(sed -n '/export/p' "$PORTWINE_DB_FILE" | sed 's/\(export\|=.*\| \)//g' | sort -u) for db_unset in $PORTWINE_DB_FOR_UNSET ; do unset "$db_unset" done @@ -612,7 +613,7 @@ else desktop_file_new="${desktop_file//"$PORT_WINE_PATH/"/}" if [[ $desktop_file_new =~ .desktop$ ]] ; then if [[ ! $desktop_file_new =~ (PortProton|readme) ]] ; then - while IFS= read -r line1 ; do + while read -r line1 ; do if [[ $line1 =~ ^Exec= ]] ; then if check_flatpak ; then PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${line1//Exec=flatpak run ru.linux_gaming.PortProton /} @@ -631,7 +632,7 @@ else PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]=${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]//Exec=env \"$PORT_SCRIPTS_PATH\/start.sh\" /} sed -i "s|Exec=env \"$PORT_SCRIPTS_PATH/start.sh\"|Exec=flatpak run ru.linux_gaming.PortProton|" "$desktop_file" fi - while IFS=" " read -r -a line2 ; do + while read -r -a line2 ; do if [[ \"${line2[0]//#@_@#/ }\" == "${PW_NAME_D_ICON["$AMOUNT_GENERATE_BUTTONS"]}" ]] ; then PW_GAME_TIME["$AMOUNT_GENERATE_BUTTONS"]=${line2[2]} break @@ -641,9 +642,9 @@ else done < "$PORT_WINE_TMP_PATH/statistics" if [[ $SORT_WITH_TIME == enabled ]] && [[ ${line2[3]} == NEW_DESKTOP ]] ; then sed -i "s/${line2[1]} ${line2[2]} NEW_DESKTOP/${line2[1]} ${line2[2]} OLD_DESKTOP/" "$PORT_WINE_TMP_PATH/statistics" - PW_AMOUNT_NEW_DESKTOP+=($AMOUNT_GENERATE_BUTTONS) + PW_AMOUNT_NEW_DESKTOP+=("$AMOUNT_GENERATE_BUTTONS") else - PW_AMOUNT_OLD_DESKTOP+=($AMOUNT_GENERATE_BUTTONS) + PW_AMOUNT_OLD_DESKTOP+=("$AMOUNT_GENERATE_BUTTONS") fi (( AMOUNT_GENERATE_BUTTONS++ )) fi @@ -702,7 +703,13 @@ else PW_GENERATE_BUTTONS+="--field= $(print_wrapped "${PW_DESKTOP_FILES_SHOW//".desktop"/""}" "25" "...")!${PW_NAME_D_ICON_48}.png!:FBTNR%@bash -c \"button_click --desktop "${PW_DESKTOP_FILES// /#@_@#}"\"%" done - MAIN_GUI_ROWS="$(( ( AMOUNT_GENERATE_BUTTONS + 1 ) / MAIN_GUI_COLUMNS + 1 ))" + if [[ $AMOUNT_GENERATE_BUTTONS == 1 ]] ; then + MAIN_GUI_ROWS=1 + elif (( AMOUNT_GENERATE_BUTTONS <= 5 )) ; then + MAIN_GUI_ROWS=2 + else + MAIN_GUI_ROWS="$(( ( AMOUNT_GENERATE_BUTTONS + 1 ) / MAIN_GUI_COLUMNS + 1 ))" + fi if [[ -z $PW_DESKTOP_FILES ]] then export PW_GUI_SORT_TABS=(1 2 3 4 5) @@ -719,38 +726,38 @@ else "${pw_yad}" --plug=$KEY_MENU --tabnum="${PW_GUI_SORT_TABS[3]}" --form --columns=3 --align-buttons --separator=";" --homogeneous-column \ --gui-type-layout="${MAIN_MENU_GUI_TYPE_LAYOUT}" \ - --field=" ${translations[Reinstall PortProton]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_pw_reinstall_pp"' \ - --field=" ${translations[Remove PortProton]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_rm_portproton"' \ - --field=" ${translations[Update PortProton]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_pw_update"' \ - --field=" ${translations[Changelog]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal open_changelog"' \ - --field=" ${translations[Change language]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal change_loc"' \ - --field=" ${translations[Global settings (user.conf)]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal 128"' \ - --field=" ${translations[Scripts from backup]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_open_scripts_from_backup"' \ - --field=" Xterm"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal pw_start_cont_xterm"' \ - --field=" ${translations[Credits]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"FBTN" '@bash -c "button_click --normal gui_credits"' \ + --field=" ${translations[Reinstall PortProton]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!":"FBTN" '@bash -c "button_click --normal gui_pw_reinstall_pp"' \ + --field=" ${translations[Remove PortProton]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!":"FBTN" '@bash -c "button_click --normal gui_rm_portproton"' \ + --field=" ${translations[Update PortProton]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!":"FBTN" '@bash -c "button_click --normal gui_pw_update"' \ + --field=" ${translations[Changelog]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!":"FBTN" '@bash -c "button_click --normal open_changelog"' \ + --field=" ${translations[Change language]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!":"FBTN" '@bash -c "button_click --normal change_loc"' \ + --field=" ${translations[Global settings (user.conf)]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!":"FBTN" '@bash -c "button_click --normal 128"' \ + --field=" ${translations[Scripts from backup]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!":"FBTN" '@bash -c "button_click --normal gui_open_scripts_from_backup"' \ + --field=" Xterm!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!":"FBTN" '@bash -c "button_click --normal pw_start_cont_xterm"' \ + --field=" ${translations[Credits]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!":"FBTN" '@bash -c "button_click --normal gui_credits"' \ 2>/dev/null & "${pw_yad}" --plug=$KEY_MENU --tabnum="${PW_GUI_SORT_TABS[2]}" --form --columns=3 --align-buttons --separator=";" \ - --gui-type-layout="${MAIN_MENU_GUI_TYPE_LAYOUT}" \ - --field=" 3D API : :CB" "${PW_DEFAULT_VULKAN_USE}" \ - --field=" PREFIX : :CBE" "${PW_ADD_PREFIXES_TO_GUI}" \ - --field=" WINE : :CB" "$(combobox_fix "${PW_WINE_USE}" "${PW_DEFAULT_WINE_USE}")" \ - --field="${translations[Create prefix backup]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"":"CFBTN" '@bash -c "button_click --normal pw_create_prefix_backup"' \ - --field=" Winetricks"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run winetricks to install additional libraries to the selected prefix]}":"FBTN" '@bash -c "button_click --normal WINETRICKS"' \ - --field=" ${translations[Clear prefix]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Clear the prefix to fix problems]}":"FBTN" '@bash -c "button_click --normal gui_clear_pfx"' \ - --field=" ${translations[Get other Wine]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Open the menu to download other versions of WINE or PROTON]}":"FBTN" '@bash -c "button_click --normal gui_proton_downloader"' \ - --field=" ${translations[Uninstaller]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run the program uninstaller built into wine]}":"FBTN" '@bash -c "button_click --normal gui_wine_uninstaller"' \ - --field=" ${translations[Prefix Manager]} "!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run winecfg to edit the settings of the selected prefix]}":"FBTN" '@bash -c "button_click --normal WINECFG"' \ - --field=" ${translations[File Manager]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run wine file manager]}":"FBTN" '@bash -c "button_click --normal WINEFILE"' \ - --field=" ${translations[Command line]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run wine cmd]}":"FBTN" '@bash -c "button_click --normal WINECMD"' \ - --field=" ${translations[Regedit]}"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png"!"${translations[Run wine regedit]}":"FBTN" '@bash -c "button_click --normal WINEREG"' 1> "${PW_TMPFS_PATH}/tmp_yad_form_vulkan" 2>/dev/null & + --gui-type-layout="$MAIN_MENU_GUI_TYPE_LAYOUT" \ + --field=" 3D API : :CB" "$PW_DEFAULT_VULKAN_USE" \ + --field=" PREFIX : :CBE" "$PW_ADD_PREFIXES_TO_GUI" \ + --field=" WINE : :CB" "$(combobox_fix "$PW_WINE_USE" "$PW_DEFAULT_WINE_USE")" \ + --field="${translations[Create prefix backup]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!":"CFBTN" '@bash -c "button_click --normal pw_create_prefix_backup"' \ + --field=" Winetricks!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!${translations[Run winetricks to install additional libraries to the selected prefix]}":"FBTN" '@bash -c "button_click --normal WINETRICKS"' \ + --field=" ${translations[Clear prefix]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!${translations[Clear the prefix to fix problems]}":"FBTN" '@bash -c "button_click --normal gui_clear_pfx"' \ + --field=" ${translations[Get other Wine]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!${translations[Open the menu to download other versions of WINE or PROTON]}":"FBTN" '@bash -c "button_click --normal gui_proton_downloader"' \ + --field=" ${translations[Uninstaller]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!${translations[Run the program uninstaller built into wine]}":"FBTN" '@bash -c "button_click --normal gui_wine_uninstaller"' \ + --field=" ${translations[Prefix Manager]} !$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!${translations[Run winecfg to edit the settings of the selected prefix]}":"FBTN" '@bash -c "button_click --normal WINECFG"' \ + --field=" ${translations[File Manager]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!${translations[Run wine file manager]}":"FBTN" '@bash -c "button_click --normal WINEFILE"' \ + --field=" ${translations[Command line]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!${translations[Run wine cmd]}":"FBTN" '@bash -c "button_click --normal WINECMD"' \ + --field=" ${translations[Regedit]}!$PW_GUI_ICON_PATH/$BUTTON_SIZE_MM.png!${translations[Run wine regedit]}":"FBTN" '@bash -c "button_click --normal WINEREG"' 1> "${PW_TMPFS_PATH}/tmp_yad_form_vulkan" 2>/dev/null & unset AI_TYPE AI_NAME AI_IMAGE AI_INFO AI_FILE_ARRAY AI_TRUE_FILE AI_FILE_UNSORTED AI_FILE_SORTED AI_FILE_ENG if [[ $AI_SKIP != 1 ]] ; then # AI_TOP_GAMES используется для сортировки автоинсталлов (работает на эмуляторы тоже) AI_AMOUNT_GAMES="0" && AI_AMOUNT_EMULS="0" && AI_AMOUNT_ARRAY="0" for ai_file in "$PORT_SCRIPTS_PATH"/pw_autoinstall/* ; do - while IFS= read -r line ; do + while read -r line ; do [[ $line =~ "##########" ]] && break [[ $line =~ "# type: " ]] && AI_TYPE["$AI_AMOUNT_ARRAY"]="${line//# type: /}" [[ $line =~ "# name: " ]] && AI_NAME["$AI_AMOUNT_ARRAY"]="${line//# name: /}" @@ -763,14 +770,14 @@ else done < "$ai_file" AI_FILE="${ai_file//"$PORT_SCRIPTS_PATH/pw_autoinstall/"/}" AI_FILE_CHECK="$AI_FILE=$AI_AMOUNT_ARRAY" - AI_FILE_ARRAY+=($AI_FILE) + AI_FILE_ARRAY+=("$AI_FILE") if [[ $AI_TOP_GAMES =~ ${AI_FILE_CHECK//=*/} ]] ; then - AI_TRUE_FILE+=($AI_FILE_CHECK) + AI_TRUE_FILE+=("$AI_FILE_CHECK") else if [[ ${AI_NAME["$AI_AMOUNT_ARRAY"]} =~ \(ENG\) ]] ; then - AI_FILE_ENG+=($AI_AMOUNT_ARRAY) + AI_FILE_ENG+=("$AI_AMOUNT_ARRAY") else - AI_FILE_UNSORTED+=($AI_AMOUNT_ARRAY) + AI_FILE_UNSORTED+=("$AI_AMOUNT_ARRAY") fi fi (( AI_AMOUNT_ARRAY++ )) @@ -778,8 +785,9 @@ else for ai_sort in $AI_TOP_GAMES ; do if [[ ${AI_TRUE_FILE[*]} =~ $ai_sort ]] ; then - AI_TRUE_FILE_NEW=(${AI_TRUE_FILE[@]//$ai_sort=/}) - AI_FILE_SORTED+=(${AI_TRUE_FILE_NEW[@]//*=*/}) + AI_TRUE_FILE_NEW=("${AI_TRUE_FILE[@]//$ai_sort=/}") + AI_TRUE_FILE_NEW=("${AI_TRUE_FILE_NEW[*]//*=*/}") + AI_FILE_SORTED+=("${AI_TRUE_FILE_NEW[*]// /}") fi done @@ -824,11 +832,11 @@ else --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ --tab-pos="bottom" \ - --tab="${translations[AUTOINSTALLS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[EMULATORS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[WINE SETTINGS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[PORTPROTON SETTINGS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[INSTALLED]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" 2>/dev/null + --tab="${translations[AUTOINSTALLS]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[EMULATORS]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[WINE SETTINGS]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[PORTPROTON SETTINGS]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[INSTALLED]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" 2>/dev/null YAD_STATUS="$?" else "${pw_yad}" --key=$KEY_MENU --notebook --expand \ @@ -837,11 +845,11 @@ else --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ --tab-pos="bottom" \ - --tab="${translations[INSTALLED]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[AUTOINSTALLS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[EMULATORS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[WINE SETTINGS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" \ - --tab="${translations[PORTPROTON SETTINGS]}"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" 2>/dev/null + --tab="${translations[INSTALLED]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[AUTOINSTALLS]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[EMULATORS]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[WINE SETTINGS]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" \ + --tab="${translations[PORTPROTON SETTINGS]}!$PW_GUI_ICON_PATH/$TAB_SIZE.png!" 2>/dev/null YAD_STATUS="$?" fi diff --git a/data_from_portwine/scripts/var b/data_from_portwine/scripts/var index b600c10c..d510766f 100755 --- a/data_from_portwine/scripts/var +++ b/data_from_portwine/scripts/var @@ -1,7 +1,7 @@ #!/usr/bin/env bash #Author: Castro-Fidel (linux-gaming.ru) -#SCRIPTS_NEXT_VERSION=2370 -#SCRIPTS_STABLE_VERSION=2360 +#SCRIPTS_NEXT_VERSION=2380 +#SCRIPTS_STABLE_VERSION=2380 ######################################################################## export AI_TOP_GAMES="PW_LGC PW_VKPLAY PW_EPIC PW_BATTLE_NET PW_WORLD_OF_SEA_BATTLE PW_RUSSIAN_FISHING PW_HO_YO_PLAY PW_FARLIGHT84 PW_WARFRAME PW_WGC PW_UBISOFT" # export PROTON_USE_XALIA="1" @@ -38,10 +38,6 @@ export PW_GPU_USE="disabled" export PW_LOCALE_SELECT="disabled" export PW_DINPUT_PROTOCOL="0" export STAGING_SHARED_MEMORY="1" -export STAGING_WRITECOPY="0" -###GTK_CONFIG### -# export GTK_DATA_PREFIX= -# export GTK_THEME="Adwaita:dark" ###DEFAULT_WINE### export PW_WINE_USE="PROTON_LG" export PW_PLUGINS_VER="_v17" @@ -49,7 +45,7 @@ export PW_FAKE_DLSS_VER="230506" export PW_FAKE_DLSS_3_VER="090" export PW_GALLIUM_NINE_VER="0.9" ###WINE_AND_PROTON_LG### -export PW_PROTON_LG_VER="PROTON_LG_9-18" +export PW_PROTON_LG_VER="PROTON_LG_9-19" export PW_WINE_LG_VER="WINE_LG_9-12-2" export PW_WINE_FULLSCREEN_FSR="1" export WINE_FULLSCREEN_FSR_MODE="ultra" @@ -58,9 +54,9 @@ export PW_VULKAN_USE="2" export VKD3D_LIMIT_TESS_FACTORS="64" export DXVK_LEGACY_VER="1.6.1" export DXVK_STABLE_VER="1.10.3-28" -export DXVK_GIT_VER="2.4.1-393" +export DXVK_GIT_VER="2.4.1-446" export VKD3D_STABLE_VER="1.1-2602" -export VKD3D_GIT_VER="1.1-4252" +export VKD3D_GIT_VER="1.1-4271" ###VKBASALT### export PW_VKBASALT_EFFECTS="Curves:cas" export PW_VKBASALT_FFX_CAS="0.50" @@ -131,6 +127,7 @@ export PW_GS_REALTIME_SCHEDULING="0" export PW_GS_BACKEND_SDL="0" export PW_GS_SDL_VIDEODRIVER_X11="0" export PW_GS_MANGOAPP="0" +export PW_GS_CURSOR_SCALE_HEIGHT="0" ###PREFIX_VERSION### export DOTPFX_VER="48v7" export DEFPFX_VER="v1"