From ed2c4825d3e23441444e5d371278588c946e7551 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Thu, 11 Mar 2021 15:42:22 +0100 Subject: Fix Asset Browser showing oudated list for changes done while browser is hidden Steps to reproduce were: * Open an Asset Browser * "Mark Asset" on some data-block * Change the Asset Browser into a different editor (not File Browser!) * "Clear Asset" on the data-block again, or mark another asset * Change back to the Asset Browser, it will show an outdated list Now the file-browser reloads local file data after spaces were changed. Note that the current notifier code doesn't limit the space-change notifiers to the affected spaces, so changing any visible space will trigger this. That's an issue to be fixed separately. --- source/blender/editors/space_file/space_file.c | 32 ++++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'source/blender/editors/space_file') diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index 039ab3d6907..993b1d9b69c 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -420,6 +420,15 @@ static void file_on_reload_callback_call(SpaceFile *sfile) sfile->runtime->on_reload_custom_data = NULL; } +static void file_reset_filelist_showing_main_data(ScrArea *area, SpaceFile *sfile) +{ + if (sfile->files && filelist_needs_reset_on_main_changes(sfile->files)) { + /* Full refresh of the file list if local asset data was changed. Refreshing this view + * is cheap and users expect this to be updated immediately. */ + file_tag_reset_list(area, sfile); + } +} + static void file_listener(const wmSpaceTypeListenerParams *params) { ScrArea *area = params->area; @@ -446,6 +455,11 @@ static void file_listener(const wmSpaceTypeListenerParams *params) ED_area_tag_refresh(area); } break; + case ND_SPACE_CHANGED: + /* If the space was just turned into a file/asset browser, the file-list may need to be + * updated to reflect latest changes in main data. */ + file_reset_filelist_showing_main_data(area, sfile); + break; } switch (wmn->action) { case NA_JOB_FINISHED: @@ -462,11 +476,7 @@ static void file_listener(const wmSpaceTypeListenerParams *params) case NA_ADDED: case NA_REMOVED: case NA_EDITED: - if (sfile->files && filelist_needs_reset_on_main_changes(sfile->files)) { - /* Full refresh of the file list if local asset data was changed. Refreshing this view - * is cheap and users expect this to be updated immediately. */ - file_tag_reset_list(area, sfile); - } + file_reset_filelist_showing_main_data(area, sfile); break; } break; @@ -890,13 +900,11 @@ static void file_id_remap(ScrArea *area, SpaceLink *sl, ID *UNUSED(old_id), ID * { SpaceFile *sfile = (SpaceFile *)sl; - /* If the file shows main data (IDs), tag it for reset. */ - if (sfile->files && filelist_needs_reset_on_main_changes(sfile->files)) { - /* Full refresh of the file list if main data was changed, don't even attempt remap pointers. - * We could give file list types a id-remap callback, but it's probably not worth it. - * Refreshing local file lists is relatively cheap. */ - file_tag_reset_list(area, sfile); - } + /* If the file shows main data (IDs), tag it for reset. + * Full reset of the file list if main data was changed, don't even attempt remap pointers. + * We could give file list types a id-remap callback, but it's probably not worth it. + * Refreshing local file lists is relatively cheap. */ + file_reset_filelist_showing_main_data(area, sfile); } /* only called once, from space/spacetypes.c */ -- cgit v1.2.3