Merge branch 'minergenon-devel'
This commit is contained in:
@@ -20,7 +20,7 @@ if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then
|
||||
CHANGELOG_FILE="/usr/share/doc/winehelper-$WH_VERSION/CHANGELOG"
|
||||
LICENSE_FILE="/usr/share/doc/winehelper-$WH_VERSION/LICENSE"
|
||||
AGREEMENT="/usr/share/doc/winehelper-$WH_VERSION/LICENSE_AGREEMENT"
|
||||
THIRD_PARTY_FILE="/usr/share/doc/winehelper-$WH_VERSION/THIRD_PARTY"
|
||||
THIRD_PARTY_FILE="/usr/share/doc/winehelper-$WH_VERSION/THIRD-PARTY"
|
||||
else
|
||||
# переменные для тестового запуска WineHelper из репозитория
|
||||
USER_WORK_PATH="$HOME/test-$SCRIPT_NAME"
|
||||
|
@@ -2112,10 +2112,17 @@ class WineHelperGUI(QMainWindow):
|
||||
self.change_wine_version_button.setToolTip("Изменение версии Wine или Proton для выбранного префикса.")
|
||||
management_layout.addWidget(self.change_wine_version_button, 3, 0, 1, 2)
|
||||
|
||||
# Добавляем небольшой отступ
|
||||
spacer_widget = QWidget()
|
||||
spacer_widget.setFixedHeight(5)
|
||||
management_layout.addWidget(spacer_widget, 4, 0, 1, 2)
|
||||
self.esync_button = QPushButton("ESync")
|
||||
self.esync_button.setCheckable(True)
|
||||
self.esync_button.setToolTip("Включить/выключить Eventfd-based synchronization.")
|
||||
self.esync_button.clicked.connect(lambda: self.update_sync_option("WINEESYNC", self.esync_button.isChecked()))
|
||||
management_layout.addWidget(self.esync_button, 4, 0)
|
||||
|
||||
self.fsync_button = QPushButton("FSync")
|
||||
self.fsync_button.setCheckable(True)
|
||||
self.fsync_button.setToolTip("Включить/выключить Futex-based synchronization.")
|
||||
self.fsync_button.clicked.connect(lambda: self.update_sync_option("WINEFSYNC", self.fsync_button.isChecked()))
|
||||
management_layout.addWidget(self.fsync_button, 4, 1)
|
||||
|
||||
self.dxvk_manage_button = QPushButton("Управление DXVK")
|
||||
self.dxvk_manage_button.setMinimumHeight(32)
|
||||
@@ -2133,14 +2140,13 @@ class WineHelperGUI(QMainWindow):
|
||||
self.prefix_info_display = QTextBrowser()
|
||||
self.prefix_info_display.setReadOnly(True)
|
||||
self.prefix_info_display.setFrameStyle(QFrame.StyledPanel)
|
||||
# Увеличиваем rowspan, чтобы учесть добавленный отступ
|
||||
# Увеличиваем rowspan, чтобы охватить все строки с кнопками
|
||||
management_layout.addWidget(self.prefix_info_display, 0, 2, 6, 1)
|
||||
|
||||
management_layout.setColumnStretch(0, 1)
|
||||
management_layout.setColumnStretch(1, 1)
|
||||
management_layout.setColumnStretch(2, 2)
|
||||
|
||||
# --- Separator and Installer ---
|
||||
separator = QFrame()
|
||||
separator.setFrameShape(QFrame.HLine)
|
||||
separator.setFrameShadow(QFrame.Sunken)
|
||||
@@ -2332,6 +2338,9 @@ class WineHelperGUI(QMainWindow):
|
||||
else:
|
||||
self.prefix_info_display.clear()
|
||||
self.prefix_install_path_edit.clear()
|
||||
# Сбрасываем состояние кнопок, когда префикс не выбран
|
||||
self.esync_button.setChecked(False)
|
||||
self.fsync_button.setChecked(False)
|
||||
|
||||
self.update_prefix_install_button_state()
|
||||
|
||||
@@ -2339,12 +2348,16 @@ class WineHelperGUI(QMainWindow):
|
||||
"""Обновляет информационный блок для созданного префикса, читая данные из last.conf."""
|
||||
if not prefix_name:
|
||||
self.prefix_info_display.clear()
|
||||
self.esync_button.setChecked(False)
|
||||
self.fsync_button.setChecked(False)
|
||||
return
|
||||
|
||||
last_conf_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name, "last.conf")
|
||||
|
||||
if not os.path.exists(last_conf_path):
|
||||
self.prefix_info_display.setHtml(f"<p>Файл конфигурации last.conf не найден для префикса '{prefix_name}'.</p>")
|
||||
self.esync_button.setChecked(False)
|
||||
self.fsync_button.setChecked(False)
|
||||
return
|
||||
|
||||
# Словарь для хранения всех переменных из файла
|
||||
@@ -2363,6 +2376,17 @@ class WineHelperGUI(QMainWindow):
|
||||
self.prefix_info_display.setHtml(f"<p>Ошибка чтения last.conf: {e}</p>")
|
||||
return
|
||||
|
||||
# --- Обновить кнопки ESync/FSync ---
|
||||
# Блокировать сигналы, чтобы предотвратить запуск метода обновления, когда мы устанавливаем состояние
|
||||
self.esync_button.blockSignals(True)
|
||||
self.fsync_button.blockSignals(True)
|
||||
|
||||
self.esync_button.setChecked(all_vars.get("WINEESYNC") == "1")
|
||||
self.fsync_button.setChecked(all_vars.get("WINEFSYNC") == "1")
|
||||
|
||||
self.esync_button.blockSignals(False)
|
||||
self.fsync_button.blockSignals(False)
|
||||
|
||||
# Карта для красивого отображения известных переменных
|
||||
display_map = {
|
||||
"WINEPREFIX": ("Путь", lambda v: v),
|
||||
@@ -2371,8 +2395,10 @@ class WineHelperGUI(QMainWindow):
|
||||
"BASE_PFX": ("Тип", lambda v: 'Чистый' if v == "none" else 'С рекомендуемыми библиотеками'),
|
||||
"DXVK_VER": ("Версия DXVK", lambda v: v if v else "Не установлено"),
|
||||
"VKD3D_VER": ("Версия VKD3D", lambda v: v if v else "Не установлено"),
|
||||
"WINEESYNC": ("ESync", lambda v: "Включен" if v == "1" else "Выключен"),
|
||||
"WINEFSYNC": ("FSync", lambda v: "Включен" if v == "1" else "Выключен"),
|
||||
}
|
||||
display_order = ["WINEPREFIX", "WINEARCH", "WH_WINE_USE", "BASE_PFX", "DXVK_VER", "VKD3D_VER"]
|
||||
display_order = ["WINEPREFIX", "WINEARCH", "WH_WINE_USE", "BASE_PFX", "DXVK_VER", "VKD3D_VER", "WINEESYNC", "WINEFSYNC"]
|
||||
|
||||
html_content = f'<p style="line-height: 1.3; font-size: 9pt;">'
|
||||
html_content += f"<b>Имя:</b> {html.escape(prefix_name)}<br>"
|
||||
@@ -3340,6 +3366,43 @@ class WineHelperGUI(QMainWindow):
|
||||
"Будет использована системная версия Wine.")
|
||||
return 'wine' # По умолчанию системный wine
|
||||
|
||||
def update_sync_option(self, var_name, is_enabled):
|
||||
"""Обновляет значение WINEESYNC или WINEFSYNC в last.conf."""
|
||||
prefix_name = self.current_managed_prefix_name
|
||||
if not prefix_name:
|
||||
return
|
||||
|
||||
last_conf_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name, "last.conf")
|
||||
if not os.path.exists(last_conf_path):
|
||||
QMessageBox.warning(self, "Ошибка", f"Файл last.conf не найден для префикса '{prefix_name}'.")
|
||||
return
|
||||
|
||||
new_value = "1" if is_enabled else "0"
|
||||
updated = False
|
||||
lines = []
|
||||
|
||||
try:
|
||||
with open(last_conf_path, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
|
||||
for i, line in enumerate(lines):
|
||||
if line.strip().startswith(f"export {var_name}="):
|
||||
lines[i] = f'export {var_name}="{new_value}"\n'
|
||||
updated = True
|
||||
break
|
||||
|
||||
if not updated:
|
||||
lines.append(f'export {var_name}="{new_value}"\n')
|
||||
|
||||
with open(last_conf_path, 'w', encoding='utf-8') as f:
|
||||
f.writelines(lines)
|
||||
|
||||
# Обновляем информационную панель, чтобы отразить изменения
|
||||
self.update_prefix_info_display(prefix_name)
|
||||
|
||||
except IOError as e:
|
||||
QMessageBox.critical(self, "Ошибка записи", f"Не удалось обновить файл last.conf:\n{e}")
|
||||
|
||||
def _run_wine_util(self, util_name, prefix_name=None):
|
||||
"""Запускает стандартную утилиту Wine для выбранного префикса."""
|
||||
if not prefix_name:
|
||||
|
Reference in New Issue
Block a user