-
-
Notifications
You must be signed in to change notification settings - Fork 1
Description
The eventFilter method calls on_window_activate and on_window_deactivate if the window doesn't change coordinates, the idea being to trigger whether the application loose then regain main focus. Moving the window around would also deactivate the window, at least on Xorg based desktops, triggering the filter if there was none of those checks.
A better way around that behavior is to call on_window_deactivate as callback using a QTimer. If the application regain focus before the timer runs out, then the QTimer must be cancelled. on_window_activate would then only be called if the timer triggers the callback.
This method of tracking applications loss of focus should be a lot more obvious and clean.
Lines 874 to 904 in e3440af
| def eventFilter(self, o, e: QEvent) -> bool: | |
| if e.type() not in self.accepted_types: | |
| return False | |
| if not self._mainwindow or not self._mainwindow.autorefresh_checkbox.isChecked(): | |
| return False | |
| if isinstance(o, QApplication) and e.type() == QEvent.ApplicationStateChange: | |
| if o.applicationState() == Qt.ApplicationActive: | |
| if self._is_first_activity: | |
| self._is_first_activity = False | |
| self.set_coords() | |
| self.set_geometry() | |
| return False | |
| logger.debug("The application is visible and selected to be in front.") | |
| coords = self.get_coords() == self._coords | |
| geo = self.get_geometry() == self._geometry | |
| if self.get_coords() != self._coords: | |
| self.set_coords() | |
| if self.get_geometry() != self._geometry: | |
| self.set_geometry() | |
| if coords and geo and not self._previous_state: | |
| logger.debug("(A) Window became active without moving around.") | |
| self._mainwindow.on_window_activate() | |
| self._previous_state = True | |
| if o.applicationState() == Qt.ApplicationInactive: | |
| logger.debug("The application is visible, but **not** selected to be in front.") | |
| if self.get_coords() != self._coords or self.get_geometry() != self._geometry: | |
| return False | |
| logger.debug("(D) Window isn't in focus, disabling WatchDog") | |
| self._previous_state = False | |
| self._mainwindow.on_window_deactivate() | |
| return False |