Listing 2
struct focus_wnd_handler : sync_handler<focus_wnd_handler, window_base> {
static bool matches_wnd(window_base * w) {
ptr<> surf = wnd_surface(w);
return surf;
}
handle_event on_get_focus() {
ptr<> focus = wnd_surface(self)->try_find_surface("focus");
if ( focus) focus->is_visible(true);
return event_ex<wm::keyb::set_focus>().HANDLED_BY(&me::on_get_focus);
}
handle_event on_lose_focus() {
ptr<> focus = wnd_surface(self)->try_find_surface("focus");
if ( focus) focus->is_visible(false);
return event_ex<wm::keyb::kill_focus>().HANDLED_BY(&me::on_lose_focus);
}
};