[Bf-blender-cvs] [84c9a99cca9] master: UI: Mac File Browser System List Changes

Yevgeny Makarov noreply at git.blender.org
Thu Mar 5 19:40:11 CET 2020


Commit: 84c9a99cca903ea02435353f41c1c88525e3f91c
Author: Yevgeny Makarov
Date:   Thu Mar 5 10:38:55 2020 -0800
Branches: master
https://developer.blender.org/rB84c9a99cca903ea02435353f41c1c88525e3f91c

UI: Mac File Browser System List Changes

Nicer icons for File Browser System and Favorites lists on Mac.

Differential Revision: https://developer.blender.org/D6398

Reviewed by Brecht Van Lommel

===================================================================

M	source/blender/editors/include/ED_fileselect.h
M	source/blender/editors/space_file/fsmenu.c

===================================================================

diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h
index 71d23d5ebad..1aed57943e6 100644
--- a/source/blender/editors/include/ED_fileselect.h
+++ b/source/blender/editors/include/ED_fileselect.h
@@ -171,6 +171,8 @@ typedef enum FSMenuCategory {
   FS_CATEGORY_SYSTEM_BOOKMARKS,
   FS_CATEGORY_BOOKMARKS,
   FS_CATEGORY_RECENT,
+  /* For internal use, a list of known paths that are used to match paths to icons and names. */
+  FS_CATEGORY_OTHER,
 } FSMenuCategory;
 
 typedef enum FSMenuInsert {
diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c
index 17dbdcc9f1e..5702fe72396 100644
--- a/source/blender/editors/space_file/fsmenu.c
+++ b/source/blender/editors/space_file/fsmenu.c
@@ -70,6 +70,7 @@ typedef struct FSMenu {
   FSMenuEntry *fsmenu_system_bookmarks;
   FSMenuEntry *fsmenu_bookmarks;
   FSMenuEntry *fsmenu_recent;
+  FSMenuEntry *fsmenu_other;
 } FSMenu;
 
 static FSMenu *g_fsmenu = NULL;
@@ -99,6 +100,9 @@ struct FSMenuEntry *ED_fsmenu_get_category(struct FSMenu *fsmenu, FSMenuCategory
     case FS_CATEGORY_RECENT:
       fsm_head = fsmenu->fsmenu_recent;
       break;
+    case FS_CATEGORY_OTHER:
+      fsm_head = fsmenu->fsmenu_other;
+      break;
   }
   return fsm_head;
 }
@@ -219,6 +223,9 @@ void ED_fsmenu_set_category(struct FSMenu *fsmenu, FSMenuCategory category, FSMe
     case FS_CATEGORY_RECENT:
       fsmenu->fsmenu_recent = fsm_head;
       break;
+    case FS_CATEGORY_OTHER:
+      fsmenu->fsmenu_other = fsm_head;
+      break;
   }
 }
 
@@ -430,10 +437,11 @@ void fsmenu_insert_entry(struct FSMenu *fsmenu,
   fsm_iter->save = (flag & FS_INSERT_SAVE) != 0;
 
   /* If entry is also in another list, use that icon and maybe name. */
-  if (ELEM(category, FS_CATEGORY_BOOKMARKS, FS_CATEGORY_RECENT)) {
+  /* On macOS we get icons and names for System Bookmarks from the FS_CATEGORY_OTHER list. */
+  if (ELEM(category, FS_CATEGORY_SYSTEM_BOOKMARKS, FS_CATEGORY_BOOKMARKS, FS_CATEGORY_RECENT)) {
 
     FSMenuCategory cats[] = {
-        FS_CATEGORY_SYSTEM, FS_CATEGORY_SYSTEM_BOOKMARKS, FS_CATEGORY_BOOKMARKS};
+        FS_CATEGORY_OTHER, FS_CATEGORY_SYSTEM, FS_CATEGORY_SYSTEM_BOOKMARKS, FS_CATEGORY_BOOKMARKS};
     int i = ARRAY_SIZE(cats);
     if (category == FS_CATEGORY_BOOKMARKS) {
       i--;
@@ -703,6 +711,30 @@ void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks)
 #else
 #  ifdef __APPLE__
   {
+    /* We store some known macOS system paths and corresponding icons
+     * and names in the FS_CATEGORY_OTHER (not displayed directly) category. */
+    fsmenu_insert_entry(fsmenu, FS_CATEGORY_OTHER,
+        "/Library/Fonts/", IFACE_("Fonts"), ICON_FILE_FONT, FS_INSERT_LAST);
+    fsmenu_insert_entry(fsmenu, FS_CATEGORY_OTHER,
+        "/Applications/", IFACE_("Applications"), ICON_FILE_FOLDER, FS_INSERT_LAST);
+
+    const char *home = BLI_getenv("HOME");
+
+#    define FS_MACOS_PATH(path, name, icon) \
+      BLI_snprintf(line, sizeof(line), path, home); \
+      fsmenu_insert_entry(fsmenu, FS_CATEGORY_OTHER, line, name, icon, FS_INSERT_LAST);
+
+    FS_MACOS_PATH("%s/", NULL, ICON_HOME)
+    FS_MACOS_PATH("%s/Desktop/", IFACE_("Desktop"), ICON_DESKTOP)
+    FS_MACOS_PATH("%s/Documents/", IFACE_("Documents"), ICON_DOCUMENTS)
+    FS_MACOS_PATH("%s/Downloads/", IFACE_("Downloads"), ICON_IMPORT)
+    FS_MACOS_PATH("%s/Movies/", IFACE_("Movies"), ICON_FILE_MOVIE)
+    FS_MACOS_PATH("%s/Music/", IFACE_("Music"), ICON_FILE_SOUND)
+    FS_MACOS_PATH("%s/Pictures/", IFACE_("Pictures"), ICON_FILE_IMAGE)
+    FS_MACOS_PATH("%s/Library/Fonts/", IFACE_("Fonts"), ICON_FILE_FONT)
+
+#    undef FS_MACOS_PATH
+
     /* Get mounted volumes better method OSX 10.6 and higher, see:
      * https://developer.apple.com/library/mac/#documentation/CoreFOundation/Reference/CFURLRef/Reference/reference.html
      */
@@ -919,6 +951,22 @@ void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks)
   /* Quiet warnings. */
   UNUSED_VARS(fsmenu_xdg_insert_entry, fsmenu_xdg_user_dirs_parse, fsmenu_xdg_user_dirs_free);
 #endif
+
+  /* For all platforms, we add some directories from User Preferences to
+   * the FS_CATEGORY_OTHER category so that these directories
+   * have the appropriate icons when they are added to the Bookmarks. */
+#  define FS_UDIR_PATH(dir, icon) \
+    if (strlen(dir) > 2) { \
+      fsmenu_insert_entry(fsmenu, FS_CATEGORY_OTHER, dir, NULL, icon, FS_INSERT_LAST); \
+    }
+
+  FS_UDIR_PATH(U.fontdir, ICON_FILE_FONT)
+  FS_UDIR_PATH(U.textudir, ICON_FILE_IMAGE)
+  FS_UDIR_PATH(U.pythondir, ICON_FILE_SCRIPT)
+  FS_UDIR_PATH(U.sounddir, ICON_FILE_SOUND)
+  FS_UDIR_PATH(U.tempdir, ICON_TEMP)
+
+#  undef FS_UDIR_PATH
 }
 
 static void fsmenu_free_category(struct FSMenu *fsmenu, FSMenuCategory category)
@@ -956,6 +1004,7 @@ static void fsmenu_free_ex(FSMenu **fsmenu)
     fsmenu_free_category(*fsmenu, FS_CATEGORY_SYSTEM_BOOKMARKS);
     fsmenu_free_category(*fsmenu, FS_CATEGORY_BOOKMARKS);
     fsmenu_free_category(*fsmenu, FS_CATEGORY_RECENT);
+    fsmenu_free_category(*fsmenu, FS_CATEGORY_OTHER);
     MEM_freeN(*fsmenu);
   }
 
@@ -1000,6 +1049,7 @@ static FSMenu *fsmenu_copy(FSMenu *fsmenu)
   fsmenu_copy_category(fsmenu_copy, fsmenu_copy, FS_CATEGORY_SYSTEM_BOOKMARKS);
   fsmenu_copy_category(fsmenu_copy, fsmenu_copy, FS_CATEGORY_BOOKMARKS);
   fsmenu_copy_category(fsmenu_copy, fsmenu_copy, FS_CATEGORY_RECENT);
+  fsmenu_copy_category(fsmenu_copy, fsmenu_copy, FS_CATEGORY_OTHER);
 
   return fsmenu_copy;
 }



More information about the Bf-blender-cvs mailing list