diff --git a/src/calibre/gui2/font_family_chooser.py b/src/calibre/gui2/font_family_chooser.py index 2ddf72fcd0..2da98921c3 100644 --- a/src/calibre/gui2/font_family_chooser.py +++ b/src/calibre/gui2/font_family_chooser.py @@ -118,7 +118,7 @@ class FontFamilyChooser(QComboBox): QComboBox.__init__(self, parent) from calibre.utils.fonts import fontconfig try: - self.families = fontconfig.find_font_families() + ok, self.families = fontconfig.find_font_families_no_delay() except: self.families = [] print ('WARNING: Could not load fonts') diff --git a/src/calibre/utils/fonts/__init__.py b/src/calibre/utils/fonts/__init__.py index 85bcd8eb39..f3fee56033 100644 --- a/src/calibre/utils/fonts/__init__.py +++ b/src/calibre/utils/fonts/__init__.py @@ -6,7 +6,7 @@ __license__ = 'GPL v3' __copyright__ = '2009, Kovid Goyal ' __docformat__ = 'restructuredtext en' -from calibre.constants import iswindows +from calibre.constants import iswindows, isosx class Fonts(object): @@ -23,6 +23,12 @@ class Fonts(object): return self.backend.font_families() return self.backend.find_font_families(allowed_extensions=allowed_extensions) + def find_font_families_no_delay(self, allowed_extensions={'ttf', 'otf'}): + if isosx: + if self.backend.is_scanning(): + return False, [] + return True, self.find_font_families(allowed_extensions=allowed_extensions) + def files_for_family(self, family, normalize=True): ''' Find all the variants in the font family `family`. diff --git a/src/calibre/utils/fonts/fc.py b/src/calibre/utils/fonts/fc.py index 793ee9b6b1..73800d1193 100644 --- a/src/calibre/utils/fonts/fc.py +++ b/src/calibre/utils/fonts/fc.py @@ -8,7 +8,7 @@ __docformat__ = 'restructuredtext en' import os, sys -from calibre.constants import plugins, islinux, isbsd +from calibre.constants import plugins, islinux, isbsd, isosx _fc, _fc_err = plugins['fontconfig'] @@ -44,6 +44,11 @@ class FontConfig(Thread): if not self.failed and hasattr(_fc, 'add_font_dir'): _fc.add_font_dir(P('fonts/liberation')) + def is_scanning(self): + if isosx: + return self.is_alive() + return False + def wait(self): if not (islinux or isbsd): self.join()