All these changes probably belong in WBaseWidget since there are widgets that should get this logic that do not inherit from WWidget (e.g. WSpinny). WWiget probably ought to be deleted. 

To prevent duplication of event() calls, you could make a WBaseWidget::widgetEvent() method that all the derivations of WBaseWidget call. We already have event() handlers for tooltips on all of them so you could just move that to a new method in WBaseWidget as well.