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