diff --git a/README-RU.md b/README-RU.md index ffa53302..fcff64e4 100755 --- a/README-RU.md +++ b/README-RU.md @@ -1,6 +1,6 @@ -
+
-

PortProton

+

PortProton

GitHub License @@ -10,22 +10,24 @@ YouTube Channel Subscribers
-

+

Проект, призванный сделать запуск Windows-игр в Linux простым и удобным как для начинающих, так и для опытных пользователей.
Проект стремится сделать запуск игр (и другого программного обеспечения) максимально простым, но в то же время предоставляет гибкие настройки для опытных пользователей.

# **Язык README** + **Русский** - [English](README.md) ## Внимание + **Официальный сайт проекта** с сентября 2022 года: https://linux-gaming.ru. **Любой другой сайт - фальшивка!** ## Особенности - Основан на версии WINE от Valve (Proton) и ее модификациях (Proton GE). -Включает набор скриптов, объединенных с самим wine-proton, контейнер Steam Runtime Sniper с добавлением портированных версий MANGOHUD (вывод полезной информации в окно игры: FPS, FrameTime, CPU, GPU и т.д.) и vkBasalt (улучшение графики в играх, очень хорош в связке с FSR, DLSS) + множество уже настроенных оптимизаций для максимальной производительности. + Включает набор скриптов, объединенных с самим wine-proton, контейнер Steam Runtime Sniper с добавлением портированных версий MANGOHUD (вывод полезной информации в окно игры: FPS, FrameTime, CPU, GPU и т.д.) и vkBasalt (улучшение графики в играх, очень хорош в связке с FSR, DLSS) + множество уже настроенных оптимизаций для максимальной производительности. - Реализована автоматическая установка одним щелчком мыши (на вкладке АВТОУСТАНОВКА) популярных лаунчеров, таких как: WGC, Epic Games, Battle.net, Origin, EVE Online, RockStar, Ubisoft connect , League of Legends и многие другие. @@ -37,7 +39,7 @@ * WINE-PROTON: https://github.com/ValveSoftware/Proton -* WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/ +* WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom ## Установка с помощью пакетов @@ -55,6 +57,7 @@ exit ``` `Вариант установки с помощью eepm`: + ```sh su - @@ -66,13 +69,13 @@ exit ``` * **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x** **Deepin** : -[portproton_1.4-1_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.4-1_amd64/portproton_1.4-1_amd64.deb) + [portproton_1.7-2_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.7-2_amd64/portproton_1.7-2_amd64.deb) * **Arch Linux** и производные (Manjaro, Garuda, и т.д.) : -[AUR](https://aur.archlinux.org/packages/portproton) + [AUR](https://aur.archlinux.org/packages/portproton) -* **OpenSuse**: -[OBS](https://software.opensuse.org/download/package?package=portproton&project=home%3ABoria138%3APortProton) +* **openSUSE**: + [OBS](https://software.opensuse.org/download/package?package=portproton&project=home%3ABoria138%3APortProton) * **ROSA Linux** устанавливается с помощью этой команды: @@ -194,6 +197,7 @@ sudo eopkg it curl file bubblewrap curl icoutils tar zstd cabextract xdg-utils ``` * **Void** + ```sh sudo xbps-install -Su void-repo-multilib diff --git a/README.md b/README.md index f5034628..e1e82df9 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -
+
-

PortProton

+

PortProton

GitHub License @@ -10,40 +10,45 @@ YouTube Channel Subscribers
-

+

A project designed to make running Windows games on Linux easy and convenient for both beginners and advanced users.
The project aims to simplify the process of launching games (and other software) while also providing flexible settings for experienced users.

# **Readme Language** + **English** - [Русский](README-RU.md) ## Attention -The **official website of the project** since September 2022: https://linux-gaming.ru. **Any other site is fake!** + +The **official website of the project** since September 2022 is: https://linux-gaming.ru. **Any other site is fake!** ## Features - Based on the version of WINE from Valve (Proton) and its modifications (Proton GE). -Includes a set of scripts combined with wine-proton itself, a Steam Runtime Sniper container with the addition of ported versions of MANGOHUD (output useful information over the game window: FPS, FrameTime, CPU, GPU, etc) and vkBasalt (improvement of graphics in games, very good in in conjunction with FSR, DLSS) + many already configured optimizations for maximum performance. + Includes a set of scripts combined with wine-proton itself, a Steam Runtime Sniper container with the addition of + ported mangoHud (output useful information over the game window: FPS, frametime, CPU, GPU, etc.), + vkBasalt (improvement of graphics in games, great alongside FSR or DLSS) versions, + and many already configured optimizations for maximum performance. +- Implemented one-click auto-installation (in the AUTOINSTALL tab) of popular launchers such as WGC, Epic Games, Battle.net, Origin, EVE Online, Rockstar, Ubisoft Connect, League of Legends, and many others. -- Implemented one-click auto-installation (in the AUTOINSTALL tab ) of popular launchers such as: WGC, Epic Games, Battle.net, Origin, EVE Online, RockStar, Ubisoft connect , League of Legends and many others. +- For fans of console games, there are many console emulators to choose from (in the EMULATORS tab): PPSSPP, Citra, Cemu, ePSXe, MAME, and many others. -- For fans of console games, there are many console emulators to choose from (in the EMULATORS tab ): PPSSPP, Citra, Cemu, ePSXe, MAME and many others. - -**PLEASE DO NOT REPORT BUGS ENCOUNTERED WITH THIS AT WINEHQ OR VALVE SOFTWARE!** +**PLEASE DON'T REPORT BUGS ENCOUNTERED WITH THIS AT WINEHQ OR VALVE SOFTWARE!** ## **Wine sources used in PortWINE:** * WINE-PROTON: https://github.com/ValveSoftware/Proton -* WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/ +* WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom ## Installation using packages * **Alt Linux** (package in the official repository) is installed with the command: `apt-get`: + ```sh su - @@ -55,6 +60,7 @@ exit ``` `epm`: + ```sh su - @@ -71,14 +77,14 @@ exit sudo urpmi portproton ``` -* **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x** **Deepin** : -[portproton_1.4-1_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.4-1_amd64/portproton_1.4-1_amd64.deb) +* **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x**, and **Deepin**: + [portproton_1.7-2_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.7-2_amd64/portproton_1.7-2_amd64.deb) -* **Arch Linux** and derivatives (Manjaro, Garuda, etc.) : -[AUR](https://aur.archlinux.org/packages/portproton) +* **Arch Linux** and derivatives (Manjaro, Garuda, etc.): + [AUR](https://aur.archlinux.org/packages/portproton) -* **OpenSuse**: -[OBS](https://software.opensuse.org/download/package?package=portproton&project=home%3ABoria138%3APortProton) +* **openSUSE**: + [OBS](https://software.opensuse.org/download/package?package=portproton&project=home%3ABoria138%3APortProton) * **Fedora 38+** and **Nobara**: @@ -88,7 +94,7 @@ sudo dnf copr enable boria138/portproton sudo dnf install portproton ``` -* **FlatHub** +* **Flathub** ```sh flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo @@ -97,7 +103,7 @@ flatpak install flathub ru.linux_gaming.PortProton ## Universal (manual) installation -**ATTENTION** : with the universal method of installing PortProton, dependencies must be installed manually! +**ATTENTION**: with the universal method of installing PortProton, dependencies must be installed manually! ```sh wget -c "https://github.com/Castro-Fidel/PortProton_ALT/raw/main/portproton" && sh portproton @@ -107,7 +113,7 @@ wget -c "https://github.com/Castro-Fidel/PortProton_ALT/raw/main/portproton" && * **NVIDIA graphics card users** -If you have a video card from NVIDIA and a proprietary driver is installed, then you need to check if lib32-nvidia-utils is installed (no 32-bit game will work without it) +If you have a video card from NVIDIA and a proprietary driver is installed, then you need to check if lib32-nvidia-utils is installed (32-bit games don't work without it) * **Ubuntu / Linux Mint / Pop!_OS** @@ -196,6 +202,7 @@ sudo eopkg it curl file bubblewrap curl icoutils tar zstd cabextract xdg-utils o ``` * **Void** + ```sh sudo xbps-install -Su void-repo-multilib diff --git a/data_from_portwine/changelog_en b/data_from_portwine/changelog_en index e3683a1f..c24337b5 100755 --- a/data_from_portwine/changelog_en +++ b/data_from_portwine/changelog_en @@ -2,6 +2,29 @@ You can help us in the development of the project on the website: https://linux- ---------------------------------------- Changelog: +###Scripts version 2328### / Date: 25.07.2024 / Download update size: 4 megabytes +* updated icon for setup files (thanks to Dervart) +* fixed interface alignment for KDE +* added automatic creation of shortcuts by checking "create shortcut" in the installer itself (thanks to Boria138 and Htylol) +* settings file editor switched to yad (thanks to Htylol) + +###Scripts version 2327### / stable / Date: 25.07.2024 / Download update size: 4 megabytes +* cumulative update to the stable version of PortProton scripts + +###Scripts version 2326### / Date: 24.07.2024 / Download update size: 4 megabytes +* updated README.md (thanks Kazevic) +* user.conf editor switched to yad (thanks to Htylol) +* fixed disk mounting in dosdevice (thanks to Boria138) +* added drive S which always links to the directory with games in STEAM (for easy installing mods in games from the STEAM library) + +###Scripts version 2325### / Date: 22.07.2024 / Download update size: 4 megabytes +* updated Caliber auto-installation +* fixed Yabause icon display +* fixed adding icons when creating a shortcut to the steam library (thanks to Boria138) +* updated gamescope settings window (thanks to Htylol) +* updated language selection function (thanks to Htylol) +* fix icon creation on systems using SELinux (thanks to Boria138) + ###Scripts version 2324### / Date: 18.07.2024 / Download update size: 4 megabytes * updated Russian translation (thanks to Eljeyna) diff --git a/data_from_portwine/changelog_ru b/data_from_portwine/changelog_ru index 6ace2622..1ebc427d 100755 --- a/data_from_portwine/changelog_ru +++ b/data_from_portwine/changelog_ru @@ -2,6 +2,29 @@ ----------------------------------------- История изменений: +###Scripts version 2328### / Дата: 25.07.2024 / Размер скачиваемого обновления: 4 мегабайта +* обновлена иконка для setup файлов (спасибо Dervart) +* исправлена центровка интерфейса для KDE +* добавлено автоматическое создание ярлыков галочкой "создать ярлык" в самом установщике (спасибо Boria138 и Htylol) +* редактор файлов настроек переключен на yad (спасибо Htylol) + +###Scripts version 2327### / stable / Дата: 25.07.2024 / Размер скачиваемого обновления: 4 мегабайта +* кумулятивное обновление стабильной версии скриптов PortProton + +###Scripts version 2326### / Дата: 24.07.2024 / Размер скачиваемого обновления: 4 мегабайта +* обновлен README.md (спасибо Kazevic) +* редактор user.conf переключен на yad (спасибо Htylol) +* исправлена работа монтирования дисков в dosdevice (спасибо Boria138) +* добавлен диск S который всегда ссылается на каталог с играми в STEAM (для удобства установки русификаторов и модов в игры из библиотеки STEAM) + +###Scripts version 2325### / Дата: 22.07.2024 / Размер скачиваемого обновления: 4 мегабайта +* обновлена автоустановка Caliber +* исправлено отображение иконки Yabause +* исправлено добавление иконок при создании ярлыка в библиотеку steam (спасибо Boria138) +* обновлено окно настроек gamescope (спасибо Htylol) +* обновлена функция выбора языка (спасибо Htylol) +* исправление создания иконок в системах использующих SELinux (спасибо Boria138) + ###Scripts version 2324### / Дата: 18.07.2024 / Размер скачиваемого обновления: 4 мегабайта * доработана русская локализация (спасибо Eljeyna) diff --git a/data_from_portwine/img/gui/duplicate.svg b/data_from_portwine/img/gui/duplicate.svg new file mode 100644 index 00000000..f51eba5f --- /dev/null +++ b/data_from_portwine/img/gui/duplicate.svg @@ -0,0 +1,598 @@ + + + + diff --git a/data_from_portwine/img/setup.png b/data_from_portwine/img/setup.png new file mode 100644 index 00000000..b33afc8f Binary files /dev/null and b/data_from_portwine/img/setup.png differ diff --git a/data_from_portwine/img/yabause.png b/data_from_portwine/img/yabause.png new file mode 100644 index 00000000..b340144a Binary files /dev/null and b/data_from_portwine/img/yabause.png differ diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh index 2422275f..a5150bd5 100755 --- a/data_from_portwine/scripts/add_in_steam.sh +++ b/data_from_portwine/scripts/add_in_steam.sh @@ -3,14 +3,14 @@ # based on https://github.com/sonic2kk/steamtinkerlaunch/blob/master/steamtinkerlaunch PROGNAME="PortProton" - +name_desktop_png="${name_desktop// /_}" NOSTAPPNAME="$name_desktop" NOSTEXEPATH="\"${STEAM_SCRIPTS}/${name_desktop}.sh\"" # NOSTSTDIR="\"${PATH_TO_GAME}\"" if [[ -z "${NOSTSTDIR}" ]] ; then NOSTSTDIR="\"${STEAM_SCRIPTS}\"" fi -NOSTICONPATH="${PORT_WINE_PATH}/data/img/${name_desktop}.png" +NOSTICONPATH="${PORT_WINE_PATH}/data/img/$name_desktop_png.png" BASESTEAMGRIDDBAPI="https://www.steamgriddb.com/api/v2" ## How Non-Steam AppIDs work, because it took me almost a year to figure this out diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 044c874b..56f54279 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -40,19 +40,15 @@ fatal () { change_locale () { if [[ -f "${PORT_WINE_TMP_PATH}/PortProton_loc" ]] ; then LANGUAGE=$(<"${PORT_WINE_TMP_PATH}/PortProton_loc") - fi - - if [[ "$LANGUAGE" == "RUS" ]] ; then - LANGUAGE="ru" - echo "ru" > "${PORT_WINE_TMP_PATH}/PortProton_loc" - elif [[ "$LANGUAGE" == "ENG" ]] ; then - LANGUAGE="en" - echo "en" > "${PORT_WINE_TMP_PATH}/PortProton_loc" - fi - - if [[ ! -z "${LANGUAGE}" ]] \ - && [[ ! -f "${PORT_WINE_TMP_PATH}/PortProton_loc" ]] - then + # TODO: drop legacy check language after 01.01.2025 + if [[ "$LANGUAGE" == "RUS" ]] ; then + LANGUAGE="ru" + echo "ru" > "${PORT_WINE_TMP_PATH}/PortProton_loc" + elif [[ "$LANGUAGE" == "ENG" ]] ; then + LANGUAGE="en" + echo "en" > "${PORT_WINE_TMP_PATH}/PortProton_loc" + fi + else [[ ! -f "${pw_yad}" ]] && pw_yad="yad" SET_LANG=( "${pw_yad}" --list @@ -67,7 +63,7 @@ change_locale () { ) out=$("${SET_LANG[@]}") - [ -n "$out" ] || return + [ -n "$out" ] || fatal "Language is not set!" SET_LANG=$(echo "$out" | cut -d'|' -f2) echo "${SET_LANG}" > "${PORT_WINE_TMP_PATH}/PortProton_loc" @@ -472,7 +468,7 @@ unpack () { if [[ "$silent" != "true" ]] ; then set -o pipefail pw_start_progress_bar_cover_block "${COVERS_PATH}/unpacking_${LANGUAGE_GIF}.gif" - $command "$1" -C "$2" + $command "$1" -C "$2" 2>/dev/null pw_stop_progress_bar_cover_block [ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0 else @@ -588,7 +584,7 @@ pw_reinstall_pp () { try_remove_file "${PORT_WINE_TMP_PATH}/scripts_ver" echo print_info "Restarting PP for reinstall files..." - export SKIP_CHECK_UPDATES=0 + export SKIP_CHECK_UPDATES="0" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -998,6 +994,7 @@ stop_portwine () { if [[ ! -z "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" ]] ; then kill -s SIGUSR1 "$(pgrep -a yad_gui_pp | grep "\--notification" | awk '{print $1}')" 2>/dev/null fi + pw_auto_create_shortcut add_in_stop_portwine unset SKIP_CHECK_UPDATES exit 0 @@ -1229,6 +1226,12 @@ check_dirs_and_files_in_pfx () { [ ! -d "${WINEPREFIX}/dosdevices/z:" ] && try_force_link_dir "/" "${WINEPREFIX}/dosdevices/z:" [ ! -d "${WINEPREFIX}/dosdevices/h:" ] && try_force_link_dir "$HOME" "${WINEPREFIX}/dosdevices/h:" + if [ ! -d "${WINEPREFIX}/dosdevices/s:" ] \ + && [ -d "$HOME/.local/share/Steam/steamapps/common/" ] + then + try_force_link_dir "$HOME/.local/share/Steam/steamapps/common/" "${WINEPREFIX}/dosdevices/s:" + fi + create_new_dir "${WINEPREFIX}/drive_c/windows/Fonts/" LN_FONTS="arialbd.ttf courbd.ttf georgia.ttf micross.ttf msyh.ttf simsun.ttc arial.ttf cour.ttf malgun.ttf msgothic.ttc nirmala.ttf times.ttf" for link_font in $LN_FONTS ; do @@ -1259,25 +1262,42 @@ check_dirs_and_files_in_pfx () { then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Local" "${WINEPREFIX}/drive_c/users/steamuser/Local Settings/Application Data" fi - find "${WINEPREFIX}/dosdevices" -xtype l -maxdepth 1 2>/dev/null -exec rm {} \; + DRIVES=(d e f g i j k l m n o p q r t u v w x y) + DEF_MOUNT_DIRS=('/media' '/mnt' '/run/media') + MOUNT_DIRS=($(find "${DEF_MOUNT_DIRS[@]}" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sort -u)) + + rm -f "${WINEPREFIX}/dosdevices/com"* rm -f "${WINEPREFIX}/dosdevices/"*:: - DRIVES=(d e f g i j k l m n o p q r s t u v w x y) - DEF_MOUNT_DIRS=('/media' "/media/$USER" '/mnt' '/run/media' "/run/media/$USER") - MOUNT_DIRS=($(find "${DEF_MOUNT_DIRS[@]}" -maxdepth 1 -type d 2>/dev/null | sort -u)) + + for drive in "${DRIVES[@]}"; do + rm -f "${WINEPREFIX}/dosdevices/${drive}:" + done for drive_dir in "${MOUNT_DIRS[@]}" ; do - if [[ ! "${DEF_MOUNT_DIRS[@]}" =~ "$drive_dir" ]] \ - && ! realpath "${WINEPREFIX}/dosdevices"/*: | grep "$drive_dir" &>/dev/null ; then - drive_num=0 - while [[ "$drive_num" -lt "${#DRIVES[@]}" ]] ; do - drive_path="${WINEPREFIX}/dosdevices/${DRIVES[$drive_num]}:" - if [ ! -d "$drive_path" ] ; then - ln -sf "$drive_dir" "$drive_path" - break - else - ((drive_num++)) - fi - done + if mountpoint -q "$drive_dir" ; then + if ! realpath "${WINEPREFIX}/dosdevices"/*: | grep -w "$drive_dir$" &>/dev/null ; then + drive_num=0 + while [[ "$drive_num" -lt "${#DRIVES[@]}" ]] ; do + drive_path="${WINEPREFIX}/dosdevices/${DRIVES[$drive_num]}:" + mount_point=$(df -P "$drive_dir" | awk 'NR==2 {print $1}') + mount_name=$(lsblk -no pkname "$mount_point" 2>/dev/null) + + if [[ ! -L "$drive_path" ]] ; then + if [[ $(cat "/sys/class/block/$mount_name/removable") != "1" ]] 2>/dev/null ; then + if [[ ! $(echo "$mount_point" | grep "mmc") ]] 2>/dev/null ; then + ln -sf "$drive_dir" "$drive_path" + break + else + ((drive_num++)) + fi + else + ((drive_num++)) + fi + else + ((drive_num++)) + fi + done + fi fi done } @@ -1294,6 +1314,177 @@ check_nvidia_rtx () { return 1 } +create_shortcut_from_link () { + PORTPROTON_NAME="$link_name" + PW_RESIZE_TO=128 + + try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png" + try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" + + if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then + if command -v sestatus &>/dev/null && sestatus | grep "Current mode: *enforcing" ; then + SESTATUS="1" + else + SESTATUS="0" + fi + if command -v exe-thumbnailer &>/dev/null && [[ "${SESTATUS}" == "0" ]] ; then + exe-thumbnailer -s 128 "$(readlink -f "${exe_path}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" + else + env PYTHONPATH="${PW_PLUGINS_PATH}/portable/lib/python3.9/site-packages/" \ + LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" \ + "${PW_WINELIB}/runtime/files/bin/python3.9" \ + "${PW_PLUGINS_PATH}/portable/bin/exe-thumbnailer" -s 128 "$(readlink -f "${exe_path}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" + fi + fi + + if [[ -f "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" ]] ; then + if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" &>/dev/null ; then + create_new_dir "${PORT_WINE_PATH}/duplicate" + if [[ "$(ls -A "${PORT_WINE_PATH}/duplicate/${PORTPROTON_NAME} - ${prefix_name}"* 2>/dev/null)" ]] ; then + if ! grep -i "${exe_path}" "${PORT_WINE_PATH}/duplicate/${PORTPROTON_NAME} - ${prefix_name}"* &>/dev/null ; then + number_duplication="$(ls "${PORT_WINE_PATH}/duplicate"/ 2>/dev/null)" + number_duplication="${number_duplication//${PORTPROTON_NAME} - ${prefix_name}/}" + number_duplication="${number_duplication//].desktop/}" + number_duplication=(${number_duplication//[/}) + dup_prev="0" + for dup_num in ${number_duplication[@]} ; do + dup_num_list="$(("$dup_num" - 1))" + if [[ "$dup_num_list" != "$dup_prev" ]] ; then + dup_num_list_new+="$dup_num_list " + fi + dup_prev="$dup_num" + done + + if [[ -z "$dup_num_list_new" ]] ; then + number_duplication="${dup_prev}" + else + dup_helper="$(echo ${dup_num_list_new} | awk '{print $1}')" + for dup in ${number_duplication[@]} ; do + if (( "$dup_helper" > "$dup" )) ; then + dup_helper_new+="$dup " + fi + done + number_duplication="$(echo ${dup_helper_new} | awk '{print $NF}')" + fi + number_duplication="$(("$number_duplication" + 1))" + else + exit 0 + fi + else + number_duplication="1" + fi + PW_NAME_DESKTOP="${PORT_WINE_PATH}/duplicate/${PORTPROTON_NAME} - ${prefix_name} [$number_duplication].desktop" + SHORTCUT_DUPLICATE="true" + else + exit 0 + fi + else + PW_NAME_DESKTOP="${PORT_WINE_PATH}/${PORTPROTON_NAME}.desktop" + SHORTCUT_DUPLICATE="" + fi + + echo "[Desktop Entry]" > "${PW_NAME_DESKTOP}" + echo "Name=${PORTPROTON_NAME}" >> "${PW_NAME_DESKTOP}" + if [[ ! -z "$link_cmd" ]] ; then + if check_flatpak + then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\" \"${link_cmd}\"" >> "${PW_NAME_DESKTOP}" + else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\" \"${link_cmd}\"" >> "${PW_NAME_DESKTOP}" + fi + else + if check_flatpak + then echo "Exec=flatpak run ru.linux_gaming.PortProton \"${exe_path}\"" >> "${PW_NAME_DESKTOP}" + else echo "Exec=env \"${PORT_SCRIPTS_PATH}/start.sh\" \"${exe_path}\"" >> "${PW_NAME_DESKTOP}" + fi + fi + { + echo "Type=Application" + echo "Categories=Game" + echo "StartupNotify=true" + echo "Path=${PORT_SCRIPTS_PATH}/" + echo "Icon=${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" + } >> "${PW_NAME_DESKTOP}" + chmod u+x "${PW_NAME_DESKTOP}" + + [[ -z "${PW_SHORTCUT_DESKTOP}" ]] && PW_SHORTCUT_DESKTOP="TRUE" + + if [[ "$DESKTOP_SESSION" =~ "gnome" ]] ; then + try_remove_file "${HOME}/.local/share/applications/${PORTPROTON_NAME}.desktop" + cp -f "${PW_NAME_DESKTOP}" "${HOME}/.local/share/applications/" + else + if [[ ${PW_SHORTCUT_DESKTOP} == "TRUE" ]] ; then + if [[ -d "${HOME}/Desktop" ]] ; then + cp -f "${PW_NAME_DESKTOP}" "${HOME}/Desktop/" + elif [[ -d "${HOME}/Рабочий стол" ]] ; then + cp -f "${PW_NAME_DESKTOP}" "${HOME}/Рабочий стол/" + elif [[ $(xdg-user-dir DESKTOP) ]] ; then + cp -f "${PW_NAME_DESKTOP}" "$(xdg-user-dir DESKTOP)" + fi + fi + fi +} + +pw_auto_create_shortcut () { + [[ "${PW_CHECK_AUTOINSTALL}" == 1 ]] && return 0 + unset LINKS + orig_IFS="$IFS" && IFS=$'\n' + for link_file in "${PORT_WINE_PATH}"/prefixes/*/drive_c/users/steamuser/Desktop/*.lnk + do + if echo "$link_file" | grep "\*.lnk" &>/dev/null + then continue + else LINKS+=("$link_file") + fi + done + IFS="$orig_IFS" + [[ -z "$LINKS" ]] && return 0 + + for link_file in "${LINKS[@]}"; do + if timeout 3 exiftool "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" ; then + prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') + if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ + && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then + link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') + else + link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') + fi + link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') + link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") + else + if ! command -v exiftool &>/dev/null ; then + print_warning "use portable exiftool" + env PERL5LIB="${PW_PLUGINS_PATH}/portable/lib/perl5" "${PW_PLUGINS_PATH}/portable/bin/exiftool" "$link_file" 2>/dev/null > "${PW_TMPFS_PATH}/exiftool.tmp" + prefix_name=$(echo "$link_file" | awk -F"/prefixes/" '{print $2}' | awk -F"/" '{print $1}') + if fix_icon_name=$(grep -i "Icon File Name" "${PW_TMPFS_PATH}/exiftool.tmp" 2>/dev/null) \ + && [[ "${fix_icon_name//*.exe/true}" == "true" ]] ; then + link_drive=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(sed -n 's/^Icon File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') + else + link_drive=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | cut -d: -f1 | awk '{print tolower($0)}') + link_path=$(sed -n 's/^Local Base Path\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|%ProgramFiles(x86)%|C:\\Program Files (x86)|gi;s|%ProgramFiles%|C:\\Program Files|gi' | sed "s|^.|${PORT_WINE_PATH}/data/prefixes/$prefix_name/dosdevices/$link_drive|g" | sed 's/\\/\//g') + fi + link_name=$(sed -n 's/^File Name\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp" | sed 's|\.lnk||') + link_cmd=$(sed -n 's/^Command Line Arguments\s*:\s*//p' "${PW_TMPFS_PATH}/exiftool.tmp") + else + yad_error "exiftool - broken!" + fi + fi + + try_remove_file "$link_file" + + if ! exe_path="$(realpath "${link_path}")" ; then + print_warning "Removed broken link for: $link_name" + else + if [[ "${SHORTCUT_DUPLICATE}" == "true" ]] ; then + print_info "Created link for duplicate: $link_name - $prefix_name [$number_duplication]" + else + print_info "Created link for: $link_name" + fi + create_shortcut_from_link + fi + done +} + pw_init_db () { if [[ -f "${portwine_exe}" ]] ; then PORTWINE_DB="$(basename "${portwine_exe}" .exe)" @@ -1356,7 +1547,7 @@ pw_init_db () { else if [[ "${PW_DISABLED_CREATE_DB}" != 1 ]] ; then if [[ ! -z "${PORTWINE_DB}" ]] ; then - export PORTWINE_DB_FILE=$(grep -il "\#${PORTWINE_DB}.exe" "${PORT_SCRIPTS_PATH}/portwine_db"/*) + export PORTWINE_DB_FILE=$(grep -il "#${PORTWINE_DB}.exe" "${PORT_SCRIPTS_PATH}/portwine_db"/*) if [[ -z "${PORTWINE_DB_FILE}" ]] ; then { echo "#!/usr/bin/env bash" @@ -1463,11 +1654,13 @@ pw_port_update () { xcsd=$("${pw_yad}" --title "$(gettext "Update scripts:") v.(${scripts_install_ver}${BRANCH_VERSION})" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --form --separator='%%%' --width=1000 --height=500 \ --field=":TXT" "${CHANGLOG_NEWS}" \ - --button="$(gettext "EXIT")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":252 \ --button="$(gettext "DO NOT REMIND ME")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":16 \ --button="$(gettext "REMIND ME LATER")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":18 \ --button="$(gettext "UPDATING NOW")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":20 2>/dev/null) YAD_STATUS="$?" + + # --button="$(gettext "EXIT")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":252 \ + case "${YAD_STATUS}" in 1|252) exit 0 ;; 16) xcsd="$(gettext "DO NOT REMIND ME")" ;; @@ -1579,6 +1772,11 @@ edit_user_conf_from_gui () { } pw_create_gui_png () { + if echo "$(basename "${portwine_exe}")" | grep -i "setup\|install" &>/dev/null ; then + export PW_ICON_FOR_YAD="${PORT_WINE_PATH}/data/img/setup.png" + return 0 + fi + if [[ -z "$PORTPROTON_NAME" ]] \ || [[ "$PW_NO_RESTART_PPDB" == "1" ]] then @@ -1612,12 +1810,15 @@ pw_create_gui_png () { edit_db_from_gui PORTPROTON_NAME fi PW_RESIZE_TO="128" - try_remove_file "${PORT_WINE_PATH}/data/img/setup.png" - try_remove_file "${PORT_WINE_PATH}/data/img/Setup.png" try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png" try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then - if command -v exe-thumbnailer &>/dev/null ; then + if command -v sestatus &>/dev/null && sestatus | grep "Current mode: *enforcing" ; then + SESTATUS="1" + else + SESTATUS="0" + fi + if command -v exe-thumbnailer &>/dev/null && [[ "${SESTATUS}" == "0" ]] ; then exe-thumbnailer -s "${PW_RESIZE_TO}" "$(readlink -f "${portwine_exe}")" "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" else env PYTHONPATH="${PW_PLUGINS_PATH}/portable/lib/python3.9/site-packages/" \ @@ -1665,7 +1866,7 @@ pw_find_exe () { YAD_STATUS="$?" if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then if [[ -z "${PW_SET_FIND_EXE}" ]] ; then - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & print_info "Restarting..." fi @@ -1676,12 +1877,54 @@ pw_find_exe () { if [[ ! -z "${PW_SET_FIND_EXE}" ]] ; then portwine_exe="${PW_PATH_FOR_FIND}$(echo "${PW_SET_FIND_EXE}" | awk -F'|' '{print $1}')" portwine_create_shortcut silent - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi } +pw_duplicate () { + export USE_DUPLICATE_GUI="1" + orig_IFS="$IFS" && IFS=$'\n' + PW_DESKTOP_D="$(ls "${PORT_WINE_PATH}"/duplicate/ | grep .desktop)" + for PW_DESKTOP_FILES_D in ${PW_DESKTOP_D} ; do + PW_NAME_D_ICON_D="$(grep Icon "${PORT_WINE_PATH}/duplicate/${PW_DESKTOP_FILES_D}" | awk -F= '{print $2}')" + PW_NAME_D_ICON_48_D="${PW_NAME_D_ICON_D//".png"/"_48.png"}" + if [[ ! -f "${PW_NAME_D_ICON_48_D}" ]] \ + && [[ -f "${PW_NAME_D_ICON_D}" ]] \ + && command -v "convert" 2>/dev/null + then + convert "${PW_NAME_D_ICON_D}" -resize 48x48 "${PW_NAME_D_ICON_48_D}" + fi + PW_DESKTOP_HELPER_D="${PW_DESKTOP_FILES_D// /@_@}" + PW_GENERATE_BUTTONS_D+="--field= ${PW_DESKTOP_FILES_D//".desktop"/""}!${PW_NAME_D_ICON_48_D}!:FBTN%@bash -c \"run_desktop_b_click "${PW_DESKTOP_HELPER_D}"\"%" + done + IFS="$orig_IFS" + + old_IFS=$IFS && IFS="%" + "${pw_yad}" --width="${PW_DUPLICATE_SIZE_W}" --height="${PW_DUPLICATE_SIZE_H}" \ + --columns="$MAIN_GUI_COLUMNS" --homogeneous-column --form \ + --gui-type-layout=${MAIN_MENU_GUI_TYPE_LAYOUT} \ + --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ + --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ + --align-buttons --scroll --separator=" " ${PW_GENERATE_BUTTONS_D} \ + --button="$(gettext "MAIN MENU")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png" 2>/dev/null + IFS="$orig_IFS" + + pw_yad_set_form + case "$PW_YAD_SET" in + *.desktop) + run_desktop_b_click + ;; + pw_duplicate) + export SKIP_CHECK_UPDATES=1 + /usr/bin/env bash -c ${pw_full_command_line[*]} & + print_info "Restarting..." + exit 0 + ;; + esac +} + pw_create_unique_exe () { BASEDIR_GAME="$(dirname "$portwine_exe")" if [[ -d "$BASEDIR_GAME" ]] ; then @@ -1851,6 +2094,7 @@ start_portwine () { pw_wineboot -r fi fi + rm -f "${PORT_WINE_PATH}"/prefixes/*/drive_c/users/*/Desktop/*.lnk echo "${PW_WINE_USE}" > "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver" @@ -3176,11 +3420,14 @@ pw_start_progress_bar_install_game () { } pw_stop_progress_bar () { + sleep 0.1 for PW_KILL_YAD_PID in "$PW_YAD_PID_PROGRESS_BAR_BLOCK" "$PW_YAD_PID_PROGRESS_BAR_CS" \ "$PW_YAD_PID_PFX_COVER_UI" "$PW_YAD_PID_PROGRESS_BAR_COVER" do kill -s SIGUSR1 "$PW_KILL_YAD_PID" &>/dev/null done + unset PW_YAD_PID_PROGRESS_BAR_BLOCK PW_YAD_PID_PROGRESS_BAR_CS \ + PW_YAD_PID_PFX_COVER_UI PW_YAD_PID_PROGRESS_BAR_COVER return 0 } export -f pw_stop_progress_bar @@ -3199,10 +3446,24 @@ export -f pw_stop_progress_bar_cover_block open_changelog () { [[ "$LANGUAGE" == ru ]] && local PW_CHANGELOG_FILE="changelog_ru" || local PW_CHANGELOG_FILE="changelog_en" - "${pw_yad}" --title="$(gettext "CHANGELOG")" --no-buttons --text-align=center \ + "${pw_yad}" --title="$(gettext "CHANGELOG")" --no-buttons \ --text-info --show-uri --wrap --width=1200 --height=700 --uri-color=red \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}" &>/dev/null + YAD_STATUS="$?" + if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] && [[ -z "$WINEPREFIX" ]] ; then + export SKIP_CHECK_UPDATES="1" + if [[ -z "${PW_ALL_DF}" ]] ; then + export TAB_MAIN_MENU="4" + else + export TAB_MAIN_MENU="5" + fi + /usr/bin/env bash -c ${pw_full_command_line[*]} & + print_info "Restarting..." + exit 0 + else + exit 0 + fi } export -f open_changelog @@ -3316,7 +3577,7 @@ gui_proton_downloader () { if [[ -z "${PROTON_PW_GIT}" ]] ; then yad_error "$(gettext "Error: check wine.")" - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi @@ -3395,7 +3656,7 @@ gui_proton_downloader () { --button="$(gettext "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 - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi @@ -3410,7 +3671,7 @@ gui_proton_downloader () { && [[ -z "${VERSION_INSTALLED_WINE}" ]] then print_info "Nothing to do." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi @@ -3499,7 +3760,10 @@ gui_edit_db () { if check_wayland_session ; then rm_from_var PW_EDIT_DB_LIST "PW_USE_US_LAYOUT" + else + rm_from_var PW_EDIT_DB_LIST "PW_USE_NATIVE_WAYLAND" fi + if check_flatpak ; then rm_from_var PW_EDIT_DB_LIST "PW_USE_RUNTIME" fi @@ -3665,7 +3929,7 @@ A brief instruction: --button="$(gettext "OPEN THE SETTINGS FILE")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Open the .ppdb settings file in a system text editor to view and change variables manually")":150 \ --button="$(gettext "SAVE CHANGES")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"$(gettext "Save the current changes, and go to the previous menu")":0 2>/dev/null YAD_STATUS="$?" - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" case "$YAD_STATUS" in 1|252) @@ -3731,8 +3995,8 @@ A brief instruction: exit 0 ;; 150) - xdg-open "${PORTWINE_DB_FILE}" & - exit 0 + print_info "Restarting PP after update ppdb file..." + gui_edit_db_file ;; esac } @@ -3848,7 +4112,7 @@ fi YAD_VKBASALT_STATUS="$?" case "${YAD_VKBASALT_STATUS}" in 1|252) - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; 180) @@ -3878,7 +4142,7 @@ fi else export PW_VKBASALT_FFX_CAS="0.$YAD_CAS_SET" fi edit_db_from_gui PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS PW_VKBASALT - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -4015,14 +4279,14 @@ fi YAD_MANGOHUD_STATUS="$?" case "${YAD_MANGOHUD_STATUS}" in 1|252) - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; 182) export PW_MANGOHUD=0 edit_db_from_gui PW_MANGOHUD FPS_LIMIT - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; @@ -4096,7 +4360,7 @@ fi gui_mangohud fi - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -4214,7 +4478,7 @@ fi YAD_DGV2_STATUS="$?" case "${YAD_DGV2_STATUS}" in 1|252) - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; @@ -4222,14 +4486,14 @@ fi sed -i '/PW_DGV2/d' "$portwine_exe".ppdb export PW_DGVOODOO2=0 edit_db_from_gui PW_DGVOODOO2 - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; 164) export PW_DGVOODOO2=0 edit_db_from_gui PW_DGVOODOO2 - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; @@ -4269,7 +4533,7 @@ fi 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 - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -4376,7 +4640,7 @@ fi old_IFS=$IFS IFS="%" - "${pw_yad}" --plug=$KEY_GS_GUI --tabnum="1" --form --columns=3 --separator=" " --text-align=center --text "$GAMESCOPE_NEED_INSTALL" \ + "${pw_yad}" --plug=$KEY_GS_GUI --tabnum="1" --form --columns=4 --separator=" " --text-align=center --text "$GAMESCOPE_NEED_INSTALL" \ --gui-type-text=${GAMESCOPE_GUI_TYPE_TEXT_UP} --gui-type-layout=${GAMESCOPE_GUI_TYPE_LAYOUT_UP} $YAD_TEXT_SELECTION \ ${ADD_CHK_BOX_GS} \ 1> "${PW_TMPFS_PATH}/tmp_yad_gs_set" 2>/dev/null & @@ -4384,7 +4648,7 @@ fi GAMESCOPE_XRANDR="$(grep -e '[0-9]x' "${PW_TMPFS_PATH}/xrandr.tmp" | awk '{print $1}' | sort -rVu | grep "^[1-2]" | tr '\n' '!' | sed 's/.$//')" - "${pw_yad}" --plug=$KEY_GS_GUI --tabnum="2" --form --columns=3 --separator="%" --homogeneous-row \ + "${pw_yad}" --plug=$KEY_GS_GUI --tabnum="2" --form --columns=2 --separator="%" --homogeneous-row \ --gui-type-text=${GAMESCOPE_GUI_TYPE_TEXT_DOWN} --gui-type-layout=${GAMESCOPE_GUI_TYPE_LAYOUT_DOWN} \ --field="${CHKBOX_SPACE}$(gettext "Show resolution")!$(gettext "Set the resolution used by gamescope. Resizing the gamescope window will update these settings. Defaults to 1280x720.") :${GS_CBE}" "$(combobox_fix_disabled "${PW_GS_SHOW_RESOLUTION}" "${GAMESCOPE_XRANDR}")" \ --field="${CHKBOX_SPACE}$(gettext "Internal resolution")!$(gettext "Scale internal resolution (0.0 is unused)") :${GS_NUMN}" "${PW_GS_INTERNAL_RESOLUTION}:!0..2" \ @@ -4416,7 +4680,7 @@ relaxed - Same as fifo but allows tearing when below the monitors refresh rate." YAD_GAMESCOPE_STATUS="$?" case "${YAD_GAMESCOPE_STATUS}" in 1|252) - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; @@ -4424,14 +4688,14 @@ relaxed - Same as fifo but allows tearing when below the monitors refresh rate." sed -i '/PW_GS/d' "$portwine_exe".ppdb export PW_GAMESCOPE=0 edit_db_from_gui PW_GAMESCOPE - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; 164) export PW_GAMESCOPE=0 edit_db_from_gui PW_GAMESCOPE - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;; @@ -4471,8 +4735,7 @@ relaxed - Same as fifo but allows tearing when below the monitors refresh rate." 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 - - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -4528,13 +4791,9 @@ portwine_create_shortcut () { fi name_desktop="$(echo "${name_desktop}" | sed "s/\`//g" | sed "s/\"//g" | sed "s/'//g")" name_desktop_png="${name_desktop// /_}" - create_menu_desktop_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $2}') - create_desktop_desktop_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $3}') - create_menu_steam_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $4}') - - PW_SHORTCUT_MENU="$create_menu_desktop_shortcut" - PW_SHORTCUT_DESKTOP="$create_desktop_desktop_shortcut" - PW_SHORTCUT_STEAM="$create_menu_steam_shortcut" + 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}') edit_user_conf_from_gui PW_SHORTCUT_MENU PW_SHORTCUT_DESKTOP PW_SHORTCUT_STEAM @@ -4559,12 +4818,12 @@ portwine_create_shortcut () { } >> "${PORT_WINE_PATH}/${name_desktop}.desktop" chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" - if [[ "${create_menu_desktop_shortcut}" == "TRUE" ]] ; then + if [[ "${PW_SHORTCUT_MENU}" == "TRUE" ]] ; then try_remove_file "${HOME}/.local/share/applications/${name_desktop}.desktop" cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "${HOME}/.local/share/applications/" fi - if [[ "${create_desktop_desktop_shortcut}" == "TRUE" ]] ; then + if [[ "${PW_SHORTCUT_DESKTOP}" == "TRUE" ]] ; then if [[ -d "${HOME}/Desktop" ]] ; then cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "${HOME}/Desktop/" elif [[ -d "${HOME}/Рабочий стол" ]] ; then @@ -4574,7 +4833,7 @@ portwine_create_shortcut () { fi fi - if [[ "${create_menu_steam_shortcut}" == "TRUE" ]] ; then + if [[ "${PW_SHORTCUT_STEAM}" == "TRUE" ]] ; then export STEAM_SCRIPTS="${PORT_WINE_PATH}/steam_scripts" create_new_dir "${STEAM_SCRIPTS}" echo "#!/usr/bin/env bash" > "${STEAM_SCRIPTS}/${name_desktop}.sh" @@ -4611,7 +4870,7 @@ portwine_create_shortcut () { if [[ "$PW_NO_RESTART_PPDB" != "1" ]] ; then print_info "Restarting PP..." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi @@ -4621,6 +4880,7 @@ portwine_create_shortcut () { portwine_delete_shortcut () { rm -f "$(grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop)" &>/dev/null rm -f "$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop)" &>/dev/null + rm -f "$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}/duplicate"/*.desktop)" &>/dev/null # rm -f "$(grep -il "${portwine_exe}" "${STEAM_SCRIPTS}"/*.sh)" &>/dev/null if [[ -d "${HOME}/Desktop" ]] ; then rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" &>/dev/null @@ -5013,6 +5273,11 @@ pw_autoinstall_from_db () { } gui_credits () { + if [[ -z "${PW_ALL_DF}" ]] ; then + export TAB_MAIN_MENU="4" + else + export TAB_MAIN_MENU="5" + fi . "${PORT_SCRIPTS_PATH}/credits" } export -f gui_credits @@ -5036,18 +5301,27 @@ export -f button_click_start run_desktop_b_click () { [[ ! -z "$1" ]] && echo "$1" > "${PW_TMPFS_PATH}/tmp_yad_form" - if [[ ! -z $(pidof -s yad) ]] || [[ ! -z $(pidof -s yad_gui_pp) ]] ; then - kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY} \--notebook" | awk '{print $1}') > /dev/null 2>&1 - fi - - if check_flatpak - then PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/${PW_YAD_SET//@_@/ }" | head -n 1 | sed 's|flatpak run ru.linux_gaming.PortProton|\"${PORT_SCRIPTS_PATH}/start.sh\"|' | awk -F'=' '{print $2}')" - else PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/${PW_YAD_SET//@_@/ }" | head -n 1 | awk -F"=env " '{print $2}')" + if [[ "${USE_DUPLICATE_GUI}" == "1" ]] ; then + if [[ ! -z $(pidof -s yad) ]] || [[ ! -z $(pidof -s yad_gui_pp) ]] ; then + kill -s SIGUSR1 $(pgrep -a yad | grep "\--width="${PW_DUPLICATE_SIZE_W}" \--height="${PW_DUPLICATE_SIZE_H}"" | awk '{print $1}') > /dev/null 2>&1 + fi + if check_flatpak + then PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/duplicate/${PW_YAD_SET//@_@/ }" | head -n 1 | sed 's|flatpak run ru.linux_gaming.PortProton|\"${PORT_SCRIPTS_PATH}/start.sh\"|' | awk -F'=' '{print $2}')" + else PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/duplicate/${PW_YAD_SET//@_@/ }" | head -n 1 | awk -F"=env " '{print $2}')" + fi + else + if [[ ! -z $(pidof -s yad) ]] || [[ ! -z $(pidof -s yad_gui_pp) ]] ; then + kill -s SIGUSR1 $(pgrep -a yad | grep "\--key=${KEY} \--notebook" | awk '{print $1}') > /dev/null 2>&1 + fi + if check_flatpak + then PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/${PW_YAD_SET//@_@/ }" | head -n 1 | sed 's|flatpak run ru.linux_gaming.PortProton|\"${PORT_SCRIPTS_PATH}/start.sh\"|' | awk -F'=' '{print $2}')" + else PW_EXEC_FROM_DESKTOP="$(grep Exec "${PORT_WINE_PATH}/${PW_YAD_SET//@_@/ }" | head -n 1 | awk -F"=env " '{print $2}')" + fi fi print_info "Restarting PP after choose desktop file..." # stop_portwine - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c "${PW_EXEC_FROM_DESKTOP}" & exit 0 } @@ -5057,7 +5331,7 @@ gui_clear_pfx () { if yad_question "$(gettext "Do you want to clear prefix in PortProton?")" ; then pw_clear_pfx print_info "Restarting PP after clearing prefix..." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 fi @@ -5079,7 +5353,7 @@ export -f gui_rm_portproton gui_pw_update () { try_remove_file "${PORT_WINE_TMP_PATH}/scripts_update_notifier" print_info "Restarting PP for check update..." - export SKIP_CHECK_UPDATES=0 + export SKIP_CHECK_UPDATES="0" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -5088,7 +5362,7 @@ export -f gui_pw_update change_loc () { try_remove_file "${PORT_WINE_TMP_PATH}/PortProton_loc" print_info "Restarting PP for change language..." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -5103,7 +5377,7 @@ change_mirror () { yad_info "$(gettext "Mirror changed to:") CDN" fi print_info "Restarting PP for change mirror..." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -5138,7 +5412,7 @@ change_gui_start () { yad_info "$(gettext "Gui start changed to:") NOTEBOOK" fi print_info "Restarting PP for change gui start..." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } @@ -5151,10 +5425,64 @@ gui_wine_uninstaller () { export -f gui_wine_uninstaller gui_open_user_conf () { - xdg-open "${PORT_WINE_PATH}/data/user.conf" + PW_USERCONF_GUI="$("${pw_yad}" --title="$(gettext "EDIT USER CONFIG")" \ + --text-info --editable --width=800 --height=600 \ + --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ + --button="$(gettext "MAIN MENU")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ + --button="$(gettext "SAVE")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":2 \ + --filename="${PORT_WINE_PATH}/data/user.conf" 2>/dev/null)" + YAD_STATUS="$?" + + case "${YAD_STATUS}" in + 1|252) + export SKIP_CHECK_UPDATES="1" + if [[ -z "${PW_ALL_DF}" ]] ; then + export TAB_MAIN_MENU="4" + else + export TAB_MAIN_MENU="5" + fi + /usr/bin/env bash -c ${pw_full_command_line[*]} & + print_info "Restarting..." + exit 0 + ;; + 2) + echo "${PW_USERCONF_GUI}" > "${PORT_WINE_PATH}/data/user.conf" + export SKIP_CHECK_UPDATES="1" + if [[ -z "${PW_ALL_DF}" ]] ; then + export TAB_MAIN_MENU="4" + else + export TAB_MAIN_MENU="5" + fi + /usr/bin/env bash -c ${pw_full_command_line[*]} & + print_info "Restarting..." + exit 0 + ;; + esac } export -f gui_open_user_conf +gui_edit_db_file () { + GUI_EDIT_DB_FILE="$("${pw_yad}" --title="$(gettext "EDIT DB")" \ + --text-info --editable --width=800 --height=600 \ + --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ + --button="$(gettext "SETTINGS")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":1 \ + --button="$(gettext "SAVE")"!"$PW_GUI_ICON_PATH/$BUTTON_SIZE.png"!"":2 \ + --filename="${PORTWINE_DB_FILE}" 2>/dev/null)" + YAD_STATUS="$?" + + case "$YAD_STATUS" in + 1|252) + /usr/bin/env bash -c ${pw_full_command_line[*]} & + exit 0 + ;; + 2) + echo "${GUI_EDIT_DB_FILE}" > "${PORTWINE_DB_FILE}" + /usr/bin/env bash -c ${pw_full_command_line[*]} & + exit 0 + ;; + esac +} + gui_open_scripts_from_backup () { cd "${PORT_WINE_TMP_PATH}/scripts_backup/" || fatal PW_SCRIPT_FROM_BACKUP=$("${pw_yad}" --file --width=650 --height=500 \ @@ -5164,7 +5492,7 @@ gui_open_scripts_from_backup () { unpack "$PW_SCRIPT_FROM_BACKUP" "${PORT_WINE_PATH}/data/" echo "0" > "${PORT_WINE_TMP_PATH}/scripts_update_notifier" print_info "Restarting PP after backup..." - export SKIP_CHECK_UPDATES=1 + export SKIP_CHECK_UPDATES="1" /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 } diff --git a/data_from_portwine/scripts/portwine_db/Caliber.ppdb b/data_from_portwine/scripts/portwine_db/Caliber.ppdb index 35dc7b1b..b60d3f44 100644 --- a/data_from_portwine/scripts/portwine_db/Caliber.ppdb +++ b/data_from_portwine/scripts/portwine_db/Caliber.ppdb @@ -6,5 +6,5 @@ export PW_VULKAN_USE="2" export PW_WINE_USE="PROTON_LG" export PW_PREFIX_NAME="CALIBER" -export DISABLE_CP_DEFPFX=1 +# export DISABLE_CP_DEFPFX="1" export WINEDLLOVERRIDES="xaudio2_7=n,b" diff --git a/data_from_portwine/scripts/portwine_db/setup.ppdb b/data_from_portwine/scripts/portwine_db/setup.ppdb index 5eef0874..d16e6631 100644 --- a/data_from_portwine/scripts/portwine_db/setup.ppdb +++ b/data_from_portwine/scripts/portwine_db/setup.ppdb @@ -1,13 +1,10 @@ #!/usr/bin/env bash #Author: linux-gaming.ru #setup.exe -#Setup.exe -#SETUP.exe #.msi #Rating=5 ################################################ export PW_DISABLED_CREATE_DB=1 -export PW_ICON_FOR_YAD="${PORT_WINE_PATH}/data/img/setup.png" export PW_VULKAN_USE=1 export PW_MANGOHUD=0 export PW_NO_FSYNC=1 # Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no FUTEX_WAIT_MULTIPLE support. @@ -17,7 +14,3 @@ export PW_FORCE_LARGE_ADDRESS_AWARE=1 # Force Wine to enable the LARGE_ export PW_DLL_INSTALL="" # export WINEDLLOVERRIDES="mscoree,mshtml=" export PW_WINE_USE=WINE_LG - -add_in_stop_portwine () { - pw_find_exe news -} diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_CALIBER b/data_from_portwine/scripts/pw_autoinstall/PW_CALIBER index aa2afcf4..ab952a75 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_CALIBER +++ b/data_from_portwine/scripts/pw_autoinstall/PW_CALIBER @@ -4,12 +4,10 @@ export PW_PREFIX_NAME="CALIBER" 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 +export PW_WINE_USE="PROTON_LG" +# export DISABLE_CP_DEFPFX="1" export PORTWINE_CREATE_SHORTCUT_NAME="CALIBER" -gui_proton_downloader silent "${PW_WINE_USE}" - start_portwine if try_download "https://cdn.playcaliber.com/caliber-s3/p1/a88c3b70f76a0e56b1e08b62c9895cfe/launcher/setup/CaliberSetup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror then diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_UBC b/data_from_portwine/scripts/pw_autoinstall/PW_UBC index 0ca0c6e6..65fa3125 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_UBC +++ b/data_from_portwine/scripts/pw_autoinstall/PW_UBC @@ -3,6 +3,7 @@ ######################################################################## 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" start_portwine if try_download "https://ubistatic3-a.akamaihd.net/orbit/launcher_installer/UbisoftConnectInstaller.exe" "${PW_AUTOINSTALL_EXE}" no_mirror then diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index f92d013a..c6edb83d 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -87,7 +87,7 @@ unset CHK_SYMLINK_FILE PW_MESA_GL_VERSION_OVERRIDE PW_VKD3D_FEATURE_LEVEL PATH_T unset PW_PREFIX_NAME WINEPREFIX VULKAN_MOD PW_WINE_VER PW_ADD_TO_ARGS_IN_RUNTIME PW_GAMEMODERUN_SLR AMD_VULKAN_ICD PW_WINE_CPU_TOPOLOGY unset PW_NAME_D_NAME PW_NAME_D_ICON PW_NAME_D_EXEC PW_EXEC_FROM_DESKTOP PW_ALL_DF PW_GENERATE_BUTTONS PW_NAME_D_ICON PW_NAME_D_ICON_48 unset MANGOHUD_CONFIG FPS_LIMIT PW_WINE_USE WINEDLLPATH WINE WINEDIR WINELOADER WINESERVER PW_USE_RUNTIME PORTWINE_CREATE_SHORTCUT_NAME MIRROR -unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR +unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR USE_DUPLICATE_GUI export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" rm -f "$PORT_WINE_TMP_PATH"/*{exe,msi,tar}* @@ -172,8 +172,9 @@ then else # shellcheck source=/dev/null source "$PW_GUI_THEMES_PATH/default.pptheme" -echo 'export GUI_THEME="default"' >> "$USER_CONF" + echo 'export GUI_THEME="default"' >> "$USER_CONF" fi +[[ "$XDG_SESSION_DESKTOP" == "KDE" ]] && export YAD_OPTIONS+="--center" # choose branch if [[ -z "$BRANCH" ]] ; then @@ -551,7 +552,7 @@ 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}" --center \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" --expand \ @@ -636,14 +637,17 @@ else else PW_GUI_SORT_TABS=(2 3 4 5 1) fi PW_GENERATE_BUTTONS="--field= $(gettext "Create shortcut...")!${PW_GUI_ICON_PATH}/find_48.svg!:FBTN%@bash -c \"button_click pw_find_exe\"%" + if grep -i "[Desktop Entry]" "${PORT_WINE_PATH}/duplicate"/* &>/dev/null ; then + PW_GENERATE_BUTTONS+="--field= $(gettext "Duplicates")!${PW_GUI_ICON_PATH}/duplicate.svg!:FBTN%@bash -c \"button_click pw_duplicate\"%" + fi for PW_DESKTOP_FILES in ${PW_ALL_DF} ; do PW_NAME_D_ICON="$(grep Icon "${PORT_WINE_PATH}/${PW_DESKTOP_FILES}" | awk -F= '{print $2}')" PW_NAME_D_ICON_48="${PW_NAME_D_ICON//".png"/"_48.png"}" if [[ ! -f "${PW_NAME_D_ICON_48}" ]] \ && [[ -f "${PW_NAME_D_ICON}" ]] \ - && command -v "convert" 2>/dev/null + && command -v "convert" &>/dev/null then - convert "${PW_NAME_D_ICON}" -resize 48x48 "${PW_NAME_D_ICON_48}" + convert "${PW_NAME_D_ICON}" -resize 48x48 "${PW_NAME_D_ICON_48}" &>/dev/null fi PW_DESKTOP_HELPER="${PW_DESKTOP_FILES// /@_@}" PW_GENERATE_BUTTONS+="--field= ${PW_DESKTOP_FILES//".desktop"/""}!${PW_NAME_D_ICON_48}!:FBTN%@bash -c \"run_desktop_b_click "${PW_DESKTOP_HELPER}"\"%" @@ -749,11 +753,14 @@ else # --field=" Bethesda.net Launcher"!"$PW_GUI_ICON_PATH/bethesda.png"!"":"FBTN" '@bash -c "button_click PW_BETHESDA"' # --field=" League of Legends"!"$PW_GUI_ICON_PATH/lol.png"!"":"FBTN" '@bash -c "button_click PW_LOL"' - export START_FROM_PP_GUI=1 + export START_FROM_PP_GUI="1" + if [[ -z ${TAB_MAIN_MENU} ]] ; then + export TAB_MAIN_MENU="1" + fi if [[ -z "${PW_ALL_DF}" ]] ; then "${pw_yad}" --key=$KEY --notebook --expand \ - --gui-type="settings-notebook" \ + --gui-type="settings-notebook" --active-tab="${TAB_MAIN_MENU}" \ --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ @@ -766,7 +773,7 @@ else YAD_STATUS="$?" else "${pw_yad}" --key=$KEY --notebook --expand \ - --gui-type="settings-notebook" \ + --gui-type="settings-notebook" --active-tab="${TAB_MAIN_MENU}" \ --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \ --title "PortProton-${install_ver} (${scripts_install_ver}${BRANCH_VERSION})" \ @@ -778,11 +785,12 @@ else --tab="$(gettext "PORTPROTON SETTINGS")"!"$PW_GUI_ICON_PATH/$TAB_SIZE.png"!"" 2>/dev/null YAD_STATUS="$?" fi + unset TAB_MAIN_MENU if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi pw_yad_set_form pw_yad_form_vulkan - export PW_DISABLED_CREATE_DB=1 + export PW_DISABLED_CREATE_DB="1" fi case "${VULKAN_MOD}" in @@ -832,6 +840,7 @@ fi gui_credits) gui_credits ;; pw_start_cont_xterm) pw_start_cont_xterm ;; pw_find_exe) pw_find_exe ;; + pw_duplicate) pw_duplicate ;; PW_*) pw_autoinstall_from_db ;; *.desktop) run_desktop_b_click ;; 1|252|*) exit 0 ;; diff --git a/data_from_portwine/scripts/var b/data_from_portwine/scripts/var index adf50f3e..6f8abf78 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=2324 -#SCRIPTS_STABLE_VERSION=2320 +#SCRIPTS_NEXT_VERSION=2328 +#SCRIPTS_STABLE_VERSION=2327 ######################################################################## export LANGUAGES_LIST="ru es" export PW_VKBASALT="0" diff --git a/data_from_portwine/themes/classic.pptheme b/data_from_portwine/themes/classic.pptheme index 23caed23..93af8e2a 100755 --- a/data_from_portwine/themes/classic.pptheme +++ b/data_from_portwine/themes/classic.pptheme @@ -23,6 +23,9 @@ export TAB_SIZE=28 export PW_MAIN_SIZE_W=1100 export PW_MAIN_SIZE_H=350 +export PW_DUPLICATE_SIZE_W=1100 +export PW_DUPLICATE_SIZE_H=350 + export PW_START_SIZE_W=600 export PW_START_SIZE_H=350 export PW_TAB_POSITON=top diff --git a/data_from_portwine/themes/compact.pptheme b/data_from_portwine/themes/compact.pptheme index 8e627df3..a416c763 100755 --- a/data_from_portwine/themes/compact.pptheme +++ b/data_from_portwine/themes/compact.pptheme @@ -11,7 +11,6 @@ export YAD_OPTIONS="--css=$THEME_PATH/style.css \ --keep-icon-size \ --buttons-layout=expand \ --class=PortProton \ ---center \ --gui-type-height=2 \ --gui-type-width=2 \ " @@ -24,10 +23,13 @@ export BUTTON_SIZE=32 # 24, 28, 32, 36, 40 export TAB_SIZE=32 # 24, 28, 32, 36, 40 -export PW_MAIN_SIZE_W=1 +export PW_MAIN_SIZE_W=500 export PW_MAIN_SIZE_H=350 -export PW_START_SIZE_W=1 +export PW_DUPLICATE_SIZE_W=1000 +export PW_DUPLICATE_SIZE_H=350 + +export PW_START_SIZE_W=500 export PW_START_SIZE_H=350 export PW_TAB_POSITON=top diff --git a/data_from_portwine/themes/compact/style.css b/data_from_portwine/themes/compact/style.css index 2b14121a..1dba1966 100644 --- a/data_from_portwine/themes/compact/style.css +++ b/data_from_portwine/themes/compact/style.css @@ -1,15 +1,70 @@ /*Глобальные правила*/ -arrow {margin: 3px 5px} /*выравнивание стрелок комбобоксов*/ -separator {margin: 0px 0px 0px 0px; background-size:0px; padding-bottom: 0px} /*скрываем сепаратор*/ -check {min-height: 24px; min-width: 24px} /*увеличиваем чекбоксы*/ -cellview,entry {min-height: 26px} /*высота комбобоксов, т.к. некоторые темы их делают меньше и вёрстка съезжает*/ -switch {margin: 5px 10px 0px 10px} /*переключатели mangohud и т.д. (в дефолтных темах gtk отступы необходимы. В то время как в некоторых темах выглядит больше, чем нужно. Пример qogir)*/ + +/*выравнивание стрелок комбобоксов*/ +arrow { + margin: 3px 5px +} + +/*скрываем сепаратор*/ +separator { + margin: 0px 0px 0px 0px; + background-size: 0px; + padding-bottom: 0px +} + +/*увеличиваем чекбоксы*/ +check { + min-height: 24px; + min-width: 24px +} + +/*высота комбобоксов, т.к. некоторые темы их делают меньше и вёрстка съезжает*/ +cellview, entry { + min-height: 26px +} + +/*переключатели mangohud и т.д. (в дефолтных темах gtk отступы необходимы. В то время как в некоторых темах выглядит больше, чем нужно. Пример qogir)*/ +switch { + margin: 5px 10px 0px 10px +} + /*Правила для окон*/ -window>box>grid {padding: 5px} /*отступы в расширенных настройках*/ -window>box>box>image {padding: 0px 0px 5px 0px;} /*иконка запуска ярлыка*/ -window>box>box>box>image {margin-top: 5px} /*иконка в создании ярлыка*/ -window>box>box>grid {padding: 0px 5px 5px 0px} /*комбобоксы в запуске ярлыка*/ -window>box>label {background: @theme_selected_bg_color; color: @theme_text_color; margin:3px 0px 3px 0px; padding: 5px} /*текст запуска ярлыка*/ -window>box>box>label {background: @theme_selected_bg_color; color: @theme_text_color; margin:3px 0px 0px 0px; padding: 5px} /*текст при создании ярлыка и в настройках*/ + +/*отступы в расширенных настройках*/ +window > box > grid { + padding: 5px +} + +/*иконка запуска ярлыка*/ +window > box > box > image { + padding: 0px 0px 5px 0px; +} + +/*иконка в создании ярлыка*/ +window > box > box > box > image { + margin-top: 5px +} + +/*комбобоксы в запуске ярлыка*/ +window > box > box > grid { + padding: 0px 5px 5px 0px +} + +/*текст запуска ярлыка*/ +window > box > label { + background: @theme_selected_bg_color; + color: @theme_text_color; + margin: 3px 0px 3px 0px; + padding: 5px +} + +/*текст при создании ярлыка и в настройках*/ +window > box > box > label { + background: @theme_selected_bg_color; + color: @theme_text_color; + margin: 3px 0px 0px 0px; + padding: 5px +} + diff --git a/data_from_portwine/themes/default.pptheme b/data_from_portwine/themes/default.pptheme index 3ee636d8..b1c61c61 100755 --- a/data_from_portwine/themes/default.pptheme +++ b/data_from_portwine/themes/default.pptheme @@ -31,9 +31,13 @@ export BUTTON_SIZE=28 # 24, 28, 32, 36, 40 export TAB_SIZE=32 # 24, 28, 32, 36, 40 # размер главного меню -export PW_MAIN_SIZE_W=1 +export PW_MAIN_SIZE_W=500 export PW_MAIN_SIZE_H=330 +# размер окна для дубликатов +export PW_DUPLICATE_SIZE_W=1000 +export PW_DUPLICATE_SIZE_H=330 + # размер меню запуска и положения табов export PW_START_SIZE_W=800 export PW_START_SIZE_H=330 diff --git a/data_from_portwine/themes/default/style.css b/data_from_portwine/themes/default/style.css index e8dfad03..e93b75f0 100644 --- a/data_from_portwine/themes/default/style.css +++ b/data_from_portwine/themes/default/style.css @@ -1,12 +1,53 @@ /*Глобальные правила*/ -arrow {margin: 3px 5px} /*выравнивание стрелок комбобоксов*/ -separator {margin: 0px 0px 0px 0px; background-size:0px; padding-bottom: 0px} /*скрываем сепаратор*/ -check {min-height: 24px; min-width: 24px} /*увеличиваем чекбоксы*/ -cellview,entry {min-height: 26px} /*высота комбобоксов, т.к. некоторые темы их делают меньше и вёрстка съезжает*/ -switch {margin: 5px 10px 0px 10px} /*переключатели mangohud и т.д. (в дефолтных темах gtk отступы необходимы. В то время как в некоторых темах выглядит больше, чем нужно. Пример qogir)*/ + +/*выравнивание стрелок комбобоксов*/ +arrow { + margin: 3px 5px +} + + +/*скрываем сепаратор*/ +separator { + margin: 0px 0px 0px 0px; + background-size: 0px; + padding-bottom: 0px +} + +/*увеличиваем чекбоксы*/ +check { + min-height: 24px; + min-width: 24px +} + +/*высота комбобоксов, т.к. некоторые темы их делают меньше и вёрстка съезжает*/ +cellview, entry { + min-height: 26px +} + +/*переключатели mangohud и т.д. (в дефолтных темах gtk отступы необходимы. В то время как в некоторых темах выглядит больше, чем нужно. Пример qogir)*/ +switch { + margin: 5px 10px 0px 10px +} + /*Правила для окон*/ -window>box>grid {padding: 5px} /*отступы в расширенных настройках*/ -window>box>box>image {padding: 0px 0px 5px 0px;} /*иконка запуска ярлыка*/ -window>box>box>box>image {margin-top: 5px} /*иконка в создании ярлыка*/ -window>box>box>grid {padding: 0px 5px 5px 0px} /*комбобоксы в запуске ярлыка*/ + +/*отступы в расширенных настройках*/ +window > box > grid { + padding: 5px +} + +/*иконка запуска ярлыка*/ +window > box > box > image { + padding: 0px 0px 5px 0px; +} + +/*иконка в создании ярлыка*/ +window > box > box > box > image { + margin-top: 5px +} + +/*комбобоксы в запуске ярлыка*/ +window > box > box > grid { + padding: 0px 5px 5px 0px +}