@@ -489,6 +489,12 @@ def _add_defaults(self, data):
489489 new_data .update (data )
490490 return new_data
491491
492+ def _prepare_defaults (self , widget ):
493+ self .defaults = self .provider .pack (widget )
494+ for setting , data , _ in self .provider .traverse_settings (data = self .defaults ):
495+ if setting .schema_only :
496+ data .pop (setting .name , None )
497+
492498 def pack_data (self , widget ):
493499 """
494500 Pack the settings for the given widget. This method is used when
@@ -504,6 +510,7 @@ def pack_data(self, widget):
504510 ----------
505511 widget : OWWidget
506512 """
513+ widget .settingsAboutToBePacked .emit ()
507514 packed_settings = self .provider .pack (widget )
508515 packed_settings [VERSION_KEY ] = self .widget_class .settings_version
509516 return packed_settings
@@ -517,10 +524,8 @@ def update_defaults(self, widget):
517524 ----------
518525 widget : OWWidget
519526 """
520- self .defaults = self .provider .pack (widget )
521- for setting , data , _ in self .provider .traverse_settings (data = self .defaults ):
522- if setting .schema_only :
523- data .pop (setting .name , None )
527+ widget .settingsAboutToBePacked .emit ()
528+ self ._prepare_defaults (widget )
524529 self .write_defaults ()
525530
526531 def fast_save (self , widget , name , value ):
@@ -675,6 +680,7 @@ def update_defaults(self, widget):
675680 Merge the widgets local contexts into the global contexts and persist
676681 the settings (including the contexts) to disk.
677682 """
683+ widget .settingsAboutToBePacked .emit ()
678684 self .settings_from_widget (widget )
679685 globs = self .global_contexts
680686 assert widget .context_settings is not globs
@@ -683,7 +689,10 @@ def update_defaults(self, widget):
683689 globs .sort (key = lambda c : - c .time )
684690 del globs [self .MAX_SAVED_CONTEXTS :]
685691
686- super ().update_defaults (widget )
692+ # Save non-context settings. Do not call super().update_defaults, so that
693+ # settingsAboutToBePacked is emitted once.
694+ self ._prepare_defaults (widget )
695+ self .write_defaults ()
687696
688697 def new_context (self , * args ):
689698 """Create a new context."""
0 commit comments