Refactor code to resolve #2227 and #2188

Here I make a white list for adding support for tooltip, which makes it efficient and also solves some bugs.
 
Originally, it adds tooltip for all widgets, some widgets override others and some widgets contain others, which makes it complicated and results in lots of unnecessary callbacks.

Here I only add 3 widgets to the white list, I tested and see most of the tooltips are shown, but I am not sure whether i miss some tooltips, please review and help add some more widgets for tooltips.