- monitors.sort(monitor_x_compare);
- Monitor *prev_enabled = 0;
- for(list<Monitor>::iterator i=monitors.begin(); i!=monitors.end(); ++i)
- if(i->desktop_settings.mode)
+ for(unsigned i=0; i<monitors.size(); ++i)
+ {
+ int j = desktop_mode_indices[i];
+ if(j>=0)
+ monitors[i].desktop_settings.mode = &modes[j];
+ monitors[i].current_settings = monitors[i].desktop_settings;
+ }
+
+ sort(monitors, monitor_x_compare);
+
+ for(unsigned i=0; i<modes.size(); ++i)
+ {
+ auto j = find_member(monitors, mode_monitor_indices[i], &Monitor::index);
+ modes[i].monitor = &*j;
+ j->video_modes.push_back(&modes[i]);
+ }
+
+ Monitor *prev_enabled = nullptr;
+ for(Monitor &m: monitors)
+ if(m.desktop_settings.mode)