Fix T69597: Changing Grease Pencil Layer in Dopesheet unlocks all layers
authorAntonio Vazquez <blendergit@gmail.com>
Fri, 6 Sep 2019 21:33:11 +0000 (23:33 +0200)
committerAntonio Vazquez <blendergit@gmail.com>
Fri, 6 Sep 2019 21:33:29 +0000 (23:33 +0200)
The Dopesheet was unlocked all layers because it was using the same logic used in UI panel, but this was wrong.

source/blender/blenkernel/BKE_gpencil.h
source/blender/blenkernel/intern/gpencil.c
source/blender/editors/animation/anim_channels_edit.c
source/blender/editors/space_action/action_select.c
source/blender/makesrna/intern/rna_gpencil.c

index 011590100de0bf2cb7da3540cd9499cff647798e..590f8258f7d4594506eba5de0e4085b8925c27e0 100644 (file)
@@ -149,7 +149,7 @@ bool BKE_gpencil_layer_delframe(struct bGPDlayer *gpl, struct bGPDframe *gpf);
 struct bGPDlayer *BKE_gpencil_layer_getactive(struct bGPdata *gpd);
 void BKE_gpencil_layer_setactive(struct bGPdata *gpd, struct bGPDlayer *active);
 void BKE_gpencil_layer_delete(struct bGPdata *gpd, struct bGPDlayer *gpl);
-void BKE_gpencil_layer_autolock_set(struct bGPdata *gpd);
+void BKE_gpencil_layer_autolock_set(struct bGPdata *gpd, const bool unlock);
 
 /* Brush */
 struct Material *BKE_gpencil_brush_material_get(struct Brush *brush);
index 47ed9f3bd83a4ce4c34f417a41014423aade3d66..9ac61c69d04370b41f4d7378263ae8d3b02b5d3b 100644 (file)
@@ -1017,7 +1017,7 @@ void BKE_gpencil_layer_setactive(bGPdata *gpd, bGPDlayer *active)
 }
 
 /* Set locked layers for autolock mode. */
-void BKE_gpencil_layer_autolock_set(bGPdata *gpd)
+void BKE_gpencil_layer_autolock_set(bGPdata *gpd, const bool unlock)
 {
   BLI_assert(gpd != NULL);
 
@@ -1041,8 +1041,10 @@ void BKE_gpencil_layer_autolock_set(bGPdata *gpd)
     /* If disable is better unlock all layers by default or it looks there is
      * a problem in the UI because the user expects all layers will be unlocked
      */
-    for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
-      gpl->flag &= ~GP_LAYER_LOCKED;
+    if (unlock) {
+      for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+        gpl->flag &= ~GP_LAYER_LOCKED;
+      }
     }
   }
 }
index 61b8e4a2341079a5bc872876344c6814dab02a8b..afd2cdc2a2bba7b8d25a9e185662ead0caa36e15 100644 (file)
@@ -3114,7 +3114,7 @@ static int mouse_anim_channels(bContext *C, bAnimContext *ac, int channel_index,
         ANIM_set_active_channel(ac, ac->data, ac->datatype, filter, gpl, ANIMTYPE_GPLAYER);
         /* update other layer status */
         BKE_gpencil_layer_setactive(gpd, gpl);
-        BKE_gpencil_layer_autolock_set(gpd);
+        BKE_gpencil_layer_autolock_set(gpd, false);
       }
 
       /* Grease Pencil updates */
index cbf4d0628e68467395858195105ebc7484b26bf8..912cd0407e3e862ae5ca1ff6d7e57be051decfb8 100644 (file)
@@ -1724,7 +1724,7 @@ static void mouse_action_keys(bAnimContext *ac,
         /* Update other layer status. */
         if (BKE_gpencil_layer_getactive(gpd) != gpl) {
           BKE_gpencil_layer_setactive(gpd, gpl);
-          BKE_gpencil_layer_autolock_set(gpd);
+          BKE_gpencil_layer_autolock_set(gpd, false);
           WM_main_add_notifier(NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
         }
       }
index 01ecf2f8cae687080b86472148ece8c09b70509d..333f43e42922c96a577db86eb1350fd36dcd72eb 100644 (file)
@@ -151,7 +151,7 @@ static void rna_GPencil_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Pointe
 static void rna_GPencil_autolock(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
   bGPdata *gpd = (bGPdata *)ptr->owner_id;
-  BKE_gpencil_layer_autolock_set(gpd);
+  BKE_gpencil_layer_autolock_set(gpd, true);
 
   /* standard update */
   rna_GPencil_update(bmain, scene, ptr);