GSoC 2019: Outliner Weekly Reports

Week 1:

I started last Saturday by fixing a small issue mentioned by @dfelinto . It ended up taking about 4 hours of single-stepping through the outliner_tree.c code to change one line. :upside_down_face: But I now understand how the tree is stored and created, so that’s nice.


  • Fix to open scene elements by default in scenes view (a3448a9eef60)
  • Add an active outliner element highlight to themes (b2a716e033d0)
  • Add active element to outliner (3bedf7231927)
  • Utils functions to return active element in outliner and one to determine if a given element is visible in the outliner (for range select) (fda3351c8827) and (558679a19ea3)
  • Modified the keymap to make range select more intuitive. ctrl is for extend selection and shift is for range selection.
  • Added range selection (94be4ea6cf42)
  • Click and drag from the gutter to box select (155cb8505c12)

Currently these changes are only focused on improving the experience of selecting items in the outliner in preparation for synced selection. For the remainder of this week I will refine the box select tool and add walk navigation. I’m on schedule so far, and everything is going smoothly. My only regret so far is not keeping in contact with my mentors as much as I would like to. I’ll improve on that next week.

Next week I will begin the synced selection. The current plan is to add a functions to the outliner and 3D view to be called after any selection occurs, then to send the selection state from one editor to the other to keep them in sync.


Week 2:

This week wasn’t quite as productive as the last week. As mentioned in my original project proposal, I’m still taking a cs class right now. I’m one week away from completing my class, so it won’t take all my time in the future. However, even with the distractions, I still got a good amount of work done.

  • Removing restrictions form range select. No longer requires an active element. rBb1a88dab4372
  • Remove restrictions on box select. Previously it required click and drag from the gutter, now any empty space is valid rB9f4d65e48853
  • Walk select operator. Up and down arrows for traversing the list up and down. Left and right arrow keys to jump back a level or toggle elements opened and closed rB73392fc29b28 rB07f938be3899
  • Lots of cleanup in the code I had already committed thanks to some review from Campbell.
  • Fixed some crashes my changes introduced.
  • A design document for the selection syncing. Its currently on my wiki space here
  • Synced selection toggle (not yet committed)

Next week I plan to have a basic selection sync working, in addition to adding more modifier keys to the outliner selection operators.


Week 3

I got a lot done on synced selection. There is still more to implement, but it works well from the 3D viewport to the outliner. Next week I will look more into syncing from the outliner to the 3D view consistently.



Week 4

I spent too much of this week trying to design a simpler way to do synced selections. Turns out the way I had it before works better so I’m moving forward with the original design. I also finished my CS course and took my final, so that took a bit of my time too this week. On the bright side I don’t have anything distracting me from the summer of code anymore!


Week 5

This has been a great week! Selection syncing is nearly done (just have to sync bones and sequences now). There are a few other cases to resolve, but for the most part its working quite smoothly. Also, the first evaluation is over, so I’m now onto the second working period of the summer.

  • Rewrote the synced selection from view layer logic again. :slight_smile: 20ae943bf413 99ceaf2ecc6c
  • Sync outliner selection to view layer 883399072fa5
  • Removed the active highlight when synced selection is turned off. This is a simple change and could be reverted easily, if it ends up being confusing. 55e95e84d761
  • Sync the active object between outliner and view layer, in addition to just selected state. e4ed727f43d5
  • Many walk selection improvements
    • When nothing is selected and a walk operator occurs, the active element will be selected 30e48c6c6ab6
    • Fixed walk selection wrapping around the tree and other small issues with the operator 3de1bd9b380f
    • Hold shift to extend selection on walk selection c68dff9ff71c
    • A few tree elements had no or incorrect parents set which caused walk to fail or crash. A few small edits to the tree building fixed that. e191fb3bdab5
  • Fixed a small range select issue d5ad3d6fc8ae
  • Removed ctrl+click to rename elements as this conflicts with selection extending

In the next week I’m planning on finishing synced selection. I’m going to move the functions to a new file dedicated to syncing (so they aren’t scattered elsewhere). Once all my improvements are reviewed and accepted, I can move on to working on other larger tasks.

This shows the syncing with walk and box selection


This is so good. Your changes feel really natural, Nate. I have no doubt this will be a part of 2.81. Congratulations and thank you.


I just tried it out and man, this is like christmas. Been waiting for a better outliner navigation/synchro for so long. Can’t wait to see it in the official releases. Thanks so much for your hard work, it is much appreciated!


Week 6

Well, syncing is just about wrapped up, as this week I added support for VSE sequences, pose bones, and edit bones. I have also spent quite a bit of time reading and understanding the code for the context menu, and other parts of the outliner. In the coming weeks I can work on drag and drop, deleting, and other utilities that aren’t as intuitive as they could be.

I also spent some time updating the VSCode setup page on the wiki



Can’t wait… :slightly_smiling_face:


Week 7

Worked a lot more on syncing and active elements this week. Also rewrote the walk select code to utilize a walk flag rather than changing the active element. Also started working on multi-object parenting :slight_smile:

A few of the more notable changes: Walk select no longer activates. When outside of object mode, objects selected in the outliner while syncing is enabled are added to the selection. Synced selection is disabled in Blend File, RNA, and Orphan data display modes.


Week 8

Lot of great updates and new features in the last week!

  • Finished multi-object parenting. For now the menu that appears when parenting to a curve, armature, or lattice is disabled. It should not be too difficult to add it back though. f8ca71e66a11 185e8183fa3e
  • Change active collection after visibility restrictions. Previously when disabling a collection (the checkbox) the active collection changed to the first enabled parent. This has been extended to both viewport visibility restriction modes as well. This prevents adding objects to hidden collections. 5bb9fce0cdea
  • Set active camera when clicking on camera data e63b87fb4db7
  • Prevent scroll page operator (page up/page down) from going past the view of the outliner 9d28b8ae3f69
  • additional Show Active operator improvements. Now the tree does not get “fuzzy” due to an off-by-one error, and the view will not jump (by leaving the vertical scroll bounds) dbcce31ad363
  • Icon row toggling. This brings back the ability to select icons in the row of collapsed outliner elements. f7310fae94e2 eed6d1dcf1e9
  • Show a search menu when selecting aggregate / merged icons in the icon row. This still has some issues (when nesting is not one-layer) but I know why, so it shouldn’t be too difficult to fix. 8f2c296e22e7

In the next week I will finalize the icon selecting. Currently icons that are hidden, linked, or parented cause the icon row selection to fail due to their X locations not being set properly. I will hopefully also bring back the parenting menu for the armatures, curves, and lattices. Among other changes too. :grinning:


Week 9

This has been another great week of improvements to the outliner. I’ve spent some time refining existing operators, and simplifying the existing code. Improvements were also added to the disclosure triangle toggles leading to more intuitive interaction. Additionally, I’ve been informed that I have passed my 2nd evaluation, so I hope everything moves along smoothly in the 3rd and final coding period.

Notable changes:

  • Fixed the merged element popop search menu not showing all children, and from listing incorrect types. b22c84d7800a, b6405d001ae3
  • Tweaked the color of drawn icons to fix some inconsistencies 8f37592666ce
  • Moved the synced selection toggle to the filter popover. The popover could use a rename, but it is fine for now. 27da9edb1d82
  • Draw vertex group icons rather than dots.
  • Keymap changes:
    • Removed alt+click for recursive select in the outliner due to conflicts with emulate 3-button mouse. A context menu operator exists with the same functionality. 4b786c0a0cf9
    • Add shift+right arrow and shift+left arrow to walk navigation to expand or close all children. Also, walk select right now steps into the subtree when the current element is expanded. f2cc499a043d 955c9dd98bb7
    • Removed enter and shift+enter to open/close items not that walk select has replace that behavior.
  • Added many changes to the disclosure triangle open/close functionality.
    • Allow click+drag on disclosure triangles 88a2c5782745 499c47a974bd
    • Fixed the behavior when clicking on triangles holding shift to open/close all children not toggling the parent closed. ec9dfb21d748
    • This has the benefit of moving the toggling code out of the item_activate function.
  • And a good amount of code cleanup and refactoring

In the next week I’ll look into parenting again. There are a few small issues I would like to take care of (like holding shift to parent is not convenient) and I did not take the time to bring back the add parent menu.



Week 10

This week my mentors started to review my branch. This means I will be mainly focused on improving the features I have already implemented. I still have a few small features on my to-do list though.

  • Refactored the show active operator to open up all subtrees containing the active object. e257f3c75ee5
  • Brought back the add parent popup for armatures, lattices, and curves. 65bad61cee7c Now it supports multi-object selections for parenting.
  • Support F2 for renaming in the outliner rather than showing the popup that only works for objects. 6267d647ae0b.
  • Refactored show active and page up/down to use a shared function to restrict the view to the bounds. 5dcbc320673b
  • Added automatic scrolling to walk navigation. 673323251c98

I am currently working on some redesigns to the syncing code to improve the code itself, and to optimize the algorithm for larger scenes. I expect my branch review to take the majority of my time in the next week, but I would also love to extend the outliner scrolling to drag and drop.



Week 11

A large part of my week was spent improving selection syncing after some review. The logic is mostly the same, but code was moved between files, and optimized. Instead of a full sync on each selection event, only elements of the type that was selected are synced. So if you select a bone, only bones are synced. This will hopefully prevent any lag on large scenes, though I had not noticed any so far. Here is the commit that reflects all changes for synced selection 9ebd65b3f12d.

The exciting news is that my branch has passed an intitial review. I’ve made some changes, and one of my mentors (@ideasman42) is ready to commit to 2.81. We are waiting for review from at least one other developer before committing just to be safe though. Hopefully sometime in the next week outliner improvements will be in 2.81 master! :smiley:

To ease the committing process, I took my 200+ commits from developing in my soc-2019-outliner branch, and combined them into about 14 commits that reflect related functionality.

I also started looking forward with @billrey and prepared a place for future outliner work to continue after the summer of code. ⚓ T68338 Outliner (Parent Task). There are many great suggestions I have received this summer that I just did not make time to implement because I wanted to focus on the core functionality. I will continue to develop more of these features (item reordering, properties syncing, etc.) after my branch is merged.

In the coming week I will be testing everything I changed, making tweaks here and there throughout the code. With more reviews of my branch coming, I expect there will be some things to change. There probably won’t be any amazing new features, as I want to ensure everything I have done is polished.

As the summer of code comes to a close, I would love some focused testing from others of synced selection. It would be great to get feedback on performance in large files, and especially if there are cases where a sync is not performed. I may have missed some selection operators or other events that would require a sync. The Windows branch can be found here: Thanks!


Hi and congratulations to the merge today.
Testing …

Cheers, mib

1 Like

Congrats and job well done :clap:


Week 12

Today I committed all of my changes to master, so I don’t expect to be making any more changes to my soc-2019-outliner branch. But now that review is over I can work on features like drag and drop, mode switching, and properties sync. These and other plans are here.

In the last week I made more changes after code review:

  • Click and drag on disclosure triangles now behaves like other click and drag events in Blender. The toggle state of the first click+dragged element is carried to the other elements. If dragging over the first element closes, the other dragged elements will be closed.
  • Removed walk in and out for walk keyboard navigation with left/right arrow keys. Now left and right only toggle open and closed.
  • Finally fixed selecting objects linked within multiple collections from the outliner. Now syncing works as expected.
  • Only show one instance of an object when it is listed multiple times in a subtree for the merged element popup menu.
  • Removed the set parent to... popup menu for setting the parent to armatures, lattices, and curves. This menu still exists in the 3D view. It makes more sense to keep the outliner simpler and support object parenting only.
  • Outliners no longer sync selection to other outliners. Only to the 3D view and sequencer.
  • Adjusted contrast of the selected and active row highlights in the themes.
  • Moved synced selection toggle below Sort Alphabetically.

Changes not yet committed:

  • Update industry compatible keymap for new outliner features Everything is the same except for rename. In the default keymap rename is F2, and in industry compatible it is Return. Double click on the name works in both keymaps.
  • ctrl+shift+click to extend range select. This allows a range select without deselecting the previous selection.

In the next and final week I will be updating the user manual, writing my final report, doing my final evaluation, fixing small things in the outliner, and continuing planning for further outliner improvements. :smiley:


Thank you very much for this. I just tried it and the outliner now is a lot better. :smiley:

1 Like

Really a great, huge improvement in blender. Now its much more fun using it! Thank you for your work! I hope you keep maintaining and improving the outliner even more!

1 Like

Many thanks for your work!

1 Like