mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04: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