diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index b414ef04dd..7a05810f2d 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -702,9 +702,10 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{ self.read_layout_settings() def write_settings(self): - config.set('main_window_geometry', self.saveGeometry()) - dynamic.set('sort_history', self.library_view.model().sort_history) - self.save_layout_state() + with gprefs: # Only write to gprefs once + config.set('main_window_geometry', self.saveGeometry()) + dynamic.set('sort_history', self.library_view.model().sort_history) + self.save_layout_state() def quit(self, checked=True, restart=False, debug_on_restart=False, confirm_quit=True): diff --git a/src/calibre/utils/config.py b/src/calibre/utils/config.py index 3bd6b2c364..734be6c1a4 100644 --- a/src/calibre/utils/config.py +++ b/src/calibre/utils/config.py @@ -240,6 +240,7 @@ class XMLConfig(dict): def __init__(self, rel_path_to_cf_file): dict.__init__(self) + self.no_commit = False self.defaults = {} self.file_path = os.path.join(config_dir, *(rel_path_to_cf_file.split('/'))) @@ -304,6 +305,7 @@ class XMLConfig(dict): self.commit() def commit(self): + if self.no_commit: return if hasattr(self, 'file_path') and self.file_path: dpath = os.path.dirname(self.file_path) if not os.path.exists(dpath): @@ -314,6 +316,13 @@ class XMLConfig(dict): f.truncate() f.write(raw) + def __enter__(self): + self.no_commit = True + + def __exit__(self, *args): + self.no_commit = False + self.commit() + def to_json(obj): if isinstance(obj, bytearray): return {'__class__': 'bytearray',