void GUIComponent::focus_previous() { GUIComponent *c = this; // Skip over components in the same group: if (get_focus_policy() == focus_group) { while (c->impl->prev_sibling && c->get_component_group_name() == this->get_component_group_name()) { c = c->impl->prev_sibling; } } else c = c->get_previous_component_in_tree(); while (c != this) { if ((c->get_focus_policy() == focus_local || c->get_focus_policy() == focus_group) && c->is_visible() && c->is_enabled()) { if (c->get_focus_policy() == focus_group) { GUIComponent *selected_comp = c->get_group_selected_component(); if (selected_comp) { selected_comp->set_focus(true); } else { c->set_focus(true); } } else { c->set_focus(true); } break; } c = c->get_previous_component_in_tree(); } }