From 44ca0a43287020747db479a2206c6b2587547e59 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 3 Jul 2012 13:47:13 +0000 Subject: Fix for the "black F-Curves" bug on undo (From personal stash of bugs - since early 2.5 versions) F-Curve colors get applied only on Graph Editor "refresh()". In some cases, undo was reverting back to a state where the colors had not yet been set. In these cases, there would be no refresh() after that undo (until expanding a channel or some other similar action), resulting in "black F-Curves" appearing. So, now we force such an update after undo to ensure that the curves never display black. (Noticed while investigating another bug for Mango related to CLIP_OT_constraint_to_fcurve not sending notifiers required when new F-Curves are added) --- source/blender/blenloader/intern/readfile.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'source/blender/blenloader') diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 836f723327e..7133f79f880 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -5533,6 +5533,11 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene) if (ads->filter_grp) ads->filter_grp = restore_pointer_by_name(newmain, (ID *)ads->filter_grp, 0); } + + /* force recalc of list of channels (i.e. includes calculating F-Curve colors) + * thus preventing the "black curves" problem post-undo + */ + sipo->flag |= SIPO_TEMP_NEEDCHANSYNC; } else if (sl->spacetype == SPACE_BUTS) { SpaceButs *sbuts = (SpaceButs *)sl; @@ -5547,10 +5552,10 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene) SpaceAction *saction = (SpaceAction *)sl; saction->action = restore_pointer_by_name(newmain, (ID *)saction->action, 1); - saction->ads.source= restore_pointer_by_name(newmain, (ID *)saction->ads.source, 1); + saction->ads.source = restore_pointer_by_name(newmain, (ID *)saction->ads.source, 1); if (saction->ads.filter_grp) - saction->ads.filter_grp= restore_pointer_by_name(newmain, (ID *)saction->ads.filter_grp, 0); + saction->ads.filter_grp = restore_pointer_by_name(newmain, (ID *)saction->ads.filter_grp, 0); /* force recalc of list of channels, potentially updating the active action -- cgit v1.2.3