X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgraphics%2Fwindows%2Fdisplay.cpp;h=428abcc248f1f0fa2a613a95588078ace653fa3d;hb=5d8a8dbe07aaf8d9bd2c4c2982b34a877aee432f;hp=43f86995b893343b1a2257053c5ac61b95773d9c;hpb=9bc0825e93b1385a4aaf9f90d666a1ac409ffb17;p=libs%2Fgui.git diff --git a/source/graphics/windows/display.cpp b/source/graphics/windows/display.cpp index 43f8699..428abcc 100644 --- a/source/graphics/windows/display.cpp +++ b/source/graphics/windows/display.cpp @@ -11,6 +11,8 @@ Display::Display(const string &): primary_monitor(0), priv(new Private) { + static ErrorDialog err_dlg(0); + for(unsigned i=0;; ++i) { DISPLAY_DEVICE adapter_dev; @@ -42,7 +44,7 @@ Display::Display(const string &): mode.index = modes.size(); mode.monitor = &monitor; mode.rate = info.dmDisplayFrequency; - if(find_matching_mode(mode)) + if(find_mode(mode)) continue; modes.push_back(mode); @@ -60,12 +62,16 @@ Display::~Display() void Display::set_mode(const VideoMode &requested_mode, bool) { - const VideoMode *mode = find_matching_mode(requested_mode); + const VideoMode *mode = find_mode(requested_mode); if(!mode) throw unsupported_video_mode(requested_mode); DEVMODE info; + info.dmDeviceName[0] = 0; + info.dmSpecVersion = DM_SPECVERSION; + info.dmDriverVersion = 0; info.dmSize = sizeof(DEVMODE); + info.dmDriverExtra = 0; info.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT; info.dmPelsWidth = mode->width; info.dmPelsHeight = mode->height; @@ -78,6 +84,10 @@ void Display::set_mode(const VideoMode &requested_mode, bool) LONG ret = ChangeDisplaySettingsEx(priv->monitors[mode->monitor->index].c_str(), &info, NULL, CDS_FULLSCREEN, NULL); if(ret!=DISP_CHANGE_SUCCESSFUL) throw unsupported_video_mode(requested_mode); + + for(list::iterator i=monitors.begin(); i!=monitors.end(); ++i) + if(&*i==mode->monitor) + i->current_mode = mode; } bool Display::process_events()