It basically rewrites most of filelist.c, with some more limited changes in other areas of filebrowser.
From user perspective, it:
- Removes some info in 'long' drawing mode (owner, permissions) - OS-specific data that do not really matter in Blender!
- Makes short/long display 'fixed' size (among four choices, like thumbnails mode).
- Allows to list several layers of dirtree at once, in a flat way (inside .blend files and/or real directories).
- Consequently, adds datablocks types filtering.
- Uses way less RAM when listing big directories, especially in thumbnail mode (we are talking of several hundred of MiB saved).
- Generates thumbnails way faster.
- Adds preview to Object, Group and Scene IDs, along with some basic pyscripting to generate such previews.
- Exposes ID previews to RNA.
From code perspective, it:
- Is ready for asset engine needs (on data structure level in filebrowser's listing).
- Simplifies and makes 'generic' file listing much lighter.
- Separates file listing in three different aspects:
- 'generic' filelisting (in BLI), which becomes a shallow wrapper around stat struct.
- 'filebrowser drawing' filelisting, which only contains current visible subset of the whole list (sliding window), with extra drawing data (strings for size, date/time, preview, etc.).
- 'asset-ready' filelisting, which is used for operations common to 'basic' filehandling and future asset-related one.
- Uses uuid's to handle file selection/state in the browser, instead of using flags in filelisting items.
- Uses much lighter BLI_task handling for previews, instead of heavy 'job' system (adding a 'notifier' timer to handle UI refresh, in similar way to jobs).
- Moves .blend datablocks preview handling to IMB_thumbnail (necessary to avoid storing all datablock previews at once, and gives better consistency and performances too).
- This patch is big! It's most probably not yet ready for master, but would like to get first review asap - and ideally merge as much as possible of it after 2.75 is released.
- Final merge will be split in a few commits - but unfortunately, most changes in filelist.c are too much inter-related to be separated now.