Compare commits
1 Commits
main
...
renovate/h
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b557d477d2 |
@@ -12,7 +12,7 @@ jobs:
|
||||
name: Build AppImage
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: https://gitea.com/actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
|
||||
- uses: https://gitea.com/actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
|
||||
- name: Install required dependencies
|
||||
run: |
|
||||
@@ -73,7 +73,7 @@ jobs:
|
||||
echo '%_topdir /home/rpmbuild' > /home/rpmbuild/.rpmmacros
|
||||
|
||||
- name: Checkout repo
|
||||
uses: https://gitea.com/actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
|
||||
uses: https://gitea.com/actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
|
||||
- name: Copy fedora.spec
|
||||
run: |
|
||||
@@ -134,7 +134,7 @@ jobs:
|
||||
su user -c "yes '' | makepkg --noconfirm -s -p PKGBUILD-git"
|
||||
|
||||
- name: Checkout
|
||||
uses: https://gitea.com/actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
|
||||
uses: https://gitea.com/actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
|
||||
- name: Upload Arch package
|
||||
uses: https://gitea.com/actions/gitea-upload-artifact@v4
|
||||
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: https://gitea.com/actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
|
||||
uses: https://gitea.com/actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
|
||||
- name: Set up Python
|
||||
uses: https://gitea.com/actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
|
||||
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
fedora: ${{ steps.check.outputs.fedora }}
|
||||
arch: ${{ steps.check.outputs.arch }}
|
||||
steps:
|
||||
- uses: https://gitea.com/actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
|
||||
- uses: https://gitea.com/actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -63,7 +63,7 @@ jobs:
|
||||
needs: changes
|
||||
if: needs.changes.outputs.appimage == 'true' || github.event_name == 'workflow_dispatch'
|
||||
steps:
|
||||
- uses: https://gitea.com/actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
|
||||
- uses: https://gitea.com/actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
|
||||
- name: Install required dependencies
|
||||
run: |
|
||||
@@ -115,7 +115,7 @@ jobs:
|
||||
echo '%_topdir /home/rpmbuild' > /home/rpmbuild/.rpmmacros
|
||||
|
||||
- name: Checkout repo
|
||||
uses: https://gitea.com/actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
|
||||
uses: https://gitea.com/actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
|
||||
- name: Copy fedora-git.spec
|
||||
run: |
|
||||
@@ -178,7 +178,7 @@ jobs:
|
||||
su user -c "yes '' | makepkg --noconfirm -s -p PKGBUILD-git"
|
||||
|
||||
- name: Checkout
|
||||
uses: https://gitea.com/actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
|
||||
uses: https://gitea.com/actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
|
||||
- name: Upload Arch package
|
||||
uses: https://gitea.com/actions/gitea-upload-artifact@v4
|
||||
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
name: Check code
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: https://gitea.com/actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
|
||||
- uses: https://gitea.com/actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: https://gitea.com/actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: https://gitea.com/actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
|
||||
uses: https://gitea.com/actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
|
||||
- name: Set up Python
|
||||
uses: https://gitea.com/actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
|
||||
|
||||
@@ -10,7 +10,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
container: ghcr.io/renovatebot/renovate:latest@sha256:17c8966ef38fc361e108a550ffe2dcedf73e846f9975a974aea3d48c66b107a6
|
||||
steps:
|
||||
- uses: https://gitea.com/actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
|
||||
- uses: https://gitea.com/actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: https://gitea.com/actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
|
||||
|
||||
@@ -20,33 +20,3 @@ Stop Game
|
||||
Fullscreen
|
||||
Fulscreen
|
||||
\t
|
||||
Горячая
|
||||
vkbasalt
|
||||
dgVoodoo2
|
||||
Zink
|
||||
Vulkan
|
||||
VKD3D
|
||||
DirectX12
|
||||
Prev Dir
|
||||
Forced
|
||||
GOverlay
|
||||
Glide
|
||||
all
|
||||
futex
|
||||
DLSS
|
||||
fullscreen
|
||||
ProtonGE
|
||||
window
|
||||
compositing
|
||||
Zink
|
||||
Use
|
||||
bundled
|
||||
dxvk
|
||||
older games
|
||||
versions
|
||||
DLL Overrides
|
||||
COMP
|
||||
VKD3D
|
||||
Select needed
|
||||
CPUs
|
||||
cores
|
||||
|
||||
@@ -21,9 +21,9 @@ Current translation status:
|
||||
|
||||
| Locale | Progress | Translated |
|
||||
| :----- | -------: | ---------: |
|
||||
| [de_DE](./de_DE/LC_MESSAGES/messages.po) | 0% | 0 of 339 |
|
||||
| [es_ES](./es_ES/LC_MESSAGES/messages.po) | 0% | 0 of 339 |
|
||||
| [ru_RU](./ru_RU/LC_MESSAGES/messages.po) | 100% | 339 of 339 |
|
||||
| [de_DE](./de_DE/LC_MESSAGES/messages.po) | 0% | 0 of 323 |
|
||||
| [es_ES](./es_ES/LC_MESSAGES/messages.po) | 0% | 0 of 323 |
|
||||
| [ru_RU](./ru_RU/LC_MESSAGES/messages.po) | 100% | 323 of 323 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
|
||||
| Локаль | Прогресс | Переведено |
|
||||
| :----- | -------: | ---------: |
|
||||
| [de_DE](./de_DE/LC_MESSAGES/messages.po) | 0% | 0 из 339 |
|
||||
| [es_ES](./es_ES/LC_MESSAGES/messages.po) | 0% | 0 из 339 |
|
||||
| [ru_RU](./ru_RU/LC_MESSAGES/messages.po) | 100% | 339 из 339 |
|
||||
| [de_DE](./de_DE/LC_MESSAGES/messages.po) | 0% | 0 из 323 |
|
||||
| [es_ES](./es_ES/LC_MESSAGES/messages.po) | 0% | 0 из 323 |
|
||||
| [ru_RU](./ru_RU/LC_MESSAGES/messages.po) | 100% | 323 из 323 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -572,11 +572,29 @@ class InputManager(QObject):
|
||||
return
|
||||
|
||||
try:
|
||||
# Handle common UI elements like QMessageBox, QMenu, etc.
|
||||
if self._handle_common_ui_elements(button_code):
|
||||
return
|
||||
# 1. Check active Popups (QMessageBox, QMenu)
|
||||
popup = QApplication.activePopupWidget()
|
||||
if popup:
|
||||
if isinstance(popup, QMessageBox):
|
||||
if button_code in (BUTTONS['confirm'] | BUTTONS['back']):
|
||||
popup.accept()
|
||||
return
|
||||
elif isinstance(popup, QMenu):
|
||||
if button_code in BUTTONS['confirm']:
|
||||
if popup.activeAction():
|
||||
popup.activeAction().trigger()
|
||||
elif button_code in BUTTONS['back']:
|
||||
popup.close()
|
||||
return
|
||||
|
||||
# Winetricks-specific button handling
|
||||
# 2. Check Top-Level Message Boxes
|
||||
for widget in QApplication.topLevelWidgets():
|
||||
if isinstance(widget, QMessageBox) and widget.isVisible():
|
||||
if button_code in (BUTTONS['confirm'] | BUTTONS['back']):
|
||||
widget.accept()
|
||||
return
|
||||
|
||||
# 3. Main Logic
|
||||
focused = QApplication.focusWidget()
|
||||
|
||||
if button_code in BUTTONS['confirm']: # A: Toggle checkbox
|
||||
@@ -724,7 +742,7 @@ class InputManager(QObject):
|
||||
logger.error(f"Error restoring gamepad handlers from Settings: {e}")
|
||||
|
||||
def handle_settings_button(self, button_code, value):
|
||||
if self.settings_dialog is None:
|
||||
if self.settings_dialog is None or value == 0:
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -732,123 +750,112 @@ class InputManager(QObject):
|
||||
kb = getattr(self.settings_dialog, 'keyboard', None)
|
||||
if kb and kb.isVisible():
|
||||
if button_code in BUTTONS['back']:
|
||||
if value != 0: # Only handle press, not release
|
||||
kb.hide()
|
||||
if kb.current_input_widget:
|
||||
kb.current_input_widget.setFocus()
|
||||
return # Return early to avoid dialog closing logic
|
||||
kb.hide()
|
||||
if kb.current_input_widget:
|
||||
kb.current_input_widget.setFocus()
|
||||
elif button_code in (BUTTONS['confirm'] | BUTTONS['context_menu']):
|
||||
if value != 0: # Only handle press, not release
|
||||
kb.activateFocusedKey()
|
||||
return
|
||||
kb.activateFocusedKey()
|
||||
elif button_code in BUTTONS['prev_tab']:
|
||||
if value != 0: # Only handle press, not release
|
||||
kb.on_lang_click()
|
||||
return
|
||||
kb.on_lang_click()
|
||||
elif button_code in BUTTONS['next_tab']:
|
||||
if value != 0: # Only handle press, not release
|
||||
kb.on_shift_click(not kb.shift_pressed)
|
||||
return
|
||||
kb.on_shift_click(not kb.shift_pressed)
|
||||
elif button_code in BUTTONS['add_game']:
|
||||
if value != 0: # Press event
|
||||
kb.on_backspace_pressed()
|
||||
else: # Release event
|
||||
kb.stop_backspace_repeat()
|
||||
return
|
||||
|
||||
# Handle common UI elements like QMessageBox, QMenu, etc.
|
||||
if self._handle_common_ui_elements(button_code):
|
||||
kb.on_backspace_pressed()
|
||||
return
|
||||
|
||||
# Handle other QDialogs
|
||||
if value != 0: # Only handle press events, not releases
|
||||
popup = QApplication.activePopupWidget()
|
||||
if isinstance(popup, QDialog):
|
||||
if button_code in BUTTONS['confirm']:
|
||||
# 2. Popup Handling
|
||||
popup = QApplication.activePopupWidget()
|
||||
if popup:
|
||||
if isinstance(popup, (QMessageBox, QDialog)):
|
||||
if button_code in (BUTTONS['confirm'] | BUTTONS['back']):
|
||||
popup.accept()
|
||||
return
|
||||
if isinstance(popup, QMenu):
|
||||
if button_code in BUTTONS['confirm'] and popup.activeAction():
|
||||
popup.activeAction().trigger()
|
||||
elif button_code in BUTTONS['back']:
|
||||
popup.reject()
|
||||
popup.close()
|
||||
return
|
||||
|
||||
# 3. Advanced Tab Combo Box Logic
|
||||
table = self._get_current_settings_table()
|
||||
open_combo = None
|
||||
if table and table == self.settings_dialog.advanced_table:
|
||||
for r in range(table.rowCount()):
|
||||
w = table.cellWidget(r, 1)
|
||||
if isinstance(w, QComboBox) and w.view().isVisible():
|
||||
open_combo = w
|
||||
break
|
||||
# 3. Advanced Tab Combo Box Logic
|
||||
table = self._get_current_settings_table()
|
||||
open_combo = None
|
||||
if table and table == self.settings_dialog.advanced_table:
|
||||
for r in range(table.rowCount()):
|
||||
w = table.cellWidget(r, 1)
|
||||
if isinstance(w, QComboBox) and w.view().isVisible():
|
||||
open_combo = w
|
||||
break
|
||||
|
||||
# B Button - Close combo or dialog
|
||||
if button_code in BUTTONS['back']:
|
||||
if open_combo:
|
||||
open_combo.hidePopup()
|
||||
if table:
|
||||
table.setFocus()
|
||||
else:
|
||||
self.settings_dialog.reject()
|
||||
# B Button - Close combo or dialog
|
||||
if button_code in BUTTONS['back']:
|
||||
if open_combo:
|
||||
open_combo.hidePopup()
|
||||
if table:
|
||||
table.setFocus()
|
||||
else:
|
||||
self.settings_dialog.reject()
|
||||
return
|
||||
|
||||
# A Button - Confirm
|
||||
if button_code in BUTTONS['confirm']:
|
||||
if open_combo:
|
||||
view = open_combo.view()
|
||||
if view.currentIndex().isValid():
|
||||
open_combo.setCurrentIndex(view.currentIndex().row())
|
||||
open_combo.hidePopup()
|
||||
if table:
|
||||
table.setFocus()
|
||||
return
|
||||
|
||||
# A Button - Confirm
|
||||
if button_code in BUTTONS['confirm']:
|
||||
if open_combo:
|
||||
view = open_combo.view()
|
||||
if view.currentIndex().isValid():
|
||||
open_combo.setCurrentIndex(view.currentIndex().row())
|
||||
open_combo.hidePopup()
|
||||
if table:
|
||||
table.setFocus()
|
||||
# Standard interaction
|
||||
focused = QApplication.focusWidget()
|
||||
if isinstance(focused, QTableWidget) and table and focused.currentRow() >= 0:
|
||||
row = focused.currentRow()
|
||||
cell = focused.cellWidget(row, 1)
|
||||
|
||||
# Main settings (checkboxes)
|
||||
if self.settings_dialog and table == self.settings_dialog.settings_table:
|
||||
item = focused.item(row, 1)
|
||||
if item and (item.flags() & Qt.ItemFlag.ItemIsUserCheckable):
|
||||
new_state = Qt.CheckState.Checked if item.checkState() == Qt.CheckState.Unchecked else Qt.CheckState.Unchecked
|
||||
item.setCheckState(new_state)
|
||||
return
|
||||
|
||||
# Standard interaction
|
||||
focused = QApplication.focusWidget()
|
||||
if isinstance(focused, QTableWidget) and table and focused.currentRow() >= 0:
|
||||
row = focused.currentRow()
|
||||
cell = focused.cellWidget(row, 1)
|
||||
# Advanced settings
|
||||
if isinstance(cell, QComboBox) and cell.isEnabled():
|
||||
cell.showPopup()
|
||||
cell.setFocus()
|
||||
return
|
||||
if isinstance(cell, QLineEdit):
|
||||
cell.setFocus()
|
||||
self.settings_dialog.show_virtual_keyboard(cell)
|
||||
return
|
||||
|
||||
# Main settings (checkboxes)
|
||||
if self.settings_dialog and table == self.settings_dialog.settings_table:
|
||||
item = focused.item(row, 1)
|
||||
if item and (item.flags() & Qt.ItemFlag.ItemIsUserCheckable):
|
||||
new_state = Qt.CheckState.Checked if item.checkState() == Qt.CheckState.Unchecked else Qt.CheckState.Unchecked
|
||||
item.setCheckState(new_state)
|
||||
return
|
||||
if isinstance(focused, QLineEdit):
|
||||
self.settings_dialog.show_virtual_keyboard(focused)
|
||||
return
|
||||
|
||||
# Advanced settings
|
||||
if isinstance(cell, QComboBox) and cell.isEnabled():
|
||||
cell.showPopup()
|
||||
cell.setFocus()
|
||||
return
|
||||
if isinstance(cell, QLineEdit):
|
||||
cell.setFocus()
|
||||
self.settings_dialog.show_virtual_keyboard(cell)
|
||||
return
|
||||
# 4. Global Shortcuts
|
||||
if button_code in BUTTONS['add_game']: # X: Apply
|
||||
self.settings_dialog.apply_changes()
|
||||
|
||||
if isinstance(focused, QLineEdit):
|
||||
self.settings_dialog.show_virtual_keyboard(focused)
|
||||
return
|
||||
elif button_code in BUTTONS['prev_dir']: # Y: Search + Keyboard
|
||||
self.settings_dialog.search_edit.setFocus()
|
||||
self.settings_dialog.show_virtual_keyboard(self.settings_dialog.search_edit)
|
||||
|
||||
# 4. Global Shortcuts
|
||||
if button_code in BUTTONS['add_game']: # X: Apply
|
||||
self.settings_dialog.apply_changes()
|
||||
elif button_code in BUTTONS['prev_tab']: # LB
|
||||
idx = max(0, self.settings_dialog.tab_widget.currentIndex() - 1)
|
||||
self.settings_dialog.tab_widget.setCurrentIndex(idx)
|
||||
self._focus_first_row_in_current_settings_table()
|
||||
|
||||
elif button_code in BUTTONS['prev_dir']: # Y: Search + Keyboard
|
||||
self.settings_dialog.search_edit.setFocus()
|
||||
self.settings_dialog.show_virtual_keyboard(self.settings_dialog.search_edit)
|
||||
elif button_code in BUTTONS['next_tab']: # RB
|
||||
idx = min(self.settings_dialog.tab_widget.count() - 1, self.settings_dialog.tab_widget.currentIndex() + 1)
|
||||
self.settings_dialog.tab_widget.setCurrentIndex(idx)
|
||||
self._focus_first_row_in_current_settings_table()
|
||||
|
||||
elif button_code in BUTTONS['prev_tab']: # LB
|
||||
idx = max(0, self.settings_dialog.tab_widget.currentIndex() - 1)
|
||||
self.settings_dialog.tab_widget.setCurrentIndex(idx)
|
||||
self._focus_first_row_in_current_settings_table()
|
||||
|
||||
elif button_code in BUTTONS['next_tab']: # RB
|
||||
idx = min(self.settings_dialog.tab_widget.count() - 1, self.settings_dialog.tab_widget.currentIndex() + 1)
|
||||
self.settings_dialog.tab_widget.setCurrentIndex(idx)
|
||||
self._focus_first_row_in_current_settings_table()
|
||||
|
||||
else:
|
||||
self._parent.activateFocusedWidget()
|
||||
else:
|
||||
self._parent.activateFocusedWidget()
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error in handle_settings_button: {e}")
|
||||
@@ -1236,8 +1243,26 @@ class InputManager(QObject):
|
||||
self._parent.openSystemOverlay()
|
||||
return
|
||||
|
||||
# Handle common UI elements like QMenu and QMessageBox
|
||||
if self._handle_common_ui_elements(button_code):
|
||||
# Handle QMenu (context menu)
|
||||
if isinstance(popup, QMenu):
|
||||
if button_code in BUTTONS['confirm']:
|
||||
if popup.activeAction():
|
||||
popup.activeAction().trigger()
|
||||
popup.close()
|
||||
return
|
||||
elif button_code in BUTTONS['back']:
|
||||
popup.close()
|
||||
return
|
||||
return
|
||||
|
||||
# Handle QMessageBox
|
||||
if isinstance(active, QMessageBox):
|
||||
if button_code in BUTTONS['confirm']:
|
||||
active.accept() # Close QMessageBox with the default button
|
||||
return
|
||||
elif button_code in BUTTONS['back']:
|
||||
active.reject() # Close QMessageBox on back button
|
||||
return
|
||||
return
|
||||
|
||||
# Handle QComboBox
|
||||
@@ -1438,40 +1463,21 @@ class InputManager(QObject):
|
||||
if not app or not active:
|
||||
return
|
||||
|
||||
# Handle QMessageBox navigation with D-pad (for multiple buttons)
|
||||
if isinstance(active, QMessageBox) and not isinstance(focused, QTableWidget):
|
||||
if not focused or not active.focusWidget():
|
||||
# If no widget is focused, focus the first focusable widget
|
||||
focusables = active.findChildren(QWidget, options=Qt.FindChildOption.FindChildrenRecursively)
|
||||
focusables = [w for w in focusables if w.focusPolicy() & Qt.FocusPolicy.StrongFocus]
|
||||
if focusables:
|
||||
focusables[0].setFocus(Qt.FocusReason.OtherFocusReason)
|
||||
return
|
||||
if code == ecodes.ABS_HAT0X and value != 0: # Horizontal navigation
|
||||
# Handle SystemOverlay, AddGameDialog, or QMessageBox navigation with D-pad
|
||||
if isinstance(active, QDialog) and code == ecodes.ABS_HAT0X and value != 0:
|
||||
if isinstance(active, QMessageBox): # Specific handling for QMessageBox
|
||||
if not focused or not active.focusWidget():
|
||||
# If no widget is focused, focus the first focusable widget
|
||||
focusables = active.findChildren(QWidget, options=Qt.FindChildOption.FindChildrenRecursively)
|
||||
focusables = [w for w in focusables if w.focusPolicy() & Qt.FocusPolicy.StrongFocus]
|
||||
if focusables:
|
||||
focusables[0].setFocus(Qt.FocusReason.OtherFocusReason)
|
||||
return
|
||||
if value > 0: # Right
|
||||
active.focusNextChild()
|
||||
elif value < 0: # Left
|
||||
active.focusPreviousChild()
|
||||
elif code == ecodes.ABS_HAT0Y and value != 0: # Vertical navigation
|
||||
if value > 0: # Down
|
||||
active.focusNextChild()
|
||||
elif value < 0: # Up
|
||||
active.focusPreviousChild()
|
||||
return
|
||||
# Handle SystemOverlay, AddGameDialog, or other QDialog navigation with D-pad
|
||||
elif isinstance(active, QDialog) and code == ecodes.ABS_HAT0X and value != 0:
|
||||
if not focused or not active.focusWidget():
|
||||
# If no widget is focused, focus the first focusable widget
|
||||
focusables = active.findChildren(QWidget, options=Qt.FindChildOption.FindChildrenRecursively)
|
||||
focusables = [w for w in focusables if w.focusPolicy() & Qt.FocusPolicy.StrongFocus]
|
||||
if focusables:
|
||||
focusables[0].setFocus(Qt.FocusReason.OtherFocusReason)
|
||||
return
|
||||
if value > 0: # Right
|
||||
active.focusNextChild()
|
||||
elif value < 0: # Left
|
||||
active.focusPreviousChild()
|
||||
return
|
||||
elif isinstance(active, QDialog) and code == ecodes.ABS_HAT0Y and value != 0 and not isinstance(focused, QTableWidget): # Keep up/down for other dialogs
|
||||
if not focused or not active.focusWidget():
|
||||
# If no widget is focused, focus the first focusable widget
|
||||
@@ -2306,56 +2312,3 @@ class InputManager(QObject):
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error during cleanup: {e}", exc_info=True)
|
||||
|
||||
def _handle_common_ui_elements(self, button_code):
|
||||
"""
|
||||
Common handler for common UI elements like QMessageBox, QMenu, etc.
|
||||
Returns True if the event was handled, False otherwise.
|
||||
"""
|
||||
# Check for popup widgets first
|
||||
popup = QApplication.activePopupWidget()
|
||||
if popup:
|
||||
if isinstance(popup, QMessageBox):
|
||||
self._handle_qmessagebox_button(popup, button_code)
|
||||
return True
|
||||
elif isinstance(popup, QMenu):
|
||||
if button_code in BUTTONS['confirm']:
|
||||
if popup.activeAction():
|
||||
popup.activeAction().trigger()
|
||||
popup.close()
|
||||
elif button_code in BUTTONS['back']:
|
||||
popup.close()
|
||||
return True
|
||||
|
||||
# Check for top-level QMessageBox specifically
|
||||
active = QApplication.activeWindow()
|
||||
if isinstance(active, QMessageBox):
|
||||
self._handle_qmessagebox_button(active, button_code)
|
||||
return True
|
||||
|
||||
# Check for top-level message boxes (additional check)
|
||||
for widget in QApplication.topLevelWidgets():
|
||||
if isinstance(widget, QMessageBox) and widget.isVisible() and widget != active:
|
||||
self._handle_qmessagebox_button(widget, button_code)
|
||||
return True
|
||||
|
||||
return False # Not handled by common handler
|
||||
|
||||
def _handle_qmessagebox_button(self, msg_box, button_code):
|
||||
"""
|
||||
Unified handler for QMessageBox across all modes.
|
||||
For single button dialogs, A button accepts the dialog.
|
||||
For multiple button dialogs, navigate between buttons and allow selection.
|
||||
"""
|
||||
if button_code in BUTTONS['confirm']:
|
||||
# Check if there's a focused button in the message box
|
||||
focused_widget = msg_box.focusWidget()
|
||||
if focused_widget:
|
||||
# If a specific button is focused, click/activate it
|
||||
focused_widget.click()
|
||||
else:
|
||||
# If no button is focused, accept with default behavior
|
||||
msg_box.accept()
|
||||
elif button_code in BUTTONS['back']:
|
||||
# For back button, reject the dialog (typically cancels or selects cancel button)
|
||||
msg_box.reject()
|
||||
|
||||
Binary file not shown.
@@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2025-11-23 15:42+0500\n"
|
||||
"POT-Creation-Date: 2025-11-11 17:00+0500\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: de_DE\n"
|
||||
@@ -279,12 +279,6 @@ msgstr ""
|
||||
msgid "Next Tab"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Launching {0}"
|
||||
msgstr ""
|
||||
@@ -374,12 +368,6 @@ msgstr ""
|
||||
msgid "Exe Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search settings..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Main"
|
||||
msgstr ""
|
||||
|
||||
@@ -473,6 +461,9 @@ msgstr ""
|
||||
msgid "Fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Installation already in progress."
|
||||
msgstr ""
|
||||
|
||||
@@ -492,12 +483,6 @@ msgstr ""
|
||||
msgid "Installation error."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refresh Grid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game library refreshed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading Steam games..."
|
||||
msgstr ""
|
||||
|
||||
@@ -510,15 +495,6 @@ msgstr ""
|
||||
msgid "Find Games ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "A refresh is already in progress..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refreshing..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refreshing game library..."
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Added '{name}'"
|
||||
msgstr ""
|
||||
@@ -962,55 +938,6 @@ msgstr ""
|
||||
msgid "Use async dxvk-sarek (experimental)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Wine Version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select the Wine or Proton version to use for this executable."
|
||||
msgstr ""
|
||||
|
||||
msgid "Prefix Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select the Wine prefix to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stable"
|
||||
msgstr ""
|
||||
|
||||
msgid "Vulkan Backend"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Select the rendering backend for translating DirectX → Vulkan/OpenGL:\n"
|
||||
"\n"
|
||||
"• Auto – latest DXVK + VKD3D (recommended)\n"
|
||||
" The newest versions from the developers. Give the best compatibility "
|
||||
"and performance in modern games.\n"
|
||||
" Require up-to-date drivers:\n"
|
||||
" – AMD: Mesa 25.0+ or proprietary AMDVLK 2024.Q4+\n"
|
||||
" – NVIDIA: driver 550.54.14 or newer\n"
|
||||
" – Intel: Mesa 24.2+\n"
|
||||
"\n"
|
||||
"• Stable – proven DXVK + VKD3D\n"
|
||||
" Older but extremely well-tested versions. Work on any drivers that "
|
||||
"support Vulkan 1.3+.\n"
|
||||
" The best choice if you have problems with the newest versions.\n"
|
||||
"\n"
|
||||
"• Sarek – experimental DXVK-Sarek + VKD3D-Sarek\n"
|
||||
" Work even on older drivers and video cards that support at least "
|
||||
"Vulkan 1.1.\n"
|
||||
"\n"
|
||||
"• WINED3D – OpenGL translation (fallback)\n"
|
||||
" No DXVK/VKD3D used. DirectX is translated to OpenGL via built-in "
|
||||
"WineD3D.\n"
|
||||
" Works on absolutely any hardware, but performance is significantly "
|
||||
"lower.\n"
|
||||
" Use only as a last resort when nothing else starts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Windows version"
|
||||
msgstr ""
|
||||
|
||||
|
||||
Binary file not shown.
@@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2025-11-23 15:42+0500\n"
|
||||
"POT-Creation-Date: 2025-11-11 17:00+0500\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: es_ES\n"
|
||||
@@ -279,12 +279,6 @@ msgstr ""
|
||||
msgid "Next Tab"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Launching {0}"
|
||||
msgstr ""
|
||||
@@ -374,12 +368,6 @@ msgstr ""
|
||||
msgid "Exe Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search settings..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Main"
|
||||
msgstr ""
|
||||
|
||||
@@ -473,6 +461,9 @@ msgstr ""
|
||||
msgid "Fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Installation already in progress."
|
||||
msgstr ""
|
||||
|
||||
@@ -492,12 +483,6 @@ msgstr ""
|
||||
msgid "Installation error."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refresh Grid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game library refreshed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading Steam games..."
|
||||
msgstr ""
|
||||
|
||||
@@ -510,15 +495,6 @@ msgstr ""
|
||||
msgid "Find Games ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "A refresh is already in progress..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refreshing..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refreshing game library..."
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Added '{name}'"
|
||||
msgstr ""
|
||||
@@ -962,55 +938,6 @@ msgstr ""
|
||||
msgid "Use async dxvk-sarek (experimental)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Wine Version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select the Wine or Proton version to use for this executable."
|
||||
msgstr ""
|
||||
|
||||
msgid "Prefix Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select the Wine prefix to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stable"
|
||||
msgstr ""
|
||||
|
||||
msgid "Vulkan Backend"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Select the rendering backend for translating DirectX → Vulkan/OpenGL:\n"
|
||||
"\n"
|
||||
"• Auto – latest DXVK + VKD3D (recommended)\n"
|
||||
" The newest versions from the developers. Give the best compatibility "
|
||||
"and performance in modern games.\n"
|
||||
" Require up-to-date drivers:\n"
|
||||
" – AMD: Mesa 25.0+ or proprietary AMDVLK 2024.Q4+\n"
|
||||
" – NVIDIA: driver 550.54.14 or newer\n"
|
||||
" – Intel: Mesa 24.2+\n"
|
||||
"\n"
|
||||
"• Stable – proven DXVK + VKD3D\n"
|
||||
" Older but extremely well-tested versions. Work on any drivers that "
|
||||
"support Vulkan 1.3+.\n"
|
||||
" The best choice if you have problems with the newest versions.\n"
|
||||
"\n"
|
||||
"• Sarek – experimental DXVK-Sarek + VKD3D-Sarek\n"
|
||||
" Work even on older drivers and video cards that support at least "
|
||||
"Vulkan 1.1.\n"
|
||||
"\n"
|
||||
"• WINED3D – OpenGL translation (fallback)\n"
|
||||
" No DXVK/VKD3D used. DirectX is translated to OpenGL via built-in "
|
||||
"WineD3D.\n"
|
||||
" Works on absolutely any hardware, but performance is significantly "
|
||||
"lower.\n"
|
||||
" Use only as a last resort when nothing else starts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Windows version"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PortProtonQt 0.1.1\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2025-11-23 15:43+0500\n"
|
||||
"POT-Creation-Date: 2025-11-11 17:00+0500\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -277,12 +277,6 @@ msgstr ""
|
||||
msgid "Next Tab"
|
||||
msgstr ""
|
||||
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Launching {0}"
|
||||
msgstr ""
|
||||
@@ -372,12 +366,6 @@ msgstr ""
|
||||
msgid "Exe Settings"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search settings..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Main"
|
||||
msgstr ""
|
||||
|
||||
@@ -471,6 +459,9 @@ msgstr ""
|
||||
msgid "Fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
msgid "Installation already in progress."
|
||||
msgstr ""
|
||||
|
||||
@@ -490,12 +481,6 @@ msgstr ""
|
||||
msgid "Installation error."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refresh Grid"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game library refreshed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading Steam games..."
|
||||
msgstr ""
|
||||
|
||||
@@ -508,15 +493,6 @@ msgstr ""
|
||||
msgid "Find Games ..."
|
||||
msgstr ""
|
||||
|
||||
msgid "A refresh is already in progress..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refreshing..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refreshing game library..."
|
||||
msgstr ""
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Added '{name}'"
|
||||
msgstr ""
|
||||
@@ -960,55 +936,6 @@ msgstr ""
|
||||
msgid "Use async dxvk-sarek (experimental)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Wine Version"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select the Wine or Proton version to use for this executable."
|
||||
msgstr ""
|
||||
|
||||
msgid "Prefix Name"
|
||||
msgstr ""
|
||||
|
||||
msgid "Select the Wine prefix to use."
|
||||
msgstr ""
|
||||
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
msgid "Stable"
|
||||
msgstr ""
|
||||
|
||||
msgid "Vulkan Backend"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Select the rendering backend for translating DirectX → Vulkan/OpenGL:\n"
|
||||
"\n"
|
||||
"• Auto – latest DXVK + VKD3D (recommended)\n"
|
||||
" The newest versions from the developers. Give the best compatibility "
|
||||
"and performance in modern games.\n"
|
||||
" Require up-to-date drivers:\n"
|
||||
" – AMD: Mesa 25.0+ or proprietary AMDVLK 2024.Q4+\n"
|
||||
" – NVIDIA: driver 550.54.14 or newer\n"
|
||||
" – Intel: Mesa 24.2+\n"
|
||||
"\n"
|
||||
"• Stable – proven DXVK + VKD3D\n"
|
||||
" Older but extremely well-tested versions. Work on any drivers that "
|
||||
"support Vulkan 1.3+.\n"
|
||||
" The best choice if you have problems with the newest versions.\n"
|
||||
"\n"
|
||||
"• Sarek – experimental DXVK-Sarek + VKD3D-Sarek\n"
|
||||
" Work even on older drivers and video cards that support at least "
|
||||
"Vulkan 1.1.\n"
|
||||
"\n"
|
||||
"• WINED3D – OpenGL translation (fallback)\n"
|
||||
" No DXVK/VKD3D used. DirectX is translated to OpenGL via built-in "
|
||||
"WineD3D.\n"
|
||||
" Works on absolutely any hardware, but performance is significantly "
|
||||
"lower.\n"
|
||||
" Use only as a last resort when nothing else starts."
|
||||
msgstr ""
|
||||
|
||||
msgid "Windows version"
|
||||
msgstr ""
|
||||
|
||||
|
||||
Binary file not shown.
@@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2025-11-23 15:42+0500\n"
|
||||
"PO-Revision-Date: 2025-11-23 15:42+0500\n"
|
||||
"POT-Creation-Date: 2025-11-11 17:00+0500\n"
|
||||
"PO-Revision-Date: 2025-11-11 17:00+0500\n"
|
||||
"Last-Translator: \n"
|
||||
"Language: ru_RU\n"
|
||||
"Language-Team: ru_RU <LL@li.org>\n"
|
||||
@@ -286,12 +286,6 @@ msgstr "Предыдущая вкладка"
|
||||
msgid "Next Tab"
|
||||
msgstr "Следующая вкладка"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "Сохранить"
|
||||
|
||||
msgid "Search"
|
||||
msgstr "Поиск"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Launching {0}"
|
||||
msgstr "Идёт запуск {0}"
|
||||
@@ -381,12 +375,6 @@ msgstr "Компоненты успешно установлены."
|
||||
msgid "Exe Settings"
|
||||
msgstr "Настройки EXE"
|
||||
|
||||
msgid "Search:"
|
||||
msgstr "Поиск:"
|
||||
|
||||
msgid "Search settings..."
|
||||
msgstr "Поиск настроек..."
|
||||
|
||||
msgid "Main"
|
||||
msgstr "Основные"
|
||||
|
||||
@@ -480,6 +468,9 @@ msgstr "Назад"
|
||||
msgid "Fullscreen"
|
||||
msgstr "Полный экран"
|
||||
|
||||
msgid "Search"
|
||||
msgstr "Поиск"
|
||||
|
||||
msgid "Installation already in progress."
|
||||
msgstr "Установка уже выполняется."
|
||||
|
||||
@@ -499,12 +490,6 @@ msgstr "Установка не удалась."
|
||||
msgid "Installation error."
|
||||
msgstr "Ошибка установки."
|
||||
|
||||
msgid "Refresh Grid"
|
||||
msgstr "Обновить"
|
||||
|
||||
msgid "Game library refreshed"
|
||||
msgstr "Игровая библиотека обновлена"
|
||||
|
||||
msgid "Loading Steam games..."
|
||||
msgstr "Загрузка игр из Steam..."
|
||||
|
||||
@@ -517,15 +502,6 @@ msgstr "Игровая библиотека"
|
||||
msgid "Find Games ..."
|
||||
msgstr "Найти игры..."
|
||||
|
||||
msgid "A refresh is already in progress..."
|
||||
msgstr "Обновление уже выполняется..."
|
||||
|
||||
msgid "Refreshing..."
|
||||
msgstr "Обновление..."
|
||||
|
||||
msgid "Refreshing game library..."
|
||||
msgstr "Обновление игровой библиотеки..."
|
||||
|
||||
#, python-brace-format
|
||||
msgid "Added '{name}'"
|
||||
msgstr "'{name}' добавлен(а)"
|
||||
@@ -987,78 +963,6 @@ msgstr "Использовать встроенные dxvk/vkd3d из Wine/Proto
|
||||
msgid "Use async dxvk-sarek (experimental)"
|
||||
msgstr "Использовать асинхронный dxvk-sarek (экспериментально)"
|
||||
|
||||
msgid "Wine Version"
|
||||
msgstr "Версия Wine"
|
||||
|
||||
msgid "Select the Wine or Proton version to use for this executable."
|
||||
msgstr "Выбор версии Wine или Proton для использования с этим исполняемым файлом."
|
||||
|
||||
msgid "Prefix Name"
|
||||
msgstr "Имя префикса"
|
||||
|
||||
msgid "Select the Wine prefix to use."
|
||||
msgstr "Выбор версии Wine для использования."
|
||||
|
||||
msgid "Latest"
|
||||
msgstr "Последние"
|
||||
|
||||
msgid "Stable"
|
||||
msgstr "Стабильные"
|
||||
|
||||
msgid "Vulkan Backend"
|
||||
msgstr "Vulkan рендеринг"
|
||||
|
||||
msgid ""
|
||||
"Select the rendering backend for translating DirectX → Vulkan/OpenGL:\n"
|
||||
"\n"
|
||||
"• Auto – latest DXVK + VKD3D (recommended)\n"
|
||||
" The newest versions from the developers. Give the best compatibility "
|
||||
"and performance in modern games.\n"
|
||||
" Require up-to-date drivers:\n"
|
||||
" – AMD: Mesa 25.0+ or proprietary AMDVLK 2024.Q4+\n"
|
||||
" – NVIDIA: driver 550.54.14 or newer\n"
|
||||
" – Intel: Mesa 24.2+\n"
|
||||
"\n"
|
||||
"• Stable – proven DXVK + VKD3D\n"
|
||||
" Older but extremely well-tested versions. Work on any drivers that "
|
||||
"support Vulkan 1.3+.\n"
|
||||
" The best choice if you have problems with the newest versions.\n"
|
||||
"\n"
|
||||
"• Sarek – experimental DXVK-Sarek + VKD3D-Sarek\n"
|
||||
" Work even on older drivers and video cards that support at least "
|
||||
"Vulkan 1.1.\n"
|
||||
"\n"
|
||||
"• WINED3D – OpenGL translation (fallback)\n"
|
||||
" No DXVK/VKD3D used. DirectX is translated to OpenGL via built-in "
|
||||
"WineD3D.\n"
|
||||
" Works on absolutely any hardware, but performance is significantly "
|
||||
"lower.\n"
|
||||
" Use only as a last resort when nothing else starts."
|
||||
msgstr ""
|
||||
"Выбор рендеринга для трансляции DirectX → Vulkan/OpenGL:\n"
|
||||
"\n"
|
||||
"• Авто – последние версии DXVK + VKD3D (рекомендуется)\n"
|
||||
" Новейшие версии от разработчиков. Обеспечивают наилучшую совместимость и"
|
||||
" производительность в современных играх.\n"
|
||||
" Требуются актуальные драйверы:\n"
|
||||
" – AMD: Mesa 25.0+ или проприетарный AMDVLK 2024.Q4+\n"
|
||||
" – NVIDIA: 550.54.14 или новее\n"
|
||||
" – Intel: Mesa 24.2+\n"
|
||||
"\n"
|
||||
"• Стабильный – проверенные версии DXVK + VKD3D\n"
|
||||
" Более старые, но тщательно протестированные версии. Работают с любыми "
|
||||
"драйверами, поддерживающие Vulkan 1.3+.\n"
|
||||
" Лучший выбор, если у вас возникли проблемы с последними версиями.\n"
|
||||
"\n"
|
||||
"• Sarek – экспериментальная версия DXVK-Sarek + VKD3D-Sarek\n"
|
||||
"Работает даже на старых драйверах и видеокартах, поддерживающих как "
|
||||
"минимум Vulkan 1.1.\n"
|
||||
"• WINED3D – трансляция OpenGL (для видеокарт без поддержки Vulkan)\n"
|
||||
"DXVK/VKD3D не используется. DirectX транслируется в OpenGL через "
|
||||
"встроенную WineD3D.Работает абсолютно на любом оборудовании, но "
|
||||
"производительность значительно снижается.Используйте только в крайнем "
|
||||
"случае, когда ничего другое не запускается."
|
||||
|
||||
msgid "Windows version"
|
||||
msgstr "Версия Windows"
|
||||
|
||||
|
||||
@@ -78,10 +78,10 @@ def get_advanced_settings(disabled_text, logical_core_options, locale_options,
|
||||
|
||||
# 3. Vulkan Backend
|
||||
vulkan_options = [
|
||||
_("Latest"), # → 6
|
||||
_("Stable"), # → 2
|
||||
("Sarek"), # → 1
|
||||
("WINED3D – OpenGL") # → 0
|
||||
_("Auto – latest DXVK + VKD3D (recommended)"), # → 6
|
||||
_("Stable – proven DXVK + VKD3D"), # → 2
|
||||
_("Sarek – experimental DXVK-Sarek + VKD3D-Sarek"), # → 1
|
||||
_("WINED3D – OpenGL (fallback only)") # → 0
|
||||
]
|
||||
|
||||
# Маппинг: отображаемый текст → реальное значение в ppdb
|
||||
|
||||
Reference in New Issue
Block a user