diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2015-02-16 17:48:37 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2015-02-16 17:58:57 +0300 |
commit | 0dfdca6d132dd0b26307ab0c35be87f78da98022 (patch) | |
tree | afd84c26a68b34e6b9b160bfe28a283d8ae45b1a /source/blender/editors/space_file/fsmenu.c | |
parent | fd4f0ed39e7b6482218af59f69187525d565ecf0 (diff) |
Fix T43684: File Browser is unusable on Windows Machines (do not BLI_is_dir() in draw loop!)
Did not had any issue on linux, but looks like on some windows can slow things as Hell.
Or maybe just the presence of some network FS?
Anyway, not a good idea, so now fsmenu entries' valid status is stored and only evaluated
on startup (reading of bookmarks & co) and when opening file browser (refresh, like
for system bookmarks).
Diffstat (limited to 'source/blender/editors/space_file/fsmenu.c')
-rw-r--r-- | source/blender/editors/space_file/fsmenu.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index 8d4384acba6..f717573d965 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -216,6 +216,16 @@ void ED_fsmenu_entry_set_name(struct FSMenuEntry *fsentry, const char *name) } } +void fsmenu_entry_refresh_valid(struct FSMenuEntry *fsentry) +{ + if (fsentry->path && fsentry->path[0]) { + fsentry->valid = BLI_is_dir(fsentry->path); + } + else { + fsentry->valid = false; + } +} + short fsmenu_can_save(struct FSMenu *fsmenu, FSMenuCategory category, int idx) { FSMenuEntry *fsm_iter; @@ -272,6 +282,7 @@ void fsmenu_insert_entry(struct FSMenu *fsmenu, FSMenuCategory category, const c else { fsm_iter->name[0] = '\0'; } + fsmenu_entry_refresh_valid(fsm_iter); if (fsm_prev) { if (flag & FS_INSERT_FIRST) { @@ -640,6 +651,19 @@ void fsmenu_refresh_system_category(struct FSMenu *fsmenu) fsmenu_read_system(fsmenu, true); } +void fsmenu_refresh_bookmarks_status(struct FSMenu *fsmenu) +{ + int categories[] = {FS_CATEGORY_SYSTEM, FS_CATEGORY_SYSTEM_BOOKMARKS, FS_CATEGORY_BOOKMARKS, FS_CATEGORY_RECENT}; + int i; + + for (i = sizeof(categories) / sizeof(*categories); i--; ) { + FSMenuEntry *fsm_iter = ED_fsmenu_get_category(fsmenu, categories[i]); + for ( ; fsm_iter; fsm_iter = fsm_iter->next) { + fsmenu_entry_refresh_valid(fsm_iter); + } + } +} + void fsmenu_free(void) { if (g_fsmenu) { |