X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcontainer.cpp;h=03dff1137bfdf6416f6d755c61bae65604f8733b;hb=5bb0cc92a28a7862571249a2512bcd23ed272344;hp=a0d1fd748fc7abb3f353babe6a655a4345759515;hpb=f83d032c4b3d7ac694b3c8481e2086145245c0ef;p=libs%2Fgltk.git diff --git a/source/container.cpp b/source/container.cpp index a0d1fd7..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),