X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgraphics%2Fx11%2Fdisplay.cpp;h=70b77c60ff6239c46041b2821a9c39777f6f0628;hb=ed2ada6539882e02e1054a3394bb62a182bf007b;hp=368b67cecdc5b6953db9e113664e16f30bed9889;hpb=0913ba6fdd0e28740e0b521f275b9ce82c4a1b7a;p=libs%2Fgui.git diff --git a/source/graphics/x11/display.cpp b/source/graphics/x11/display.cpp index 368b67c..70b77c6 100644 --- a/source/graphics/x11/display.cpp +++ b/source/graphics/x11/display.cpp @@ -94,6 +94,8 @@ Display::Display(const string &disp_name): XSetErrorHandler(x_error_handler); + err_dialog = new ErrorDialog(this); + #ifdef WITH_XRANDR int event_base; int error_base; @@ -175,6 +177,22 @@ Display::Display(const string &disp_name): prev_enabled->next_right = &*i; prev_enabled = &*i; } + + if(!primary_monitor || !primary_monitor->desktop_mode) + { + // XRandR didn't give a sensible primary monitor. Try to guess one. + unsigned largest = 0; + for(list::iterator i=monitors.begin(); i!=monitors.end(); ++i) + if(i->desktop_mode) + { + unsigned size = i->desktop_mode->width*i->desktop_mode->height; + if(size>largest) + { + largest = size; + primary_monitor = &*i; + } + } + } } } #endif @@ -184,6 +202,7 @@ Display::~Display() { XCloseDisplay(priv->display); delete priv; + delete err_dialog; } void Display::set_mode(const VideoMode &requested_mode, bool exclusive)