@@ -86,6 +86,10 @@ def __init__(self, app_name, app_version, window_name, parent = None):
8686 self .setAnimated (False )
8787 self .setDockNestingEnabled (True )
8888
89+ # Create checkable menuitem
90+ self .saveWindowSettingsCheck = QtWidgets .QAction ("Save Window Settings on Exit" , self )
91+ self .saveWindowSettingsCheck .setCheckable (True )
92+
8993 # Register this window
9094 self .__windowOpened ()
9195
@@ -138,7 +142,9 @@ def handleExit(self, sig, flag):
138142 """Save current state and close the application"""
139143 del sig
140144 del flag
141- self .__saveSettings ()
145+ # Only save settings on exit if toggled
146+ if self .saveWindowSettingsCheck .isChecked ():
147+ self .__saveSettings ()
142148 self .__windowCloseApplication ()
143149
144150 @staticmethod
@@ -293,6 +299,10 @@ def __windowMenuSetup(self, menu):
293299 changeTitle .triggered .connect (self .__windowMenuHandleChangeTitle ) # pylint: disable=no-member
294300 menu .addAction (changeTitle )
295301
302+ # Menu Bar: Window -> Save Window Settings on Exit
303+ self .saveWindowSettingsCheck .triggered .connect (self .__saveSettingsToggle ) # pylint: disable=no-member
304+ menu .addAction (self .saveWindowSettingsCheck )
305+
296306 # Menu Bar: Window -> Save Window Settings
297307 saveWindowSettings = QtWidgets .QAction ("Save Window Settings" , self )
298308 saveWindowSettings .triggered .connect (self .__saveSettings ) # pylint: disable=no-member
@@ -402,9 +412,6 @@ def __windowOpened(self):
402412 def __windowClosed (self ):
403413 """Called from closeEvent on window close"""
404414
405- # Save the fact that this window is open or not when the app closed
406- self .settings .setValue ("%s/Open" % self .name , self .app .closingApp )
407-
408415 # pylint: disable=bare-except
409416 try :
410417 self .windows .remove (self )
@@ -456,7 +463,9 @@ def closeEvent(self, event):
456463 @type event: QEvent
457464 @param event: The close event"""
458465 del event
459- self .__saveSettings ()
466+ # Only save settings on exit if toggled
467+ if self .saveWindowSettingsCheck .isChecked ():
468+ self .__saveSettings ()
460469 self .__windowClosed ()
461470
462471 def __restoreSettings (self ):
@@ -472,6 +481,15 @@ def __restoreSettings(self):
472481 self .move (self .settings .value ("%s/Position" % self .name ,
473482 QtCore .QPoint (0 , 0 )))
474483
484+ self .saveWindowSettingsCheck .setChecked (self .settings .value ("SaveOnExit" , "true" ) == "true" )
485+
486+ def __saveSettingsToggle (self , checked ):
487+ """Toggles saving window settings on exit"""
488+
489+ # Make sure that it has the same state in all windows
490+ for window in self .windows :
491+ window .saveWindowSettingsCheck .setChecked (checked )
492+
475493 def __saveSettings (self ):
476494 """Saves the windows settings"""
477495 logger .info ('Saving: %s' , self .settings .fileName ())
@@ -480,6 +498,15 @@ def __saveSettings(self):
480498
481499 # For populating the default state: print self.saveState().toBase64()
482500
501+ # Save the fact that this window is open or not
502+ for windowName in self .windows_names :
503+ for window in self .windows :
504+ if window .name == windowName :
505+ self .settings .setValue ("%s/Open" % windowName , True )
506+ break
507+ else :
508+ self .settings .setValue ("%s/Open" % windowName , False )
509+
483510 self .settings .setValue ("Version" , self .app_version )
484511
485512 self .settings .setValue ("%s/Title" % self .name ,
@@ -491,6 +518,8 @@ def __saveSettings(self):
491518 self .settings .setValue ("%s/Position" % self .name ,
492519 self .pos ())
493520
521+ self .settings .setValue ("SaveOnExit" , self .saveWindowSettingsCheck .isChecked ())
522+
494523 def __revertLayout (self ):
495524 """Revert back to default window layout"""
496525 result = QtWidgets .QMessageBox .question (
0 commit comments