+ if(adapter_dev.StateFlags&DISPLAY_DEVICE_MIRRORING_DRIVER)
+ continue;
+
+ monitors.push_back(Monitor());
+ Monitor &monitor = monitors.back();
+ monitor.index = monitors.size()-1;
+ priv->monitors.push_back(adapter_dev.DeviceName);
+
+ DISPLAY_DEVICE monitor_dev;
+ monitor_dev.cb = sizeof(monitor_dev);
+ if(EnumDisplayDevices(adapter_dev.DeviceName, 0, &monitor_dev, 0))
+ monitor.name = monitor_dev.DeviceString;
+
+ if(adapter_dev.StateFlags&DISPLAY_DEVICE_PRIMARY_DEVICE)
+ primary_index = i;
+
+ DEVMODE current;
+ bool have_current = EnumDisplaySettings(adapter_dev.DeviceName, ENUM_CURRENT_SETTINGS, ¤t);
+
+ unsigned first_mode = modes.size();
+ int desktop_mode_index = -1;
+ for(unsigned j=0;; ++j)
+ {
+ DEVMODE info;
+ if(!EnumDisplaySettings(adapter_dev.DeviceName, j, &info))
+ break;
+
+ if(any_of(modes.begin()+first_mode, modes.end(), [&info](const VideoMode &m){
+ return (m.width==info.dmPelsWidth && m.height==info.dmPelsHeight && m.rate==info.dmDisplayFrequency);
+ }))
+ continue;
+
+ VideoMode mode(info.dmPelsWidth, info.dmPelsHeight);
+ mode.index = modes.size();
+ mode.rate = info.dmDisplayFrequency;
+
+ modes.push_back(mode);
+ mode_monitor_indices.push_back(monitor.index);
+
+ if(have_current && info.dmPelsWidth==current.dmPelsWidth && info.dmPelsHeight==current.dmPelsHeight && info.dmDisplayFrequency==current.dmDisplayFrequency)
+ desktop_mode_index = mode.index;
+ }
+ desktop_mode_indices.push_back(desktop_mode_index);