mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-03 19:17:02 -05:00 
			
		
		
		
	Do not store a reference to the main window in sys.excepthook
This commit is contained in:
		
							parent
							
								
									942d18810c
								
							
						
					
					
						commit
						208694ec5a
					
				@ -312,7 +312,7 @@ def main(args=sys.argv, logger=None):
 | 
			
		||||
        opts = normalize_settings(parser, opts)
 | 
			
		||||
        stream = open(args[1], 'rb') if len(args) > 1 else None
 | 
			
		||||
        main = file_renderer(stream, opts, logger=logger)
 | 
			
		||||
        sys.excepthook = main.unhandled_exception
 | 
			
		||||
        main.set_exception_handler()
 | 
			
		||||
        main.show()
 | 
			
		||||
        main.render()
 | 
			
		||||
        main.activateWindow()
 | 
			
		||||
 | 
			
		||||
@ -222,7 +222,7 @@ class GuiRunner(QObject):
 | 
			
		||||
            prints('Started up in %.2f seconds'%(time.time() -
 | 
			
		||||
                self.startup_time), 'with', len(db.data), 'books')
 | 
			
		||||
        add_filesystem_book = partial(main.iactions['Add Books'].add_filesystem_book, allow_device=False)
 | 
			
		||||
        sys.excepthook = main.unhandled_exception
 | 
			
		||||
        main.set_exception_handler()
 | 
			
		||||
        if len(self.args) > 1:
 | 
			
		||||
            files = [os.path.abspath(p) for p in self.args[1:] if not
 | 
			
		||||
                    os.path.isdir(p)]
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ __license__   = 'GPL v3'
 | 
			
		||||
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import StringIO, traceback, sys, gc
 | 
			
		||||
import StringIO, traceback, sys, gc, weakref
 | 
			
		||||
 | 
			
		||||
from PyQt5.Qt import (QMainWindow, QTimer, QAction, QMenu, QMenuBar, QIcon,
 | 
			
		||||
                      pyqtSignal, QObject)
 | 
			
		||||
@ -68,6 +68,18 @@ class GarbageCollector(QObject):
 | 
			
		||||
        for obj in gc.garbage:
 | 
			
		||||
            print (obj, repr(obj), type(obj))
 | 
			
		||||
 | 
			
		||||
class ExceptionHandler(object):
 | 
			
		||||
 | 
			
		||||
    def __init__(self, main_window):
 | 
			
		||||
        self.wref = weakref.ref(main_window)
 | 
			
		||||
 | 
			
		||||
    def __call__(self, type, value, tb):
 | 
			
		||||
        mw = self.wref()
 | 
			
		||||
        if mw is not None:
 | 
			
		||||
            mw.unhandled_exception(type, value, tb)
 | 
			
		||||
        else:
 | 
			
		||||
            sys.__excepthook__(type, value, tb)
 | 
			
		||||
 | 
			
		||||
class MainWindow(QMainWindow):
 | 
			
		||||
 | 
			
		||||
    ___menu_bar = None
 | 
			
		||||
@ -115,6 +127,9 @@ class MainWindow(QMainWindow):
 | 
			
		||||
        else:
 | 
			
		||||
            gc.enable() if enabled else gc.disable()
 | 
			
		||||
 | 
			
		||||
    def set_exception_handler(self):
 | 
			
		||||
        sys.excepthook = ExceptionHandler(self)
 | 
			
		||||
 | 
			
		||||
    def unhandled_exception(self, type, value, tb):
 | 
			
		||||
        if type == KeyboardInterrupt:
 | 
			
		||||
            self.keyboard_interrupt.emit()
 | 
			
		||||
 | 
			
		||||
@ -69,7 +69,7 @@ def _run(args, notify=None):
 | 
			
		||||
    Application.setOrganizationName(ORG_NAME)
 | 
			
		||||
    Application.setApplicationName(APP_UID)
 | 
			
		||||
    main = Main(opts, notify=notify)
 | 
			
		||||
    sys.excepthook = main.unhandled_exception
 | 
			
		||||
    main.set_exception_handler()
 | 
			
		||||
    main.show()
 | 
			
		||||
    if len(args) > 1:
 | 
			
		||||
        main.boss.open_book(args[1], edit_file=args[2:], clear_notify_data=False)
 | 
			
		||||
 | 
			
		||||
@ -1187,8 +1187,7 @@ def main(args=sys.argv):
 | 
			
		||||
    # turn_off_internal_scrollbars does not take effect for the first
 | 
			
		||||
    # rendered document
 | 
			
		||||
    main.view.load_path(P('viewer/blank.html', allow_user_override=False))
 | 
			
		||||
 | 
			
		||||
    sys.excepthook = main.unhandled_exception
 | 
			
		||||
    main.set_exception_handler()
 | 
			
		||||
    main.show()
 | 
			
		||||
    if opts.raise_window:
 | 
			
		||||
        main.raise_()
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user