diff options
author | Harley Acheson <harley.acheson@gmail.com> | 2020-01-28 20:10:50 +0300 |
---|---|---|
committer | Harley Acheson <harley.acheson@gmail.com> | 2020-01-28 20:10:50 +0300 |
commit | 1af8e0cc6c47b43bf9c94a3f845961f4d22cb34e (patch) | |
tree | 71f58cda860c7aebb32c06d0795fbf386d99b78e /source/blender/editors/space_file/fsmenu.c | |
parent | a5790b26563c216dce262586369fdca1061b4850 (diff) |
UI: Windows Platform File Browser System List
Showing Windows special folder locations with icons in File Browser System list.
https://developer.blender.org/D6405
Reviewed by Brecht Van Lommel
Diffstat (limited to 'source/blender/editors/space_file/fsmenu.c')
-rw-r--r-- | source/blender/editors/space_file/fsmenu.c | 62 |
1 files changed, 47 insertions, 15 deletions
diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index da105da77ab..4458b38cd2f 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -31,6 +31,8 @@ #include "BLI_utildefines.h" #include "BLI_blenlib.h" +#include "BLT_translation.h" + #include "BKE_appdir.h" #include "ED_fileselect.h" @@ -270,7 +272,7 @@ void fsmenu_insert_entry(struct FSMenu *fsmenu, FSMenuCategory category, const char *path, const char *name, - const int icon, + int icon, FSMenuInsert flag) { FSMenuEntry *fsm_prev; @@ -311,19 +313,22 @@ void fsmenu_insert_entry(struct FSMenu *fsmenu, fsm_iter->path = BLI_strdup(path); fsm_iter->save = (flag & FS_INSERT_SAVE) != 0; - if ((category == FS_CATEGORY_RECENT) && (!name || !name[0])) { - /* Special handling when adding new recent entry - check if dir exists in - * some other categories, and try to use name from there if so. */ + /* If entry is also in another list, use that icon and maybe name. */ + if (ELEM(category, FS_CATEGORY_BOOKMARKS, FS_CATEGORY_RECENT)) { + FSMenuCategory cats[] = { FS_CATEGORY_SYSTEM, FS_CATEGORY_SYSTEM_BOOKMARKS, FS_CATEGORY_BOOKMARKS}; int i = ARRAY_SIZE(cats); + if (category == FS_CATEGORY_BOOKMARKS) { + i--; + } while (i--) { FSMenuEntry *tfsm = ED_fsmenu_get_category(fsmenu, cats[i]); - for (; tfsm; tfsm = tfsm->next) { if (STREQ(tfsm->path, fsm_iter->path)) { - if (tfsm->name[0]) { + icon = tfsm->icon; + if (tfsm->name[0] && (!name || !name[0])) { name = tfsm->name; } break; @@ -485,6 +490,25 @@ void fsmenu_read_bookmarks(struct FSMenu *fsmenu, const char *filename) fclose(fp); } +#ifdef WIN32 +/* Add a Windows known folder path to the System list. */ +static void fsmenu_add_windows_folder(struct FSMenu *fsmenu, + REFKNOWNFOLDERID rfid, + const char *name, + const int icon, + FSMenuInsert flag) +{ + LPWSTR pPath; + char line[FILE_MAXDIR]; + if (SHGetKnownFolderPath(rfid, 0, NULL, &pPath) == S_OK) { + BLI_strncpy_wchar_as_utf8(line, pPath, FILE_MAXDIR); + CoTaskMemFree(pPath); + BLI_add_slash(line); + fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM_BOOKMARKS, line, name, icon, flag); + } +} +#endif + void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks) { char line[FILE_MAXDIR]; @@ -541,16 +565,24 @@ void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks) } } - /* Adding Desktop and My Documents */ + /* Get Special Folder Locations. */ if (read_bookmarks) { - SHGetSpecialFolderPathW(0, wline, CSIDL_PERSONAL, 0); - BLI_strncpy_wchar_as_utf8(line, wline, FILE_MAXDIR); - fsmenu_insert_entry( - fsmenu, FS_CATEGORY_SYSTEM_BOOKMARKS, line, NULL, ICON_DOCUMENTS, FS_INSERT_SORTED); - SHGetSpecialFolderPathW(0, wline, CSIDL_DESKTOPDIRECTORY, 0); - BLI_strncpy_wchar_as_utf8(line, wline, FILE_MAXDIR); - fsmenu_insert_entry( - fsmenu, FS_CATEGORY_SYSTEM_BOOKMARKS, line, NULL, ICON_DESKTOP, FS_INSERT_SORTED); + fsmenu_add_windows_folder( + fsmenu, &FOLDERID_Profile, IFACE_("Home"), ICON_HOME, FS_INSERT_LAST); + fsmenu_add_windows_folder( + fsmenu, &FOLDERID_Desktop, IFACE_("Desktop"), ICON_DESKTOP, FS_INSERT_LAST); + fsmenu_add_windows_folder( + fsmenu, &FOLDERID_Documents, IFACE_("Documents"), ICON_DOCUMENTS, FS_INSERT_LAST); + fsmenu_add_windows_folder( + fsmenu, &FOLDERID_Downloads, IFACE_("Downloads"), ICON_IMPORT, FS_INSERT_LAST); + fsmenu_add_windows_folder( + fsmenu, &FOLDERID_Music, IFACE_("Music"), ICON_FILE_SOUND, FS_INSERT_LAST); + fsmenu_add_windows_folder( + fsmenu, &FOLDERID_Pictures, IFACE_("Pictures"), ICON_FILE_IMAGE, FS_INSERT_LAST); + fsmenu_add_windows_folder( + fsmenu, &FOLDERID_Videos, IFACE_("Videos"), ICON_FILE_MOVIE, FS_INSERT_LAST); + fsmenu_add_windows_folder( + fsmenu, &FOLDERID_Fonts, IFACE_("Fonts"), ICON_FONTPREVIEW, FS_INSERT_LAST); } } #else |