X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcontainer.cpp;h=03dff1137bfdf6416f6d755c61bae65604f8733b;hb=5bb0cc92a28a7862571249a2512bcd23ed272344;hp=62e6e125429bb7a10ca10b33476bc5d36fbd1a92;hpb=7d8609bec44adcab67b0c1a78d560ef76afded8d;p=libs%2Fgltk.git diff --git a/source/container.cpp b/source/container.cpp index 62e6e12..03dff11 100644 --- a/source/container.cpp +++ b/source/container.cpp @@ -17,6 +17,7 @@ Container::Container(): pointer_focus(0), pointer_grabbed(false), input_focus(0), + saved_input_focus(0), touch_focus(0) { } @@ -151,12 +152,10 @@ void Container::set_input_focus(Widget *wdg) input_focus->focus_out(); input_focus = wdg; + on_input_focus_changed(input_focus); if(input_focus) - { - raise(*wdg); input_focus->focus_in(); - } } } @@ -314,8 +313,16 @@ bool Container::character(wchar_t ch) return false; } +void Container::focus_in() +{ + if(saved_input_focus && saved_input_focus->get_parent()==this) + set_input_focus(saved_input_focus); + Widget::focus_in(); +} + void Container::focus_out() { + saved_input_focus = input_focus; set_input_focus(0); Widget::focus_out(); } @@ -356,6 +363,12 @@ void Container::on_reparent() } } +void Container::on_input_focus_changed(Widget *wdg) +{ + if(wdg) + raise(*wdg); +} + Container::Child::Child(Container &c, Widget *w): container(c), @@ -388,9 +401,10 @@ void Container::Child::visibility_changed(bool v) void Container::Child::request_focus() { - container.set_input_focus(widget); if(container.parent && container.visible) container.set_focus(); + if(container.state&FOCUS) + container.set_input_focus(widget); } void Container::Child::grab_pointer()