Lately I've been playing around with third party GUI systems and got fed up so I started to make my own. I decided events would be the most crucial thing in it so I based the whole system around those. So far I just have a button class which is rather simple to set up. You create the button class and derive it from the GUI::Button class. You then create some functions in the class like Click(), MouseMove(), etc, add the class to the current game state by calling the AddGUIObject() function, and then the engine manages calling the functions for you. I think it's a rather effective system and plan to make some more "widgets" for it.
I'll start work on the textbox next. And yes, the engine handles what GUI object has the current focus.
Why do people call them widgets anyway?