From fcf04e521d51fd6ec952fe90d2962e13fa7eda94 Mon Sep 17 00:00:00 2001 From: Boris Yumankulov Date: Sun, 24 Aug 2025 20:54:50 +0500 Subject: [PATCH] feat(file-explorer): add automatic scrolling for drives layout Signed-off-by: Boris Yumankulov --- portprotonqt/dialogs.py | 11 +++++++++++ portprotonqt/input_manager.py | 3 +++ 2 files changed, 14 insertions(+) diff --git a/portprotonqt/dialogs.py b/portprotonqt/dialogs.py index e4e18e4..14efc97 100644 --- a/portprotonqt/dialogs.py +++ b/portprotonqt/dialogs.py @@ -298,6 +298,17 @@ class FileExplorer(QDialog): except Exception as e: logger.error(f"Error navigating to parent directory: {e}") + def ensure_button_visible(self, button): + """Ensure the specified button is visible in the drives_scroll area.""" + try: + if not button or not self.drives_scroll: + return + # Ensure the button is visible in the scroll area + self.drives_scroll.ensureWidgetVisible(button, 50, 50) + logger.debug(f"Ensured button {button.text()} is visible in drives_scroll") + except Exception as e: + logger.error(f"Error ensuring button visible: {e}") + def update_drives_list(self): """Обновление списка смонтированных дисков и избранных папок.""" for i in reversed(range(self.drives_layout.count())): diff --git a/portprotonqt/input_manager.py b/portprotonqt/input_manager.py index 0a45f78..d874531 100644 --- a/portprotonqt/input_manager.py +++ b/portprotonqt/input_manager.py @@ -256,14 +256,17 @@ class InputManager(QObject): if not isinstance(focused_widget, AutoSizeButton) or focused_widget not in self.file_explorer.drive_buttons: # If not focused on a drive button, focus the first one self.file_explorer.drive_buttons[0].setFocus() + self.file_explorer.ensure_button_visible(self.file_explorer.drive_buttons[0]) return current_idx = self.file_explorer.drive_buttons.index(focused_widget) if value < 0: # Left next_idx = max(current_idx - 1, 0) self.file_explorer.drive_buttons[next_idx].setFocus() + self.file_explorer.ensure_button_visible(self.file_explorer.drive_buttons[next_idx]) elif value > 0: # Right next_idx = min(current_idx + 1, len(self.file_explorer.drive_buttons) - 1) self.file_explorer.drive_buttons[next_idx].setFocus() + self.file_explorer.ensure_button_visible(self.file_explorer.drive_buttons[next_idx]) elif code in (ecodes.ABS_HAT0Y, ecodes.ABS_Y): if isinstance(focused_widget, AutoSizeButton) and focused_widget in self.file_explorer.drive_buttons: # Move focus to file list if navigating down from drive buttons