forked from Boria138/PortProtonQt
Compare commits
4 Commits
accc9b18b6
...
84d5e46a74
| Author | SHA1 | Date | |
|---|---|---|---|
|
84d5e46a74
|
|||
|
4bc764d568
|
|||
|
9a18aa037e
|
|||
|
ed62d2d1c4
|
17
CHANGELOG.md
17
CHANGELOG.md
@@ -3,6 +3,23 @@
|
|||||||
Все заметные изменения в этом проекте фиксируются в этом файле.
|
Все заметные изменения в этом проекте фиксируются в этом файле.
|
||||||
Формат основан на [Keep a Changelog](https://keepachangelog.com/) и придерживается принципов [Semantic Versioning](https://semver.org/).
|
Формат основан на [Keep a Changelog](https://keepachangelog.com/) и придерживается принципов [Semantic Versioning](https://semver.org/).
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- В настройки добавлен пункт для выбора типа геймпада для подсказок по управлению
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- При завершении автоустановки приложение больше не перезапускается
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Исправлено наложение карточек при смене фильтра игр
|
||||||
|
|
||||||
|
|
||||||
|
### Contributors
|
||||||
|
- @Vector_null
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [0.1.7] - 2025-10-12
|
## [0.1.7] - 2025-10-12
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -56,16 +56,6 @@ class GameLibraryManager:
|
|||||||
self.is_filtering = False
|
self.is_filtering = False
|
||||||
self.dirty = False
|
self.dirty = False
|
||||||
|
|
||||||
def force_update_cards_library(self):
|
|
||||||
if self.gamesListWidget and self.gamesListLayout:
|
|
||||||
self.gamesListLayout.invalidate()
|
|
||||||
self.gamesListWidget.updateGeometry()
|
|
||||||
widget = self.gamesListWidget
|
|
||||||
QTimer.singleShot(0, lambda: (
|
|
||||||
widget.adjustSize(),
|
|
||||||
widget.updateGeometry()
|
|
||||||
))
|
|
||||||
|
|
||||||
def create_games_library_widget(self):
|
def create_games_library_widget(self):
|
||||||
"""Creates the games library widget with search, grid, and slider."""
|
"""Creates the games library widget with search, grid, and slider."""
|
||||||
self.gamesLibraryWidget = QWidget()
|
self.gamesLibraryWidget = QWidget()
|
||||||
@@ -227,6 +217,16 @@ class GameLibraryManager:
|
|||||||
else:
|
else:
|
||||||
self._update_game_grid_immediate()
|
self._update_game_grid_immediate()
|
||||||
|
|
||||||
|
def force_update_cards_library(self):
|
||||||
|
if self.gamesListWidget and self.gamesListLayout:
|
||||||
|
self.gamesListLayout.invalidate()
|
||||||
|
self.gamesListWidget.updateGeometry()
|
||||||
|
widget = self.gamesListWidget
|
||||||
|
QTimer.singleShot(0, lambda: (
|
||||||
|
widget.adjustSize(),
|
||||||
|
widget.updateGeometry()
|
||||||
|
))
|
||||||
|
|
||||||
def _update_game_grid_immediate(self):
|
def _update_game_grid_immediate(self):
|
||||||
"""Updates the game grid with the provided or current game list."""
|
"""Updates the game grid with the provided or current game list."""
|
||||||
if self.gamesListLayout is None or self.gamesListWidget is None:
|
if self.gamesListLayout is None or self.gamesListWidget is None:
|
||||||
|
|||||||
@@ -100,7 +100,6 @@ class MainWindow(QMainWindow):
|
|||||||
self.games_load_timer.timeout.connect(self.finalize_game_loading)
|
self.games_load_timer.timeout.connect(self.finalize_game_loading)
|
||||||
self.games_loaded.connect(self.on_games_loaded)
|
self.games_loaded.connect(self.on_games_loaded)
|
||||||
self.current_add_game_dialog = None
|
self.current_add_game_dialog = None
|
||||||
self.current_display_filter = read_display_filter()
|
|
||||||
|
|
||||||
self.settingsDebounceTimer = QTimer(self)
|
self.settingsDebounceTimer = QTimer(self)
|
||||||
self.settingsDebounceTimer.setSingleShot(True)
|
self.settingsDebounceTimer.setSingleShot(True)
|
||||||
@@ -517,12 +516,26 @@ class MainWindow(QMainWindow):
|
|||||||
self.install_monitor_timer = None
|
self.install_monitor_timer = None
|
||||||
self.progress_bar.setRange(0, 100)
|
self.progress_bar.setRange(0, 100)
|
||||||
self.progress_bar.setValue(100)
|
self.progress_bar.setValue(100)
|
||||||
|
|
||||||
if exit_code == 0:
|
if exit_code == 0:
|
||||||
self.update_status_message.emit(_("Installation completed successfully."), 5000)
|
self.update_status_message.emit(_("Installation completed successfully."), 5000)
|
||||||
QTimer.singleShot(500, lambda: self.restart_application())
|
|
||||||
|
desktop_dir = self.portproton_location or ""
|
||||||
|
new_desktops = [e.path for e in os.scandir(desktop_dir) if e.name.endswith(".desktop")]
|
||||||
|
if new_desktops:
|
||||||
|
latest = max(new_desktops, key=os.path.getmtime)
|
||||||
|
self._process_desktop_file_async(
|
||||||
|
latest,
|
||||||
|
lambda result: (
|
||||||
|
self.game_library_manager.add_game_incremental(result)
|
||||||
|
if result else None
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.update_status_message.emit(_("Installation failed."), 5000)
|
self.update_status_message.emit(_("Installation failed."), 5000)
|
||||||
QMessageBox.warning(self, _("Error"), f"Installation failed (code: {exit_code}).")
|
QMessageBox.warning(self, _("Error"), f"Installation failed (code: {exit_code}).")
|
||||||
|
|
||||||
self.progress_bar.setVisible(False)
|
self.progress_bar.setVisible(False)
|
||||||
self.current_install_script = None
|
self.current_install_script = None
|
||||||
if self.install_process:
|
if self.install_process:
|
||||||
@@ -824,22 +837,23 @@ class MainWindow(QMainWindow):
|
|||||||
if hasattr(self, "game_library_manager"):
|
if hasattr(self, "game_library_manager"):
|
||||||
mgr = self.game_library_manager
|
mgr = self.game_library_manager
|
||||||
if mgr.gamesListWidget and mgr.gamesListLayout:
|
if mgr.gamesListWidget and mgr.gamesListLayout:
|
||||||
layout = mgr.gamesListLayout
|
games_layout = mgr.gamesListLayout
|
||||||
widget = mgr.gamesListWidget
|
games_widget = mgr.gamesListWidget
|
||||||
QTimer.singleShot(0, lambda: (
|
QTimer.singleShot(0, lambda: (
|
||||||
layout.invalidate(),
|
games_layout.invalidate(),
|
||||||
widget.adjustSize(),
|
games_widget.adjustSize(),
|
||||||
widget.updateGeometry()
|
games_widget.updateGeometry()
|
||||||
))
|
))
|
||||||
if hasattr(self, "autoInstallContainer") and hasattr(self, "autoInstallContainerLayout"):
|
if hasattr(self, "autoInstallContainer") and hasattr(self, "autoInstallContainerLayout"):
|
||||||
layout = self.autoInstallContainerLayout
|
auto_layout = self.autoInstallContainerLayout
|
||||||
widget = self.autoInstallContainer
|
auto_widget = self.autoInstallContainer
|
||||||
QTimer.singleShot(0, lambda: (
|
QTimer.singleShot(0, lambda: (
|
||||||
layout.invalidate(),
|
auto_layout.invalidate(),
|
||||||
widget.adjustSize(),
|
auto_widget.adjustSize(),
|
||||||
widget.updateGeometry()
|
auto_widget.updateGeometry()
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
||||||
def openSystemOverlay(self):
|
def openSystemOverlay(self):
|
||||||
"""Opens the system overlay dialog."""
|
"""Opens the system overlay dialog."""
|
||||||
overlay = SystemOverlay(self, self.theme)
|
overlay = SystemOverlay(self, self.theme)
|
||||||
@@ -2012,12 +2026,9 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
def applySettingsDelayed(self):
|
def applySettingsDelayed(self):
|
||||||
read_time_config()
|
read_time_config()
|
||||||
|
self.games = []
|
||||||
|
self.loadGames()
|
||||||
display_filter = read_display_filter()
|
display_filter = read_display_filter()
|
||||||
reload_needed = display_filter != self.current_display_filter
|
|
||||||
if reload_needed:
|
|
||||||
self.games = []
|
|
||||||
self.loadGames()
|
|
||||||
self.current_display_filter = display_filter
|
|
||||||
for card in self.game_library_manager.game_card_cache.values():
|
for card in self.game_library_manager.game_card_cache.values():
|
||||||
card.update_badge_visibility(display_filter)
|
card.update_badge_visibility(display_filter)
|
||||||
|
|
||||||
@@ -2032,8 +2043,6 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
filter_idx = self.gamesDisplayCombo.currentIndex()
|
filter_idx = self.gamesDisplayCombo.currentIndex()
|
||||||
filter_key = self.filter_keys[filter_idx]
|
filter_key = self.filter_keys[filter_idx]
|
||||||
|
|
||||||
old_filter = self.current_display_filter
|
|
||||||
save_display_filter(filter_key)
|
save_display_filter(filter_key)
|
||||||
|
|
||||||
proxy_url = self.proxyUrlEdit.text().strip()
|
proxy_url = self.proxyUrlEdit.text().strip()
|
||||||
@@ -2063,19 +2072,17 @@ class MainWindow(QMainWindow):
|
|||||||
self.input_manager.gamepad_type = GamepadType.UNKNOWN
|
self.input_manager.gamepad_type = GamepadType.UNKNOWN
|
||||||
self.updateControlHints()
|
self.updateControlHints()
|
||||||
|
|
||||||
if filter_key != old_filter:
|
for card in self.game_library_manager.game_card_cache.values():
|
||||||
for card in self.game_library_manager.game_card_cache.values():
|
card.update_badge_visibility(filter_key)
|
||||||
card.update_badge_visibility(filter_key)
|
|
||||||
|
|
||||||
if self.currentDetailPage and self.current_exec_line:
|
if self.currentDetailPage and self.current_exec_line:
|
||||||
current_game = next((game for game in self.games if game[4] == self.current_exec_line), None)
|
current_game = next((game for game in self.games if game[4] == self.current_exec_line), None)
|
||||||
if current_game:
|
if current_game:
|
||||||
self.stackedWidget.removeWidget(self.currentDetailPage)
|
self.stackedWidget.removeWidget(self.currentDetailPage)
|
||||||
self.currentDetailPage.deleteLater()
|
self.currentDetailPage.deleteLater()
|
||||||
self.currentDetailPage = None
|
self.currentDetailPage = None
|
||||||
self.openGameDetailPage(*current_game)
|
self.openGameDetailPage(*current_game)
|
||||||
|
|
||||||
self.current_display_filter = filter_key
|
|
||||||
self.settingsDebounceTimer.start()
|
self.settingsDebounceTimer.start()
|
||||||
|
|
||||||
gamepad_connected = self.input_manager.find_gamepad() is not None
|
gamepad_connected = self.input_manager.find_gamepad() is not None
|
||||||
|
|||||||
Reference in New Issue
Block a user