X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpanel.cpp;h=4d7e1a9df3d0aa814aa225c9dc47038d58fc3f68;hb=ef4660c4bdf38e126e13b426649fc2f997027b65;hp=14e9b6ea8cc3dbf97b9c57f4f673df53870bacc2;hpb=8a0058b5b90bb7e9eacf1646142f4d73b426fd66;p=libs%2Fgltk.git diff --git a/source/panel.cpp b/source/panel.cpp index 14e9b6e..4d7e1a9 100644 --- a/source/panel.cpp +++ b/source/panel.cpp @@ -47,6 +47,17 @@ void Panel::raise(Widget &wdg) throw InvalidState("That Widget is not in this Panel"); } +Widget *Panel::get_final_input_focus() const +{ + if(Panel *panel=dynamic_cast(input_focus)) + { + Widget *focus=panel->get_final_input_focus(); + if(focus) + return focus; + } + return input_focus; +} + void Panel::button_press(int x, int y, unsigned btn) { if(pointer_grabbed) @@ -59,7 +70,8 @@ void Panel::button_press(int x, int y, unsigned btn) if(Widget *wdg=get_child_at(x, y)) { set_pointer_focus(wdg); - set_input_focus(wdg); + if(wdg->is_focusable()) + set_input_focus(wdg); } Container::button_press(x, y, btn); } @@ -224,7 +236,10 @@ void Panel::Child::visibility_changed(bool v) void Panel::Child::request_focus() { - static_cast(container).set_input_focus(widget); + Panel &panel=static_cast(container); + panel.set_input_focus(widget); + if(panel.parent && panel.visible) + panel.set_focus(); } void Panel::Child::grab_pointer()