- int const w = GetSize().GetWidth() / _columns;
- for (int i = 0; i < _columns; ++i) {
- _list->SetColumnWidth (i, w);
+ int const w = _list->GetSize().GetWidth() - 2;
+
+ int fixed_width = 0;
+ int growable = 0;
+ int j = 0;
+ BOOST_FOREACH (EditableListColumn i, _columns) {
+ fixed_width += i.width.get_value_or (_default_width);
+ if (!i.growable) {
+ _list->SetColumnWidth (j, i.width.get_value_or(_default_width));
+ } else {
+ ++growable;
+ }
+ ++j;
+ }
+
+ j = 0;
+ BOOST_FOREACH (EditableListColumn i, _columns) {
+ if (i.growable) {
+ _list->SetColumnWidth (j, i.width.get_value_or(_default_width) + (w - fixed_width) / growable);
+ }
+ ++j;