mirror of
				https://github.com/arsenetar/dupeguru.git
				synced 2025-09-11 17:58:17 +00:00 
			
		
		
		
	Add windows position handling at open, fix #653
- Move offscreen windows back on screen - Restore maximized state without impacting resored size - Fullscreen comes back on primary screen, needs further work to support restore on other screens
This commit is contained in:
		
							parent
							
								
									22996ee914
								
							
						
					
					
						commit
						b0baa5bfd6
					
				| @ -9,6 +9,7 @@ | ||||
| from PyQt5.QtCore import Qt | ||||
| from PyQt5.QtWidgets import QDockWidget, QWidget | ||||
| 
 | ||||
| from qtlib.util import move_to_screen_center | ||||
| from .details_table import DetailsModel | ||||
| from hscommon.plat import ISLINUX | ||||
| 
 | ||||
| @ -73,3 +74,9 @@ class DetailsDialog(QDockWidget): | ||||
|     def refresh(self): | ||||
|         self.tableModel.beginResetModel() | ||||
|         self.tableModel.endResetModel() | ||||
| 
 | ||||
|     def showEvent(self, event): | ||||
|         if self._wasDocked is False: | ||||
|             # have to do this here as the frameGeometry is not correct until shown | ||||
|             move_to_screen_center(self) | ||||
|         super().showEvent(event) | ||||
|  | ||||
| @ -32,7 +32,7 @@ from PyQt5.QtGui import QPixmap, QIcon | ||||
| 
 | ||||
| from hscommon.trans import trget | ||||
| from hscommon.plat import ISLINUX | ||||
| from qtlib.util import horizontal_wrap | ||||
| from qtlib.util import horizontal_wrap, move_to_screen_center | ||||
| from qtlib.preferences import get_langnames | ||||
| from enum import Flag, auto | ||||
| 
 | ||||
| @ -369,6 +369,11 @@ use the modifier key to drag the floating window around" | ||||
|                 section_to_update = Sections.DISPLAY | ||||
|             self.resetToDefaults(section_to_update) | ||||
| 
 | ||||
|     def showEvent(self, event): | ||||
|         # have to do this here as the frameGeometry is not correct until shown | ||||
|         move_to_screen_center(self) | ||||
|         super().showEvent(event) | ||||
| 
 | ||||
| 
 | ||||
| class ColorPickerButton(QPushButton): | ||||
|     def __init__(self, parent): | ||||
|  | ||||
| @ -19,6 +19,7 @@ from PyQt5.QtWidgets import ( | ||||
|     QAbstractItemView, | ||||
| ) | ||||
| 
 | ||||
| from qtlib.util import move_to_screen_center | ||||
| from hscommon.trans import trget | ||||
| from .problem_table import ProblemTable | ||||
| 
 | ||||
| @ -70,3 +71,8 @@ class ProblemDialog(QDialog): | ||||
|         self.closeButton.setDefault(True) | ||||
|         self.horizontalLayout.addWidget(self.closeButton) | ||||
|         self.verticalLayout.addLayout(self.horizontalLayout) | ||||
| 
 | ||||
|     def showEvent(self, event): | ||||
|         # have to do this here as the frameGeometry is not correct until shown | ||||
|         move_to_screen_center(self) | ||||
|         super().showEvent(event) | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
| # which should be included with this package. The terms are also available at | ||||
| # http://www.gnu.org/licenses/gpl-3.0.html | ||||
| 
 | ||||
| from PyQt5.QtCore import QRect, pyqtSlot, Qt | ||||
| from PyQt5.QtCore import QRect, pyqtSlot, Qt, QEvent | ||||
| from PyQt5.QtWidgets import ( | ||||
|     QWidget, | ||||
|     QVBoxLayout, | ||||
| @ -77,8 +77,8 @@ class TabWindow(QMainWindow): | ||||
|     def restoreGeometry(self): | ||||
|         if self.app.prefs.mainWindowRect is not None: | ||||
|             self.setGeometry(self.app.prefs.mainWindowRect) | ||||
|         else: | ||||
|             move_to_screen_center(self) | ||||
|         if self.app.prefs.mainWindowIsMaximized: | ||||
|             self.showMaximized() | ||||
| 
 | ||||
|     def _setupMenu(self): | ||||
|         """Setup the menubar boiler plates which will be filled by the underlying | ||||
| @ -211,7 +211,19 @@ class TabWindow(QMainWindow): | ||||
|         # QTabWidget will assign its geometry after restoring it | ||||
|         prefs = self.app.prefs | ||||
|         prefs.mainWindowIsMaximized = self.isMaximized() | ||||
|         prefs.mainWindowRect = self.geometry() | ||||
|         if not self.isMaximized(): | ||||
|             prefs.mainWindowRect = self.geometry() | ||||
| 
 | ||||
|     def showEvent(self, event): | ||||
|         if not self.isMaximized(): | ||||
|             # have to do this here as the frameGeometry is not correct until shown | ||||
|             move_to_screen_center(self) | ||||
|         super().showEvent(event) | ||||
| 
 | ||||
|     def changeEvent(self, event): | ||||
|         if event.type() == QEvent.Type.WindowStateChange and not self.isMaximized(): | ||||
|             move_to_screen_center(self) | ||||
|         super().changeEvent(event) | ||||
| 
 | ||||
|     def closeEvent(self, close_event): | ||||
|         # Force closing of our tabbed widgets in reverse order so that the | ||||
|  | ||||
| @ -18,6 +18,7 @@ from PyQt5.QtWidgets import ( | ||||
|     QApplication, | ||||
| ) | ||||
| 
 | ||||
| from qtlib.util import move_to_screen_center | ||||
| from hscommon.trans import trget | ||||
| 
 | ||||
| tr = trget("qtlib") | ||||
| @ -71,6 +72,11 @@ class AboutBox(QDialog): | ||||
|         self.verticalLayout.addWidget(self.buttonBox) | ||||
|         self.horizontalLayout.addLayout(self.verticalLayout) | ||||
| 
 | ||||
|     def showEvent(self, event): | ||||
|         # have to do this here as the frameGeometry is not correct until shown | ||||
|         move_to_screen_center(self) | ||||
|         super().showEvent(event) | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     import sys | ||||
|  | ||||
| @ -16,9 +16,8 @@ from core.util import executable_folder | ||||
| from hscommon.util import first | ||||
| 
 | ||||
| from PyQt5.QtCore import QStandardPaths | ||||
| from PyQt5.QtGui import QPixmap, QIcon | ||||
| from PyQt5.QtGui import QPixmap, QIcon, QGuiApplication | ||||
| from PyQt5.QtWidgets import ( | ||||
|     QDesktopWidget, | ||||
|     QSpacerItem, | ||||
|     QSizePolicy, | ||||
|     QAction, | ||||
| @ -28,8 +27,19 @@ from PyQt5.QtWidgets import ( | ||||
| 
 | ||||
| def move_to_screen_center(widget): | ||||
|     frame = widget.frameGeometry() | ||||
|     frame.moveCenter(QDesktopWidget().availableGeometry().center()) | ||||
|     widget.move(frame.topLeft()) | ||||
|     if QGuiApplication.screenAt(frame.center()) is None: | ||||
|         # if center not on any screen use default screen | ||||
|         screen = QGuiApplication.screens()[0].availableGeometry() | ||||
|     else: | ||||
|         screen = QGuiApplication.screenAt(frame.center()).availableGeometry() | ||||
|     # moves to center of screen if partially off screen | ||||
|     if screen.contains(frame) is False: | ||||
|         # make sure the frame is not larger than screen | ||||
|         # resize does not seem to take frame size into account (move does) | ||||
|         widget.resize(frame.size().boundedTo(screen.size() - (frame.size() - widget.size()))) | ||||
|         frame = widget.frameGeometry() | ||||
|         frame.moveCenter(screen.center()) | ||||
|         widget.move(frame.topLeft()) | ||||
| 
 | ||||
| 
 | ||||
| def vertical_spacer(size=None): | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user