+ unsigned change = 3;
+ if(btn==4)
+ {
+ change = min(first, change);
+ slider.set_value(max_scroll-(first-change));
+ }
+ else if(btn==5)
+ {
+ change = min(max_scroll-first, change);
+ slider.set_value(max_scroll-(first+change));
+ }
+ }
+ else
+ {
+ Container::button_press(x, y, btn);
+ if(click_focus && btn==1)
+ {
+ for(unsigned i=first; (i<items.size() && items[i]->is_visible()); ++i)
+ if(click_focus==items[i])
+ {
+ set_selected_index(i);
+ break;
+ }
+ }
+ }
+}
+
+void List::focus_in()
+{
+ if(focus_index<0)
+ focus_index = sel_index;
+
+ if(focus_index>=0)
+ {
+ scroll_to_focus();
+ set_input_focus(items[focus_index]);
+ }
+}
+
+bool List::navigate(Navigation nav)
+{
+ if(nav==NAV_UP)
+ {
+ if(focus_index<0 && !items.empty())
+ focus_index = items.size()-1;
+ else if(focus_index>0)
+ --focus_index;
+ else
+ return false;
+
+ scroll_to_focus();
+ set_input_focus(items[focus_index]);
+ }
+ else if(nav==NAV_DOWN)
+ {
+ if(focus_index<0 && !items.empty())
+ focus_index = 0;
+ else if(static_cast<unsigned>(focus_index+1)<items.size())
+ ++focus_index;
+ else
+ return false;
+
+ scroll_to_focus();
+ set_input_focus(items[focus_index]);