From 43a7c37e91cfc7795f3b781b9b72be982f485ccc Mon Sep 17 00:00:00 2001 From: Boris Yumankulov Date: Sat, 13 Sep 2025 17:01:43 +0500 Subject: [PATCH] feat: use mouse extra button to back Signed-off-by: Boris Yumankulov --- portprotonqt/input_manager.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/portprotonqt/input_manager.py b/portprotonqt/input_manager.py index 01c3186..b87f62f 100644 --- a/portprotonqt/input_manager.py +++ b/portprotonqt/input_manager.py @@ -7,7 +7,7 @@ from enum import Enum from pyudev import Context, Monitor, MonitorObserver, Device from PySide6.QtWidgets import QWidget, QStackedWidget, QApplication, QScrollArea, QLineEdit, QDialog, QMenu, QComboBox, QListView, QMessageBox, QListWidget from PySide6.QtCore import Qt, QObject, QEvent, QPoint, Signal, Slot, QTimer -from PySide6.QtGui import QKeyEvent +from PySide6.QtGui import QKeyEvent, QMouseEvent from portprotonqt.logger import get_logger from portprotonqt.image_utils import FullscreenDialog from portprotonqt.custom_widgets import NavLabel, AutoSizeButton @@ -841,6 +841,20 @@ class InputManager(QObject): if not app: return super().eventFilter(obj, event) + if event.type() == QEvent.Type.MouseButtonPress: + mouse_event = cast(QMouseEvent, event) + if mouse_event.button() == Qt.MouseButton.ExtraButton1: + # Handle ExtraButton1 as "back" action, similar to Escape + active_win = QApplication.activeWindow() + focused = QApplication.focusWidget() + if isinstance(focused, QLineEdit): + return False # Skip if in QLineEdit + if isinstance(active_win, QDialog): + active_win.reject() + return True + self._parent.goBackDetailPage(self._parent.currentDetailPage) + return True + # Ensure obj is a QObject if not isinstance(obj, QObject): logger.debug(f"Skipping event filter for non-QObject: {type(obj).__name__}")