Fix preference dirty tagging for addons & keymaps
authorCampbell Barton <ideasman42@gmail.com>
Tue, 14 May 2019 23:44:56 +0000 (09:44 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 14 May 2019 23:47:07 +0000 (09:47 +1000)
source/blender/editors/interface/interface_handlers.c

index ca5bb94..e4adf75 100644 (file)
@@ -554,13 +554,26 @@ static bool ui_but_dragedit_update_mval(uiHandleButtonData *data, int mx)
 static void ui_but_update_preferences_dirty(uiBut *but)
 {
   /* Not very elegant, but ensures preference changes force re-save. */
-  if (but->rnaprop && (but->rnapoin.data == &U)) {
-    /* Exclude navigation from setting dirty. */
-    extern PropertyRNA rna_Preferences_active_section;
-    if (!ELEM(but->rnaprop, &rna_Preferences_active_section)) {
-      U.runtime.is_dirty = true;
-      WM_main_add_notifier(NC_WINDOW, NULL);
+  bool tag = false;
+  if (but->rnaprop) {
+    if (but->rnapoin.data == &U) {
+      /* Exclude navigation from setting dirty. */
+      extern PropertyRNA rna_Preferences_active_section;
+      if (!ELEM(but->rnaprop, &rna_Preferences_active_section)) {
+        tag = true;
+      }
     }
+    else {
+      StructRNA *base = RNA_struct_base(but->rnapoin.type);
+      if (ELEM(base, &RNA_AddonPreferences, &RNA_KeyConfigPreferences)) {
+        tag = true;
+      }
+    }
+  }
+
+  if (tag) {
+    U.runtime.is_dirty = true;
+    WM_main_add_notifier(NC_WINDOW, NULL);
   }
 }