-
-Panel::Child::Child(Panel &p, Widget *w):
- Container::Child(p, w)
-{
- widget->signal_visibility_changed.connect(sigc::mem_fun(this, &Child::visibility_changed));
- widget->signal_request_focus.connect(sigc::mem_fun(this, &Child::request_focus));
- widget->signal_grab_pointer.connect(sigc::mem_fun(this, &Child::grab_pointer));
- widget->signal_ungrab_pointer.connect(sigc::mem_fun(this, &Child::ungrab_pointer));
-}
-
-Panel::Child::~Child()
-{
- visibility_changed(false);
-}
-
-void Panel::Child::visibility_changed(bool v)
-{
- if(!v)
- {
- Panel &panel = static_cast<Panel &>(container);
- if(widget==panel.pointer_focus)
- panel.set_pointer_focus(0);
- if(widget==panel.input_focus)
- panel.set_input_focus(0);
- }
-}
-
-void Panel::Child::request_focus()
-{
- Panel &panel = static_cast<Panel &>(container);
- panel.set_input_focus(widget);
- if(panel.parent && panel.visible)
- panel.set_focus();
-}
-
-void Panel::Child::grab_pointer()
-{
- Panel &panel = static_cast<Panel &>(container);
- if(!panel.pointer_grabbed)
- {
- panel.set_pointer_focus(widget);
- panel.pointer_grabbed = true;
- panel.signal_grab_pointer.emit();
- }
-}
-
-void Panel::Child::ungrab_pointer()
-{
- Panel &panel = static_cast<Panel &>(container);
- if(panel.pointer_grabbed && panel.pointer_focus==widget)
- {
- // XXX Should set to the widget under pointer
- panel.set_pointer_focus(0);
- panel.pointer_grabbed = false;
- panel.signal_ungrab_pointer.emit();
- }
-}
-