From 1ba178199465e60aa9e0e85562d1e8de3687ba5d Mon Sep 17 00:00:00 2001 From: Boris Yumankulov Date: Mon, 1 Dec 2025 17:06:20 +0500 Subject: [PATCH] feat(settings): added preloader because flatpak is too slow Signed-off-by: Boris Yumankulov --- portprotonqt/dialogs.py | 54 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/portprotonqt/dialogs.py b/portprotonqt/dialogs.py index 0e30f3f..190d716 100644 --- a/portprotonqt/dialogs.py +++ b/portprotonqt/dialogs.py @@ -1832,7 +1832,7 @@ class ExeSettingsDialog(QDialog): # Connect tab change to update description hint self.tab_widget.currentChanged.connect(self.on_table_selection_changed) - # Main settings table + # Main settings table with preloader self.settings_table = QTableWidget() self.settings_table.setAlternatingRowColors(True) self.settings_table.setFocusPolicy(Qt.FocusPolicy.StrongFocus) @@ -1847,11 +1847,30 @@ class ExeSettingsDialog(QDialog): self.settings_table.verticalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents) self.settings_table.setTextElideMode(Qt.TextElideMode.ElideNone) self.settings_table.setStyleSheet(self.theme.WINETRICKS_TABBLE_STYLE) - self.main_tab_layout.addWidget(self.settings_table) + + # Create preloader for main settings table + self.settings_preloader = Preloader() + settings_preloader_container = QWidget() + settings_preloader_layout = QVBoxLayout(settings_preloader_container) + settings_preloader_layout.addStretch() + settings_preloader_hlayout = QHBoxLayout() + settings_preloader_hlayout.addStretch() + settings_preloader_hlayout.addWidget(self.settings_preloader) + settings_preloader_hlayout.addStretch() + settings_preloader_layout.addLayout(settings_preloader_hlayout) + settings_preloader_layout.addStretch() + settings_preloader_layout.setContentsMargins(0, 0, 0, 0) + settings_preloader_layout.setSpacing(0) + + # Create stacked widget for main settings + self.settings_container = QStackedWidget() + self.settings_container.addWidget(settings_preloader_container) # Index 0: preloader + self.settings_container.addWidget(self.settings_table) # Index 1: table + self.main_tab_layout.addWidget(self.settings_container) # Connect selection changed signal for the main table self.settings_table.currentCellChanged.connect(self.on_table_selection_changed) - # Advanced settings table + # Advanced settings table with preloader self.advanced_table = QTableWidget() self.advanced_table.setAlternatingRowColors(True) self.advanced_table.setFocusPolicy(Qt.FocusPolicy.StrongFocus) @@ -1868,7 +1887,26 @@ class ExeSettingsDialog(QDialog): self.advanced_table.verticalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents) self.advanced_table.setTextElideMode(Qt.TextElideMode.ElideNone) self.advanced_table.setStyleSheet(self.theme.WINETRICKS_TABBLE_STYLE) - self.advanced_tab_layout.addWidget(self.advanced_table) + + # Create preloader for advanced settings table + self.advanced_preloader = Preloader() + advanced_preloader_container = QWidget() + advanced_preloader_layout = QVBoxLayout(advanced_preloader_container) + advanced_preloader_layout.addStretch() + advanced_preloader_hlayout = QHBoxLayout() + advanced_preloader_hlayout.addStretch() + advanced_preloader_hlayout.addWidget(self.advanced_preloader) + advanced_preloader_hlayout.addStretch() + advanced_preloader_layout.addLayout(advanced_preloader_hlayout) + advanced_preloader_layout.addStretch() + advanced_preloader_layout.setContentsMargins(0, 0, 0, 0) + advanced_preloader_layout.setSpacing(0) + + # Create stacked widget for advanced settings + self.advanced_container = QStackedWidget() + self.advanced_container.addWidget(advanced_preloader_container) # Index 0: preloader + self.advanced_container.addWidget(self.advanced_table) # Index 1: table + self.advanced_tab_layout.addWidget(self.advanced_container) # Connect selection changed signal for the advanced table self.advanced_table.currentCellChanged.connect(self.on_table_selection_changed) @@ -1906,6 +1944,10 @@ class ExeSettingsDialog(QDialog): def load_current_settings(self): """Load available toggles first, then current settings.""" + # Show preloaders initially + self.settings_container.setCurrentIndex(0) # Show preloader for main settings + self.advanced_container.setCurrentIndex(0) # Show preloader for advanced settings + process = QProcess(self) process.finished.connect(self.on_list_db_finished) args = self._get_process_args(["cli", "--list-db"]) @@ -1997,6 +2039,10 @@ class ExeSettingsDialog(QDialog): self.populate_table() self.populate_advanced() + # Show the loaded content and hide preloaders + self.settings_container.setCurrentIndex(1) # Show main settings table + self.advanced_container.setCurrentIndex(1) # Show advanced settings table + def populate_table(self): """Populate the table with settings that are available in both lists.""" self.settings_table.setRowCount(0)