Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_file/space_file.c
| Show First 20 Lines • Show All 111 Lines • ▼ Show 20 Lines | static SpaceLink *file_new(const bContext *UNUSED(C)) | ||||
| return (SpaceLink *)sfile; | return (SpaceLink *)sfile; | ||||
| } | } | ||||
| /* not spacelink itself */ | /* not spacelink itself */ | ||||
| static void file_free(SpaceLink *sl) | static void file_free(SpaceLink *sl) | ||||
| { | { | ||||
| SpaceFile *sfile = (SpaceFile *) sl; | SpaceFile *sfile = (SpaceFile *) sl; | ||||
| BLI_assert(sfile->previews_timer == NULL); | |||||
| if (sfile->files) { | if (sfile->files) { | ||||
| // XXXXX would need to do thumbnails_stop here, but no context available | // XXXXX would need to do thumbnails_stop here, but no context available | ||||
| filelist_freelib(sfile->files); | filelist_freelib(sfile->files); | ||||
| filelist_free(sfile->files); | filelist_free(sfile->files); | ||||
| MEM_freeN(sfile->files); | MEM_freeN(sfile->files); | ||||
| sfile->files = NULL; | sfile->files = NULL; | ||||
| } | } | ||||
| Show All 37 Lines | static void file_init(wmWindowManager *UNUSED(wm), ScrArea *sa) | ||||
| if (sfile->layout) sfile->layout->dirty = true; | if (sfile->layout) sfile->layout->dirty = true; | ||||
| } | } | ||||
| static void file_exit(wmWindowManager *wm, ScrArea *sa) | static void file_exit(wmWindowManager *wm, ScrArea *sa) | ||||
| { | { | ||||
| SpaceFile *sfile = (SpaceFile *)sa->spacedata.first; | SpaceFile *sfile = (SpaceFile *)sa->spacedata.first; | ||||
| ED_fileselect_exit(wm, sfile); | if (sfile->previews_timer) { | ||||
| WM_event_remove_timer_notifier(wm, NULL, sfile->previews_timer); | |||||
| sfile->previews_timer = NULL; | |||||
| } | |||||
| ED_fileselect_exit(wm, sa, sfile); | |||||
| } | } | ||||
| static SpaceLink *file_duplicate(SpaceLink *sl) | static SpaceLink *file_duplicate(SpaceLink *sl) | ||||
| { | { | ||||
| SpaceFile *sfileo = (SpaceFile *)sl; | SpaceFile *sfileo = (SpaceFile *)sl; | ||||
| SpaceFile *sfilen = MEM_dupallocN(sl); | SpaceFile *sfilen = MEM_dupallocN(sl); | ||||
| /* clear or remove stuff from old */ | /* clear or remove stuff from old */ | ||||
| Show All 24 Lines | static void file_refresh(const bContext *C, ScrArea *sa) | ||||
| FileSelectParams *params = ED_fileselect_get_params(sfile); | FileSelectParams *params = ED_fileselect_get_params(sfile); | ||||
| struct FSMenu *fsmenu = ED_fsmenu_get(); | struct FSMenu *fsmenu = ED_fsmenu_get(); | ||||
| if (!sfile->folders_prev) { | if (!sfile->folders_prev) { | ||||
| sfile->folders_prev = folderlist_new(); | sfile->folders_prev = folderlist_new(); | ||||
| } | } | ||||
| if (!sfile->files) { | if (!sfile->files) { | ||||
| sfile->files = filelist_new(params->type); | sfile->files = filelist_new(params->type); | ||||
| filelist_setdir(sfile->files, params->dir); | |||||
| params->highlight_file = -1; /* added this so it opens nicer (ton) */ | params->highlight_file = -1; /* added this so it opens nicer (ton) */ | ||||
| } | } | ||||
| filelist_setdir(sfile->files, params->dir); | |||||
| filelist_setrecursion(sfile->files, params->recursion_level); | |||||
| filelist_setsorting(sfile->files, params->sort); | filelist_setsorting(sfile->files, params->sort); | ||||
| filelist_setfilter_options(sfile->files, params->flag & FILE_HIDE_DOT, | filelist_setfilter_options(sfile->files, (params->flag & FILE_HIDE_DOT) != 0, | ||||
| false, /* TODO hide_parent, should be controllable? */ | false, /* TODO hide_parent, should be controllable? */ | ||||
| params->flag & FILE_FILTER ? params->filter : 0, | params->flag & FILE_FILTER ? params->filter : 0, | ||||
| params->filter_id, | |||||
| params->filter_glob, | params->filter_glob, | ||||
| params->filter_search); | params->filter_search); | ||||
| /* Update the active indices of bookmarks & co. */ | /* Update the active indices of bookmarks & co. */ | ||||
| sfile->systemnr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_SYSTEM, params->dir); | sfile->systemnr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_SYSTEM, params->dir); | ||||
| sfile->system_bookmarknr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_SYSTEM_BOOKMARKS, params->dir); | sfile->system_bookmarknr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_SYSTEM_BOOKMARKS, params->dir); | ||||
| sfile->bookmarknr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_BOOKMARKS, params->dir); | sfile->bookmarknr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_BOOKMARKS, params->dir); | ||||
| sfile->recentnr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_RECENT, params->dir); | sfile->recentnr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_RECENT, params->dir); | ||||
| if (filelist_force_reset(sfile->files)) { | |||||
| filelist_readjob_stop(wm, sa); | |||||
| filelist_clear(sfile->files); | |||||
| } | |||||
| if (filelist_empty(sfile->files)) { | if (filelist_empty(sfile->files)) { | ||||
| thumbnails_stop(wm, sfile->files); | if (!filelist_pending(sfile->files)) { | ||||
| filelist_readdir(sfile->files); | filelist_readjob_start(sfile->files, C); | ||||
| filelist_sort(sfile->files); | |||||
| BLI_strncpy(params->dir, filelist_dir(sfile->files), FILE_MAX); | |||||
| } | } | ||||
| else if (filelist_need_sorting(sfile->files)) { | |||||
| thumbnails_stop(wm, sfile->files); | |||||
| filelist_sort(sfile->files); | |||||
| } | } | ||||
| if ((params->display == FILE_IMGDISPLAY) && filelist_need_thumbnails(sfile->files)) { | filelist_sort(sfile->files); | ||||
| if (!thumbnails_running(wm, sfile->files)) { | filelist_filter(sfile->files); | ||||
| thumbnails_start(sfile->files, C); | |||||
| } | if (params->display == FILE_IMGDISPLAY) { | ||||
| filelist_cache_previews_set(sfile->files, true); | |||||
| } | } | ||||
| else { | else { | ||||
| /* stop any running thumbnail jobs if we're not displaying them - speedup for NFS */ | filelist_cache_previews_set(sfile->files, false); | ||||
| thumbnails_stop(wm, sfile->files); | if (sfile->previews_timer) { | ||||
| WM_event_remove_timer_notifier(wm, CTX_wm_window(C), sfile->previews_timer); | |||||
| sfile->previews_timer = NULL; | |||||
| } | |||||
| } | } | ||||
| filelist_filter(sfile->files); | |||||
| if (params->renamefile[0] != '\0') { | if (params->renamefile[0] != '\0') { | ||||
| int idx = filelist_find(sfile->files, params->renamefile); | int idx = filelist_file_findpath(sfile->files, params->renamefile); | ||||
| if (idx >= 0) { | if (idx >= 0) { | ||||
| struct direntry *file = filelist_file(sfile->files, idx); | FileDirEntry *file = filelist_file(sfile->files, idx); | ||||
| if (file) { | if (file) { | ||||
| file->selflag |= FILE_SEL_EDITING; | filelist_entry_select_set(sfile->files, file, FILE_SEL_ADD, FILE_SEL_EDITING, CHECK_ALL); | ||||
| } | } | ||||
| } | } | ||||
| BLI_strncpy(sfile->params->renameedit, sfile->params->renamefile, sizeof(sfile->params->renameedit)); | BLI_strncpy(sfile->params->renameedit, sfile->params->renamefile, sizeof(sfile->params->renameedit)); | ||||
| /* File listing is now async, do not clear renamefile if matching entry not found | |||||
| * and dirlist is not finished! */ | |||||
| if (idx >= 0 || filelist_is_ready(sfile->files)) { | |||||
| params->renamefile[0] = '\0'; | params->renamefile[0] = '\0'; | ||||
| } | } | ||||
| } | |||||
| if (sfile->layout) { | if (sfile->layout) { | ||||
| sfile->layout->dirty = true; | sfile->layout->dirty = true; | ||||
| } | } | ||||
| /* Might be called with NULL sa, see file_main_area_draw() below. */ | /* Might be called with NULL sa, see file_main_area_draw() below. */ | ||||
| if (sa && BKE_area_find_region_type(sa, RGN_TYPE_TOOLS) == NULL) { | if (sa && BKE_area_find_region_type(sa, RGN_TYPE_TOOLS) == NULL) { | ||||
| /* Create TOOLS/TOOL_PROPS regions. */ | /* Create TOOLS/TOOL_PROPS regions. */ | ||||
| file_tools_region(sa); | file_tools_region(sa); | ||||
| ED_area_initialize(wm, CTX_wm_window(C), sa); | ED_area_initialize(wm, CTX_wm_window(C), sa); | ||||
| ED_area_tag_redraw(sa); | ED_area_tag_redraw(sa); | ||||
| } | } | ||||
| } | } | ||||
| static void file_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn) | static void file_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn) | ||||
| { | { | ||||
| /* SpaceFile *sfile = (SpaceFile *)sa->spacedata.first; */ | SpaceFile *sfile = (SpaceFile *)sa->spacedata.first; | ||||
| /* context changes */ | /* context changes */ | ||||
| switch (wmn->category) { | switch (wmn->category) { | ||||
| case NC_SPACE: | case NC_SPACE: | ||||
| switch (wmn->data) { | switch (wmn->data) { | ||||
| case ND_SPACE_FILE_LIST: | case ND_SPACE_FILE_LIST: | ||||
| ED_area_tag_refresh(sa); | ED_area_tag_refresh(sa); | ||||
| ED_area_tag_redraw(sa); | ED_area_tag_redraw(sa); | ||||
| break; | break; | ||||
| case ND_SPACE_FILE_PARAMS: | case ND_SPACE_FILE_PARAMS: | ||||
| ED_area_tag_refresh(sa); | ED_area_tag_refresh(sa); | ||||
| ED_area_tag_redraw(sa); | ED_area_tag_redraw(sa); | ||||
| break; | break; | ||||
| case ND_SPACE_FILE_PREVIEW: | |||||
| if (filelist_cache_previews_update(sfile->files)) { | |||||
| ED_area_tag_refresh(sa); | |||||
| ED_area_tag_redraw(sa); | |||||
| } | |||||
| break; | |||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| /* add handlers, stuff you only do once or on area/region changes */ | /* add handlers, stuff you only do once or on area/region changes */ | ||||
| static void file_main_area_init(wmWindowManager *wm, ARegion *ar) | static void file_main_area_init(wmWindowManager *wm, ARegion *ar) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 450 Lines • Show Last 20 Lines | |||||