- VideoMode mode(info.dmPelsWidth, info.dmPelsHeight);
- mode.rate = info.dmDisplayFrequency;
- modes.push_back(mode);
- }
-
- DEVMODE info;
- if(EnumDisplaySettings(0, ENUM_CURRENT_SETTINGS, &info))
- {
- orig_mode = VideoMode(info.dmPelsWidth, info.dmPelsHeight);
- orig_mode.rate = info.dmDisplayFrequency;
+ if(adapter_dev.StateFlags&DISPLAY_DEVICE_MIRRORING_DRIVER)
+ continue;
+
+ monitors.push_back(Monitor());
+ Monitor &monitor = monitors.back();
+ monitor.index = monitors.size()-1;
+ monitor.name = adapter_dev.DeviceString;
+ priv->monitors.push_back(adapter_dev.DeviceName);
+
+ if(adapter_dev.StateFlags&DISPLAY_DEVICE_PRIMARY_DEVICE)
+ primary_monitor = &monitor;
+
+ DEVMODE current;
+ bool have_current = EnumDisplaySettings(adapter_dev.DeviceName, ENUM_CURRENT_SETTINGS, ¤t);
+
+ for(unsigned j=0;; ++j)
+ {
+ DEVMODE info;
+ if(!EnumDisplaySettings(adapter_dev.DeviceName, j, &info))
+ break;
+
+ VideoMode mode(info.dmPelsWidth, info.dmPelsHeight);
+ mode.index = modes.size();
+ mode.monitor = &monitor;
+ mode.rate = info.dmDisplayFrequency;
+ if(find_mode(mode))
+ continue;
+
+ modes.push_back(mode);
+ monitor.video_modes.push_back(&modes.back());
+
+ if(have_current && info.dmPelsWidth==current.dmPelsWidth && info.dmPelsHeight==current.dmPelsHeight && info.dmDisplayFrequency==current.dmDisplayFrequency)
+ monitor.desktop_settings.mode = &modes.back();
+ }
+
+ monitor.current_settings = monitor.desktop_settings;