X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcontainer.h;h=4c38675ea85e4f1dbc2cab354feb183c2ef8b780;hb=56c41b294aa47a38ac3e1be70d4868f260cb4274;hp=f16a9ba5d814b1e21841bdf0b18c4e49cc8a2a79;hpb=5bb0cc92a28a7862571249a2512bcd23ed272344;p=libs%2Fgltk.git diff --git a/source/container.h b/source/container.h index f16a9ba..4c38675 100644 --- a/source/container.h +++ b/source/container.h @@ -4,12 +4,13 @@ #include #include #include +#include "mspgltk_api.h" #include "widget.h" namespace Msp { namespace GLtk { -class hierarchy_error: public std::logic_error +class MSPGLTK_API hierarchy_error: public std::logic_error { public: hierarchy_error(const std::string &); @@ -17,7 +18,7 @@ public: }; -class Container: virtual public Widget +class MSPGLTK_API Container: virtual public Widget { protected: struct Child: public sigc::trackable @@ -34,6 +35,7 @@ protected: void grab_pointer(); void ungrab_pointer(); void request_animation(const Time::TimeDelta &); + void rebuild_needed(); }; std::list children; @@ -44,6 +46,7 @@ protected: Widget *input_focus; Widget *saved_input_focus; Widget *touch_focus; + bool children_rebuild_needed; Container(); public: @@ -63,7 +66,7 @@ public: void raise(Widget &); protected: - void set_pointer_focus(Widget *); + void set_pointer_focus(Widget *, bool = false); void set_input_focus(Widget *); public: Widget *get_input_focus() const { return input_focus; } @@ -72,6 +75,9 @@ public: private: void check_animation_interval(); +protected: + virtual void rebuild_hierarchy(); + public: virtual void button_press(int, int, unsigned); virtual void button_release(int, int, unsigned);