The reason pointers are frequently typedefed is to make them behave more like types should,
Container * a, b;
a and b have different types, which is silly
typedef Container* ContainerPtr;
ContainerPtr a, b;
Same type, both pointers.
Embedding them in the class as a public typedef I only did a few days ago, previously I was doing it as above, which also works with forward decs, I might change it back, but you can always just use regular pointer syntax where you need to. Within the Widget classes this is sometimes necessary, but when using the Widgets from elsewhere, you will have already seen evertything declared, so it's not an issue in the menus/game.