+void List::set_selected_item(Widget *item)
+{
+ for(unsigned i=rows[first_row].first; (i<items.size() && items[i]->is_visible()); ++i)
+ if(item==items[i])
+ return set_selected_index(i);
+}
+
+void List::rebuild_special(const Part &part)
+{
+ if(part.get_name()=="slider")
+ reposition_child(slider, part);
+ else if(part.get_name()=="items")
+ {
+ SetFlag flag(ignore_slider_change);
+ reposition_items(true);
+ unsigned old_first_row = first_row;
+ unsigned old_max_scroll = max_scroll;
+ check_view_range();
+ if(first_row!=old_first_row || max_scroll!=old_max_scroll)
+ reposition_items(false);
+ }
+
+ Widget::rebuild_special(part);
+}
+