+void Panel::child_hidden(Widget &wdg)
+{
+ if(&wdg==pointer_focus)
+ set_pointer_focus(0, 0);
+ if(&wdg==input_focus)
+ set_input_focus(0);
+}
+
+void Panel::grab_pointer(Widget &wdg)
+{
+ if(pointer_grab==0 || pointer_focus==&wdg)
+ set_pointer_focus(&wdg, 255);
+ else
+ throw InvalidState("Pointer is already grabbed");
+}
+
+void Panel::ungrab_pointer(Widget &wdg)
+{
+ if(pointer_focus==&wdg)
+ set_pointer_focus(0, 0);
+ else if(pointer_grab>0)
+ throw Exception("Someone is trying to steal the pointer!");
+}
+
+void Panel::grab_focus(Widget &wdg)
+{
+ list<Widget *>::iterator i=find(children.begin(), children.end(), &wdg);
+ if(i==children.end())
+ throw InvalidState("That Widget is not in this Panel");
+
+ set_input_focus(&wdg);
+ if(parent)
+ parent->grab_focus(*this);
+}
+
+void Panel::render_special(const Part &part) const