diff --git a/src/calibre/gui_launch.py b/src/calibre/gui_launch.py index 28ef8eaea3..afe0f33910 100644 --- a/src/calibre/gui_launch.py +++ b/src/calibre/gui_launch.py @@ -41,17 +41,33 @@ def init_dbus(): threads_init() DBusGMainLoop(set_as_default=True) +def register_with_default_programs(): + from calibre.constants import iswindows + if iswindows: + from calibre.utils.winreg.default_programs import Register + from calibre.gui2 import gprefs + return Register(gprefs) + else: + class Dummy(object): + def __enter__(self): + return self + def __exit__(self, *args): + pass + return Dummy() + def calibre(args=sys.argv): detach_gui() init_dbus() - from calibre.gui2.main import main - main(args) + with register_with_default_programs(): + from calibre.gui2.main import main + main(args) def ebook_viewer(args=sys.argv): detach_gui() init_dbus() - from calibre.gui2.viewer.main import main - main(args) + with register_with_default_programs(): + from calibre.gui2.viewer.main import main + main(args) def gui_ebook_edit(path=None, notify=None): ' For launching the editor from inside calibre ' @@ -62,8 +78,9 @@ def gui_ebook_edit(path=None, notify=None): def ebook_edit(args=sys.argv): detach_gui() init_dbus() - from calibre.gui2.tweak_book.main import main - main(args) + with register_with_default_programs(): + from calibre.gui2.tweak_book.main import main + main(args) def option_parser(basename): if basename == 'calibre': diff --git a/src/calibre/utils/winreg/default_programs.py b/src/calibre/utils/winreg/default_programs.py index f5dbb3087e..49d1d482e8 100644 --- a/src/calibre/utils/winreg/default_programs.py +++ b/src/calibre/utils/winreg/default_programs.py @@ -6,7 +6,7 @@ from __future__ import (unicode_literals, division, absolute_import, __license__ = 'GPL v3' __copyright__ = '2015, Kovid Goyal ' -import os, sys +import os, sys, time from threading import Thread from calibre import guess_type, prints @@ -157,5 +157,16 @@ class Register(Thread): if self.prefs.get('windows_register_default_programs', None) != __version__: self.prefs['windows_register_default_programs'] = __version__ if DEBUG: + st = time.time() prints('Registering with default programs...') register() + if DEBUG: + prints('Registered with default programs in %.1f seconds' % (time.time() - st)) + + def __enter__(self): + return self + + def __exit__(self, *args): + # Give the thread some time to finish in case the user quit the + # application very quickly + self.join(4.0)