Fix image filepath changes not refreshing all image users.

This commit is contained in:
2019-02-18 15:22:02 +01:00
parent a6443b5d1e
commit 286c34b4ab
3 changed files with 18 additions and 17 deletions

View File

@@ -411,13 +411,6 @@ static bool rewrite_path_alloc(char **path, BPathVisitor visit_cb, const char *a
}
}
/* fix the image user "ok" tag after updating paths, so ImBufs get loaded */
static void bpath_traverse_image_user_cb(Image *ima, ImageUser *iuser, void *customdata)
{
if (ima == customdata)
iuser->ok = 1;
}
/* Run visitor function 'visit' on all paths contained in 'id'. */
void BKE_bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int flag, void *bpath_user_data)
{
@@ -441,7 +434,6 @@ void BKE_bpath_traverse_id(Main *bmain, ID *id, BPathVisitor visit_cb, const int
!BKE_image_is_dirty(ima))
{
BKE_image_signal(bmain, ima, NULL, IMA_SIGNAL_RELOAD);
BKE_image_walk_all_users(bmain, ima, bpath_traverse_image_user_cb);
}
}
}

View File

@@ -2775,6 +2775,19 @@ static void image_tag_frame_recalc(Image *ima, ImageUser *iuser, void *customdat
if (ima == changed_image && BKE_image_is_animated(ima)) {
iuser->flag |= IMA_NEED_FRAME_RECALC;
iuser->ok = 1;
}
}
static void image_tag_reload(Image *ima, ImageUser *iuser, void *customdata)
{
Image *changed_image = customdata;
if (ima == changed_image) {
iuser->ok = 1;
if (iuser->scene) {
image_update_views_format(ima, iuser);
}
}
}
@@ -2847,9 +2860,9 @@ void BKE_image_signal(Main *bmain, Image *ima, ImageUser *iuser, int signal)
BKE_image_free_buffers(ima);
ima->ok = 1;
if (iuser)
iuser->ok = 1;
if (iuser) {
image_tag_frame_recalc(ima, iuser, ima);
}
BKE_image_walk_all_users(bmain, ima, image_tag_frame_recalc);
break;
@@ -2886,12 +2899,9 @@ void BKE_image_signal(Main *bmain, Image *ima, ImageUser *iuser, int signal)
BKE_image_free_buffers(ima);
if (iuser) {
iuser->ok = 1;
if (iuser->scene) {
image_update_views_format(ima, iuser);
}
image_tag_reload(ima, iuser, ima);
}
BKE_image_walk_all_users(bmain, ima, image_tag_reload);
break;
case IMA_SIGNAL_USER_NEW_IMAGE:
if (iuser) {

View File

@@ -2346,7 +2346,6 @@ static int image_reload_exec(bContext *C, wmOperator *UNUSED(op))
/* XXX unpackImage frees image buffers */
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
// XXX other users?
BKE_image_signal(bmain, ima, (sima) ? &sima->iuser : NULL, IMA_SIGNAL_RELOAD);
DEG_id_tag_update(&ima->id, 0);