diff options
Diffstat (limited to 'source/blender/editors/space_file/space_file.c')
-rw-r--r-- | source/blender/editors/space_file/space_file.c | 68 |
1 files changed, 50 insertions, 18 deletions
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index 0418bb87768..31c7dee294b 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -32,6 +32,7 @@ #include "BKE_appdir.h" #include "BKE_context.h" #include "BKE_global.h" +#include "BKE_main.h" #include "BKE_screen.h" #include "RNA_access.h" @@ -206,7 +207,7 @@ static void file_exit(wmWindowManager *wm, ScrArea *area) sfile->previews_timer = NULL; } - ED_fileselect_exit(wm, NULL, sfile); + ED_fileselect_exit(wm, sfile); } static SpaceLink *file_duplicate(SpaceLink *sl) @@ -360,13 +361,13 @@ static void file_refresh(const bContext *C, ScrArea *area) sfile->recentnr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_RECENT, params->dir); if (filelist_needs_force_reset(sfile->files)) { - filelist_readjob_stop(wm, CTX_data_scene(C)); + filelist_readjob_stop(sfile->files, wm); filelist_clear(sfile->files); } if (filelist_needs_reading(sfile->files)) { if (!filelist_pending(sfile->files)) { - filelist_readjob_start(sfile->files, C); + filelist_readjob_start(sfile->files, NC_SPACE | ND_SPACE_FILE_LIST, C); } } @@ -429,10 +430,10 @@ static void file_reset_filelist_showing_main_data(ScrArea *area, SpaceFile *sfil } } -static void file_listener(const wmSpaceTypeListenerParams *params) +static void file_listener(const wmSpaceTypeListenerParams *listener_params) { - ScrArea *area = params->area; - wmNotifier *wmn = params->notifier; + ScrArea *area = listener_params->area; + wmNotifier *wmn = listener_params->notifier; SpaceFile *sfile = (SpaceFile *)area->spacedata.first; /* context changes */ @@ -469,10 +470,19 @@ static void file_listener(const wmSpaceTypeListenerParams *params) break; case NC_ID: { switch (wmn->action) { - case NA_RENAME: + case NA_RENAME: { + const ID *active_file_id = ED_fileselect_active_asset_get(sfile); + /* If a renamed ID is active in the file browser, update scrolling to keep it in view. */ + if (active_file_id && (wmn->reference == active_file_id)) { + FileSelectParams *params = ED_fileselect_get_active_params(sfile); + params->rename_id = active_file_id; + file_params_invoke_rename_postscroll(G_MAIN->wm.first, listener_params->window, sfile); + } + /* Force list to update sorting (with a full reset for now). */ file_reset_filelist_showing_main_data(area, sfile); break; + } } break; } @@ -508,10 +518,10 @@ static void file_main_region_init(wmWindowManager *wm, ARegion *region) WM_event_add_keymap_handler_v2d_mask(®ion->handlers, keymap); } -static void file_main_region_listener(const wmRegionListenerParams *params) +static void file_main_region_listener(const wmRegionListenerParams *listener_params) { - ARegion *region = params->region; - wmNotifier *wmn = params->notifier; + ARegion *region = listener_params->region; + wmNotifier *wmn = listener_params->notifier; /* context changes */ switch (wmn->category) { @@ -716,14 +726,14 @@ static void file_tools_region_draw(const bContext *C, ARegion *region) ED_region_panels(C, region); } -static void file_tools_region_listener(const wmRegionListenerParams *UNUSED(params)) +static void file_tools_region_listener(const wmRegionListenerParams *UNUSED(listener_params)) { } -static void file_tool_props_region_listener(const wmRegionListenerParams *params) +static void file_tool_props_region_listener(const wmRegionListenerParams *listener_params) { - const wmNotifier *wmn = params->notifier; - ARegion *region = params->region; + const wmNotifier *wmn = listener_params->notifier; + ARegion *region = listener_params->region; switch (wmn->category) { case NC_ID: @@ -789,10 +799,10 @@ static void file_execution_region_draw(const bContext *C, ARegion *region) ED_region_panels(C, region); } -static void file_ui_region_listener(const wmRegionListenerParams *params) +static void file_ui_region_listener(const wmRegionListenerParams *listener_params) { - ARegion *region = params->region; - wmNotifier *wmn = params->notifier; + ARegion *region = listener_params->region; + wmNotifier *wmn = listener_params->notifier; /* context changes */ switch (wmn->category) { @@ -858,7 +868,12 @@ static void file_space_subtype_item_extend(bContext *UNUSED(C), } } -static const char *file_context_dir[] = {"active_file", "id", NULL}; +static const char *file_context_dir[] = { + "active_file", + "asset_library", + "id", + NULL, +}; static int /*eContextResult*/ file_context(const bContext *C, const char *member, @@ -889,6 +904,23 @@ static int /*eContextResult*/ file_context(const bContext *C, CTX_data_pointer_set(result, &screen->id, &RNA_FileSelectEntry, file); return CTX_RESULT_OK; } + if (CTX_data_equals(member, "asset_library")) { + FileAssetSelectParams *asset_params = ED_fileselect_get_asset_params(sfile); + if (!asset_params) { + return CTX_RESULT_NO_DATA; + } + + BLI_STATIC_ASSERT(offsetof(FileSelectAssetLibraryUID, type) == + offsetof(AssetLibraryReference, type), + "Expected FileSelectAssetLibraryUID to match AssetLibraryReference"); + BLI_STATIC_ASSERT(offsetof(FileSelectAssetLibraryUID, custom_library_index) == + offsetof(AssetLibraryReference, custom_library_index), + "Expected FileSelectAssetLibraryUID to match AssetLibraryReference"); + + CTX_data_pointer_set( + result, &screen->id, &RNA_AssetLibraryReference, &asset_params->asset_library); + return CTX_RESULT_OK; + } if (CTX_data_equals(member, "id")) { const FileDirEntry *file = filelist_file(sfile->files, params->active_file); if (file == NULL) { |