pointer_grabbed(false),
input_focus(0),
saved_input_focus(0),
- touch_focus(0)
+ touch_focus(0),
+ children_rebuild_needed(false)
{ }
Container::~Container()
children.push_back(create_child(&wdg));
if(wdg.get_animation_interval())
check_animation_interval();
+ children_rebuild_needed = true;
on_child_added(wdg);
}
set_animation_interval(shortest);
}
+void Container::rebuild_hierarchy()
+{
+ Widget::rebuild_hierarchy();
+
+ if(children_rebuild_needed)
+ {
+ children_rebuild_needed = false;
+ for(list<Child *>::iterator i=children.begin(); i!=children.end(); ++i)
+ (*i)->widget->rebuild_hierarchy();
+ }
+}
+
void Container::button_press(int x, int y, unsigned btn)
{
if(Widget *child = get_pointer_target(x, y, false))
widget->signal_grab_pointer.connect(sigc::mem_fun(this, &Child::grab_pointer));
widget->signal_ungrab_pointer.connect(sigc::mem_fun(this, &Child::ungrab_pointer));
widget->signal_request_animation.connect(sigc::mem_fun(this, &Child::request_animation));
+ widget->signal_rebuild_needed.connect(sigc::mem_fun(this, &Child::rebuild_needed));
}
Container::Child::~Child()
container.check_animation_interval();
}
+void Container::Child::rebuild_needed()
+{
+ container.children_rebuild_needed = true;
+ container.signal_rebuild_needed.emit();
+}
+
} // namespace GLtk
} // namespace Msp