From b81cfb2eb0e98e1a30a09e733e7d5456e511ef45 Mon Sep 17 00:00:00 2001
From: Boria138 <boriabloger@protonmail.com>
Date: Tue, 19 Dec 2023 13:57:13 +0600
Subject: [PATCH] Added "PW_RESTORE_RESOLUTION" option, delete Wayland warn

---
 data_from_portwine/scripts/functions_helper |  7 +++++-
 data_from_portwine/scripts/lang             |  8 +++----
 data_from_portwine/scripts/runlib           |  7 +++++-
 data_from_portwine/scripts/start.sh         | 26 ++++++++++++---------
 4 files changed, 30 insertions(+), 18 deletions(-)

diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper
index 7a99265e..864fa9ac 100755
--- a/data_from_portwine/scripts/functions_helper
+++ b/data_from_portwine/scripts/functions_helper
@@ -631,9 +631,14 @@ stop_portwine () {
     if [[ "$int_xneur" == "1"  ]] ; then
         xneur &
     fi
-    if [[ "$PW_USE_US_LAYOUT" == "1" ]] ; then
+    if [[ "$PW_USE_US_LAYOUT" == "1" ]] && [[ "${XDG_SESSION_TYPE}" != "wayland" ]] ; then
         setxkbmap
     fi
+    if [[ "${PW_RESTORE_RESOLUTION}" == "1" ]] && command -v xrandr &>/dev/null && [[ "${XDG_SESSION_TYPE}" != "wayland" ]] ; then
+        RESOLUTION=$(sed -n '1p' "${PORT_WINE_TMP_PATH}/tmp_screen_configuration")
+        OUTPUT_SCREEN=$(sed -n '2p' "${PORT_WINE_TMP_PATH}/tmp_screen_configuration")
+        xrandr --output "$OUTPUT_SCREEN" --mode "$RESOLUTION"
+    fi
     pw_stop_progress_bar
     try_remove_file "${PORT_SCRIPTS_PATH}/0"
     try_remove_file "${PORT_SCRIPTS_PATH}/1"
diff --git a/data_from_portwine/scripts/lang b/data_from_portwine/scripts/lang
index e17b0e19..866dd704 100755
--- a/data_from_portwine/scripts/lang
+++ b/data_from_portwine/scripts/lang
@@ -148,7 +148,8 @@ if [[ "${update_loc}" == "RUS" ]] ; then
 	export PW_USE_FAKE_DLSS_INFO='Включить транслятор DLSS в FSR 2 в играх DirectX 12'
     export PW_USE_EAC_AND_BE_INFO='Включить Easy Anti-Cheat and BattlEye Anti-Cheat (требуется если игра использует какой-то из этих античитов)'
     export PW_REDUCE_PULSE_LATENCY_INFO='Уменьшить задержку pulseaudio для исправления прерывистого звука'
-    export PW_USE_US_LAYOUT_INFO='Работает только под x11. Принудительное использование английской раскладки (полезно для игр в которых управление верно работает исключительно на английской раскладке)'
+	export PW_USE_US_LAYOUT_INFO='Принудительное использование английской раскладки (полезно для игр в которых управление верно работает исключительно на английской раскладке)'
+    export PW_RESTORE_RESOLUTION_INFO='Запомнить разрешение экрана при запуске игры и вернуть при закрытие (полезно для игр которые при закрытие меняют разрешение экрана)'
 	export PW_USE_SYSTEM_VK_LAYERS_INFO='Использовать системные mangohud, vkBasalt, obs-vkcapture и прочие приложения использующие vulkan layers'
 	export PW_USE_OBS_VKCAPTURE_INFO='Включить возможность записи в OBS Studio с помощью obs-vkcapture (ВНИМАНИЕ: будет включено принудительное использование системных mangohud, vkBasalt, obs-vkcapture и прочих приложений использующих vulkan layers)'
 	export PW_USE_GALLIUM_ZINK_INFO='Использовать драйвер zink (OpenGL поверх Vulkan), позволяет использовать vkBasalt в играх на OpenGL (ВНИМАНИЕ: необходима поддержка vulkan, используется wined3d (opengl) вместо dxvk, подходит для игр на OpenGL и старых версий DirectX, на более новых версиях DirectX возможны артефакты)'
@@ -209,8 +210,6 @@ if [[ "${update_loc}" == "RUS" ]] ; then
     export PW_StageDepth_INFO='Позволяет добавлять новые элементы в 3d-пространство внутри игры и применять пользовательские текстуры'
     export PW_PPFX_Bloom_INFO='Добавляет Bloom эффект'
 
-	export PW_WAYLAND_INFO="Внимание! Вы запускаете ${portname} в сессии Wayland, некоторые функции могут быть недоступны!\nРекомендуется перезапустить сессию в X11!"
-
 	export PW_PFX_BACKUP_INFO="Внимание! Не передавайте резевную копию третьим лицам, есть риск потери аккаунтов"
 	export PW_PFX_BACKUP_SUCCESS="Резервная копия префикса: \"${PW_PREFIX_NAME}\" успешно создана"
 	export PW_PFX_BACKUP_ERROR="Во время создания резервной копии префикса: \"${PW_PREFIX_NAME}\" произошла ошибка"
@@ -479,6 +478,7 @@ elif [[ "${update_loc}" == "ENG" ]] ; then
 	export PW_USE_EAC_AND_BE_INFO='Enable Easy Anti-Cheat and BattlEye Anti-Cheat runtimes (required if game used this anti-cheats)'
 	export PW_REDUCE_PULSE_LATENCY_INFO='Reduce pulseaudio latency to fix intermittent sound'
 	export PW_USE_US_LAYOUT_INFO='Works only x11. Forced use of the us layout (useful for games in which the control works correctly only on the us layout)'
+    export PW_RESTORE_RESOLUTION_INFO='Remember the screen resolution when starting the game and return it when closing (useful for games that change the screen resolution when closing)'
 	export PW_USE_SYSTEM_VK_LAYERS_INFO='Use system mangohud, vkBasalt, obs-vkcapture and other applications using vulkan layers'
 	export PW_USE_OBS_VKCAPTURE_INFO='Enable the ability to write to OBS Studio using obs-vkcapture (ATTENTION: the forced use of system mangohud, vkBasalt, obs-vkcapture and other applications using vulkan layers will be enabled)'
 	export PW_USE_GALLIUM_ZINK_INFO='Use the zink driver (OpenGL on top of Vulkan), allows you to use vkBasalt in OpenGL games (ATTENTION: vulkan support is required, wined3d (opengl) is used instead of dxvk, suitable for games on OpenGL and older versions of DirectX, artifacts are possible on newer versions of DirectX)'
@@ -538,8 +538,6 @@ elif [[ "${update_loc}" == "ENG" ]] ; then
     export PW_StageDepth_INFO='Allows you to add new elements to the 3d space inside the game and apply custom textures'
     export PW_PPFX_Bloom_INFO='Adds a Bloom effect'
 
-	export PW_WAYLAND_INFO="Attention! You are running $portname in a Wayland session, some features may not be available!\nRestarting your session in X11 is recommended!"
-
 	export PW_PFX_BACKUP_INFO="Attention! Do not pass the resev copy to third parties, there is a risk of losing accounts"
 	export PW_PFX_BACKUP_SUCCESS="Prefix backup: \"${PW_PREFIX_NAME}\" has been successfully created"
 	export PW_PFX_BACKUP_ERROR="An error occurred while backing up the prefix: \"${PW_PREFIX_NAME}\" error occurred"
diff --git a/data_from_portwine/scripts/runlib b/data_from_portwine/scripts/runlib
index 342bd703..27c69b65 100755
--- a/data_from_portwine/scripts/runlib
+++ b/data_from_portwine/scripts/runlib
@@ -393,7 +393,12 @@ start_portwine () {
         unset PULSE_LATENCY_MSEC
     fi
 
-    if [[ "${PW_USE_US_LAYOUT}" == "1" ]] && ! grep 1 "${PORT_WINE_TMP_PATH}/check_wayland" &>/dev/null ; then
+    if [[ "${PW_RESTORE_RESOLUTION}" == "1" ]] && command -v xrandr &>/dev/null && [[ "${XDG_SESSION_TYPE}" != "wayland" ]] ; then
+        xrandr | grep -oP 'current\s+\K[0-9]+ x [0-9]+' | tr -d ' ' > "${PORT_WINE_TMP_PATH}/tmp_screen_configuration"
+        xrandr | grep " connected" | awk '{print $1}' >> "${PORT_WINE_TMP_PATH}/tmp_screen_configuration"
+    fi
+
+    if [[ "${PW_USE_US_LAYOUT}" == "1" ]] && [[ "${XDG_SESSION_TYPE}" != "wayland" ]] ; then
         setxkbmap -model pc101 us -print | xkbcomp - $DISPLAY &>/dev/null
     else
         export PW_USE_US_LAYOUT="0"
diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh
index aebb72c1..6c3c392b 100755
--- a/data_from_portwine/scripts/start.sh
+++ b/data_from_portwine/scripts/start.sh
@@ -23,11 +23,6 @@ fi
 
 [[ "$MISSING_DESKTOP_FILE" == 1 ]] && portwine_missing_shortcut
 
-if [[ "${XDG_SESSION_TYPE}" = "wayland" ]] && [[ ! -f "${PORT_WINE_TMP_PATH}/check_wayland" ]]; then
-    zenity_info "$PW_WAYLAND_INFO"
-    echo "1" > "${PORT_WINE_TMP_PATH}/check_wayland"
-fi
-
 if [[ -z "$VULKAN_DRIVER_NAME" ]] || [[ "$VULKAN_DRIVER_NAME" == "llvmpipe" ]] ; then
 	zenity_info "Attention working version of vulkan not detected!\nIt is recommended to run games in OpenGL (low performance possible)!"
 fi
@@ -467,12 +462,21 @@ pw_create_prefix_backup () {
 }
 
 pw_edit_db () {
-    pw_gui_for_edit_db \
-    PW_MANGOHUD PW_MANGOHUD_USER_CONF ENABLE_VKBASALT PW_NO_ESYNC PW_NO_FSYNC PW_USE_RAY_TRACING \
-    PW_USE_NVAPI_AND_DLSS PW_USE_FAKE_DLSS PW_WINE_FULLSCREEN_FSR PW_HIDE_NVIDIA_GPU PW_VIRTUAL_DESKTOP PW_USE_TERMINAL \
-    PW_GUI_DISABLED_CS PW_USE_GAMEMODE PW_DX12_DISABLE PW_USE_D3D_EXTRAS PW_FIX_VIDEO_IN_GAME  \
-    PW_REDUCE_PULSE_LATENCY PW_USE_US_LAYOUT PW_USE_GSTREAMER PW_FORCE_LARGE_ADDRESS_AWARE PW_USE_SHADER_CACHE \
-    PW_USE_WINE_DXGI PW_USE_EAC_AND_BE PW_USE_SYSTEM_VK_LAYERS PW_USE_OBS_VKCAPTURE PW_USE_GALLIUM_ZINK PW_USE_GAMESCOPE
+    if [[ "${XDG_SESSION_TYPE}" = "wayland" ]] ; then
+        pw_gui_for_edit_db \
+        PW_MANGOHUD PW_MANGOHUD_USER_CONF ENABLE_VKBASALT PW_NO_ESYNC PW_NO_FSYNC PW_USE_RAY_TRACING \
+        PW_USE_NVAPI_AND_DLSS PW_USE_FAKE_DLSS PW_WINE_FULLSCREEN_FSR PW_HIDE_NVIDIA_GPU PW_VIRTUAL_DESKTOP PW_USE_TERMINAL \
+        PW_GUI_DISABLED_CS PW_USE_GAMEMODE PW_DX12_DISABLE PW_USE_D3D_EXTRAS PW_FIX_VIDEO_IN_GAME  \
+        PW_REDUCE_PULSE_LATENCY PW_USE_GSTREAMER PW_FORCE_LARGE_ADDRESS_AWARE PW_USE_SHADER_CACHE \
+        PW_USE_WINE_DXGI PW_USE_EAC_AND_BE PW_USE_SYSTEM_VK_LAYERS PW_USE_OBS_VKCAPTURE PW_USE_GALLIUM_ZINK PW_USE_GAMESCOPE
+    else
+        pw_gui_for_edit_db \
+        PW_MANGOHUD PW_MANGOHUD_USER_CONF ENABLE_VKBASALT PW_NO_ESYNC PW_NO_FSYNC PW_USE_RAY_TRACING \
+        PW_USE_NVAPI_AND_DLSS PW_USE_FAKE_DLSS PW_WINE_FULLSCREEN_FSR PW_HIDE_NVIDIA_GPU PW_VIRTUAL_DESKTOP PW_USE_TERMINAL \
+        PW_GUI_DISABLED_CS PW_USE_GAMEMODE PW_DX12_DISABLE PW_USE_D3D_EXTRAS PW_FIX_VIDEO_IN_GAME  \
+        PW_REDUCE_PULSE_LATENCY PW_USE_US_LAYOUT PW_RESTORE_RESOLUTION PW_USE_GSTREAMER PW_FORCE_LARGE_ADDRESS_AWARE PW_USE_SHADER_CACHE \
+        PW_USE_WINE_DXGI PW_USE_EAC_AND_BE PW_USE_SYSTEM_VK_LAYERS PW_USE_OBS_VKCAPTURE PW_USE_GALLIUM_ZINK PW_USE_GAMESCOPE
+    fi
     if [ "$?" == 0 ] ; then
         print_info "Restarting PP after update ppdb file..."
         /usr/bin/env bash -c ${pw_full_command_line[*]} &