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.