The indirection contributes unnecessary complexity. The usage of
std::weak_ptr and std::shared_ptr complicates the things further, e.g.

---
Ideally, same should be done with TabBox and TabBoxHandler, but that can be done in another MR.