GSoC 2020: Outliner Weekly Reports


Please leave feedback in this topic: GSoC 2020: Outliner Discussion and Suggestions, thanks!

Week 1: June 1 - 6

This first week is already off to a great start:

Next Week’s goals:

  • Add support for pose mode toggling to the column, and other fixes.
  • Currently the column selection code is not ideal because I ran into a small UI button issue. Once resolved, I will cleanup that code.
  • Remove data activation and mode toggling on outliner selection in favor of the column.
  • Continued selection cleanup in preparation for properties editor tab switching.
  • Fix ⚓ T71812 Outliner: Active selection not in sync when navigating with arrow keys once the selection cleanup is in master
  • Make a design task for context menu improvements.
  • 1 or 2 smaller tasks.

Wow, love active camera toggling from the outliner, that’ll speed things up.
Great work!


But that was already the case, if you click the camera icon.

I’m confuse. :thinking:


nice job!

I just wanted to point at at specific thing I noticed about the outliner.

Sometimes we have a lot of objects in the scene and we want to inspect quickly the properties of those objects, like for example if they have a different delta transforms or custom normals. So an easy way would be using down arrow on the keyboard but as you can see in the gif below the objects are showed in dark orange therefore the property panel is not updating.

It would be nice if someone could implement this behaviour.


@ThinkingPolygons If you look at the task (linked above the video) it mentions the reasoning behind this. Selection, activation, mode toggle, etc. are all mixed up, and we are separating them. So yes, currently you can click the camera data icon to change active camera, but in my branch you will not be able to.

@giuseppebufalo fixing that is actually in my plans for next week. I linked to the task above. Also, if you have other feedback, post it here: GSoC 2020: Outliner Discussion and Suggestions

Nice to see this project started.
Do we post issues of this current build here in this thread?

1 Like

I’m not sure, until @natecraddock replies, I posted my feedback in the main Outliner discussion, here are my impressions.

1 Like

@jc4d and @slowk1d it would be preferred that all suggestions and feedback (including with the windows) build be on the feedback topic. Keep in mind that the features in the daily builds are not complete, and there are known issues, so look at the progress for the specific task in case it’s already known:


Thanks! Already posted feedback there.

1 Like

Week 2: June 8 - 13

I did not complete all items on my list for the week, but overall it was great. On the bright side I finished my CS algorithms class at my university so now I’m much more free to work on this project! And I’m still ahead of my anticipated schedule.

  • Added walk left/right navigation with arrow keys
  • Switched to radio icons instead of check and dot. The icons aren’t finalized, but this already is better (the check doesn’t get confused with the collection exclude checkbox.
  • Fixed an issue preventing me from properly using icon buttons (thanks @julianeisel!)
  • Cleaned up the code for drawing the column
  • Now every object mode can be toggled with the left column (see video). This makes it much easier to see which object is in a specific mode, and makes it simple to swap to a different object.
  • Removed activation on selection for collections and cameras. Now the only way to set the active collection is with the left column.
  • Created two new design tasks:

Next week’s goals:

  • Start on properties editor syncing:
  • Hopefully get my cleanup patch reviewed for 2.90
  • Small fixes to make selection more consistent
  • Other smaller fixes on my todo list

Week 3: June 15-20

This has been a great week: I finished my final exam, and got a lot more done than I expected!

  • Made a few commits to 2.90 to fix issues. I started these before GSoC, and it is nice to finally have them finished.
    • Outliner selection cleanup (702e00f91088)
    • Fix walk navigation not activating (8ce1a6026273)
    • New unified Delete Hierarchy operator (26c0ca3aa7f4)
    • Fixed an issue selecting objects linked in multiple collections. The top and selected elements in the outliner would be selected.
  • Started (and I think finished) properties syncing. See the GIF for a demo. Now selecting data (mesh, materials, modifiers, bones, etc.) in the outliner will switch to the correct tab in the properties editor. The hardest part here was ensuring it respected any pinned data in a properties editor. I think I got it correct, but let me know if anything goes wrong!
  • Fixed mode column toggling when Lock Object Modes is disabled.
  • After some discussion with some others, I have removed the camera and scene activation from the mode column, you can read the reasoning here: GSoC 2020: Outliner Discussion and Suggestions.
  • Started collection color tagging! This is in a private branch so there isn’t anything to see yet.

Next week:

  • Fix a few remaining issues with mode toggling.
  • Fix any loose ends with properties syncing.
  • Get feedback on the mode column from the Blender Animation studio if possible.
  • Get feedback on the first iteration of collection color tagging.
  • Start on manual object sorting: if there is time.

Thanks for all the feedback along the way!


Week 4: June 22-27

It’s been a slower week. I fixed a few issues and cleaned up the code a bit.

I added collection colors! Adding that to the Collection struct is simple, but the hard part is proving to be finding a method of displaying it in the outliner that is visible but not overpowering. It’s caused quite a discussion over on the other thread GSoC 2020: Outliner Discussion and Suggestions. I’m reading every reply and will try to make the best decision possible! I’ve implemented many of the suggestions along the way as well, some are easily integrated with the drawing code, and others require a bit of restructuring.

The reminder of my time was spent reading the code for the remaining tasks of my area. I spent a lot of time reading the code in outliner_tree.c and outliner_dragdrop.c and making small changes. I’ve had a few successful experiments with modifier drag+drop in the outliner, but just in a local branch. I’ll be committing it soon. Now that I’ve read the related code and made plans I’m ready to start on the remaining goals of the summer.


Week 5: June 29 - July 4

It’s been a great week! The first evaluation is over, and I am still ahead of schedule!

  • Participated in Code Quality Day with some outliner cleanup
  • Added autoscrolling to outliner drag+drop (2.90)
  • Changed hierarchy line drawing. Now the lines draw for collections only and are colored based on the collection color.
  • Draw collection color roundrect behind collection icon.
  • Add collection colors to user preferences for custom theming.
  • Add collection color icons to context menu.
  • Move collection exclude checkbox to left column (may move again)
  • Add modifier drag and drop for sorting and linking

Video demonstrating modifier drag and drop, autoscroll, and collection coloring:

Some small things may change for collection colors still, but the design is stabilizing nicely.

Next Week

  • Clean up modifier drag and drop and fix a few remaining issues
  • Apply same drag and drop code for constraints
  • Object drag and drop
    • Sorting
    • Parenting without holding shift
  • New collection from selection

Week 6: July 6 - 11

Sorting was redone to sort collections and objects alphabetically. There is a new sort by object type method as well.

The operator to create a new collection from the selection was written. This is the default behavior when using the new collection button from the header and the C shortcut key. When using the context menu, options to create an empty collection or to link objects into the new collection are shown.

Manual object sorting was started. This has proved to be a bit trickier than I first thought, but it mostly works now. The remaining issue is to ensure the bases and objects stay synced (see this video GSoC 2020: Outliner Discussion and Suggestions - #437 by justastatue).

Parenting works in the outliner without holding shift in view layers display mode.

I spent far too long trying to get the collection colors to draw in a single row. No success here sadly. On the bright side I understand the UI layout code much better now :slight_smile:


Week 7: July 13 - 18

Another great week and I learned lots!

  • Since Thursday of last week I had worked on drawing the collection color icons in a row rather than a submenu. I have it nearly perfectly working now, and I’ve created a patch for review: I’ve already applied the patch in my branch. This took most of my time sadly, but it taught me a lot of Blender’s UI layout, alignment, and widget drawing code.

  • Fixed bases out of sync when reordering objects. This meant that visibility toggling the outliner was incorrect.

  • As an experiment I changed all the outliner highlights to draw as rounded rectangles like the file browser and UI lists for greater consistency. I like it a lot and I"m curious what others think. It’s a slight thing, but it makes the outliner look a bit more polished.

  • Cleaned up collection colors and added 4 new slots. The user preferences are simpler, the color names are removed in favor of simple numbers because it was weird to recolor “red” to blue for example.

  • Added new types to the outliner tree: Grease pencil modifiers and grease pencil shader effects.

  • Added properties sync for shader effects.

  • And finally, I rewrote the modifier drag&drop code to be generic enough to apply to modifiers, constraints, and shader effects. Also, copying modifiers/constraints/effects between objects is possible though outliner drag&drop. There are a few unimplemented cases here, but I spent a long time rewriting this so adding new behavior was trivial.

Next Week

  • Wrap up the modifier/constraint/effect drag&drop. Just a few functions to write to copy data.
  • Work more on object sorting. You can’t reorder child objects yet which was an oversight.
  • Start on bone sorting. This will be both the sort by name and manual.
  • Start on the context menu cleanup and fixes.

Link for the daily build:


Week 8: July 20 - 25

  • Fixed a bug in the context menu

  • Fixed parent selection. A few months back I fixed a bug with drivers. When selecting a bone in the outliner, the parent armature was not selected making it impossible to modify bone drivers. The fix required selecting the parent object in the outliner. The issue with that is any selected objects in the outliner will force the context menu to show object options, rather than the modifiers, curves, or other types. The solution is to select the object in the viewport, but prevent the outliner select sync from overriding it. To better explain:


    • This looks much cleaner and since the fix is so simple I plan to get it in 2.90 and 2.83 if possible because the annoyances with the outliner parent selection caused many issues.
  • Finished all “UI Stack” (modifier, constraint, shader effects) operators. Now you can copy constraints between objects and bones, and reordering is much more reliable. Linking and copying also works for grease pencil shader effects. I also cleaned up the code a bit here now that it works well.

  • Bones are now sorted by name when Sort by Name is chosen.

  • Addressed a few small issues with mode toggling and selection.

Sadly, it looks like I’m putting manual bone sorting aside as they are stored as a flat list in the main blender database which doesn’t fit well with the sorting logic. If I have time I’ll revisit it.

Next Week

  • More work on context menu. I got a tiny bit done this week, but there is lots more to do.
  • Move a few fixes to 2.90 and hopefully 2.83 (dealing with object-parent selection & context menu).
  • UI Layout adjustments.

I overlooked writing this the last two weeks… oops! I’ve gotten a lot of things done the last weeks though, so I’ll share all of that here. As we are nearing the end, much of my work has been testing and fixing small issues. I’ve also fixed several bugs in master and participated in the code quality day.

Week 11 August 10 - 15

  • Bugs fixed

    • Removed duplicate context menu entries
    • Fixed outliner child objects hidden when collections were filtered.
    • Fixed disabled buttons toggling on drag
  • Collection Colors

    • Finally decided on 8 colors. More may be added in the future, but 8 gives good flexibility without cluttering the context menu.
    • Use collection icons rather than squares in the context menu.
    • Switched to filled icons rather than shading behind the collection icon. To make this more prominent, a filled collection icon is now used.
    • Use the colored collection icons in various UI menus. Add collection instance, Move/Link collection, etc.
    • Prevent setting scene collection & linked collections color tags
  • Mode Toggle

    • Change the active object when toggling modes.
    • If the active object is removed from edit or pose mode, and other objects are still in the mode, a new active will be chosen from the remaining objects.
    • There is an undo/redo crash with these changes that needs to be resolved…
    • Change dot to mode icon on hover.
  • Properties Sync

    • When selecting a modifier/constraint/shader fx, ensure that it is expanded in the properties editor.
  • Use Shift for recursive bone restrict button toggling. This is consistent with objects and collections.

  • Add a new filter: Row children filter. This hides the row icons but still allows expanding to see children.

  • Enable the mode column by default

  • Draw the row highlights rounded and slightly spaced out like UI Lists and the File Browser.

Goals for the final week

  • Begin code review: I don’t expect to have everything reviewed by the end of the summer of code, but I do plan on having all my code separated into patches for the final review & merge.
  • Finalize collection colors & pick colors for the other themes.
  • Fix mode toggle crash on redo/undo
  • Final cleanup for drag&drop code
  • A few small context menu fixes

I’ll share a video tomorrow showing the state of the outliner. :slight_smile:


As promised, here is the video! Today I committed most of my goals for the first stage of the context menu cleanup. There is still a lot of work to do, but it’s already much more usable.

Video contents (in order):

  • Modifier link with drag & drop
  • Collection colors in context menu (new icons)
    • Also new icons in the outliner
  • Collection color icons in UI menus (like add collection instance)
  • Mode toggle column
    • Removing the active doesn’t remove all anymore
    • Change dot icon on hover
  • Properties Editor Sync
    • Now modifiers, constraints, and shader fx are expanded on selection
  • Row icon filter - don’t show icons in rows, but still allow expanding
  • Context menu fixes. Here the context menu shown is based on the target of the right-click. Before it would be impossible to see the modifier menu when an object was also selected.
    • Deleting modifiers when other elements are also selected

Also you may notice the following throughout:

  • Collection exclude checkbox is placed with the other restrict buttons
  • The row highlights are slightly rounded and separated vertically

I would appreciate some testing of the build this week to find any remaining bugs!


Week 12: August 17 - 22

This final week of coding ended well, At this point there are no big features, just wrapping up on everything I did over the summer.

I uploaded all of my patches for code review which has started. The goal is to get most of the new outliner features included in 2.91.

My list of patches can be found here at the bottom of the page: ⚓ T77408 Continued Outliner Improvements Design

Next week is the final evaluation. I’ll be writing my Final Report and continuing code review and fixing any other issues that remain.

I did start development on a new feature to highlight the parent of objects and bones when the active item is in a collapsed outliner hierarchy. This won’t be part of the GSoC code review, but it could still be included in the 2.91 release if all goes well :slight_smile: