XSetErrorHandler(x_error_handler);
+ err_dialog = new ErrorDialog(this);
+
#ifdef WITH_XRANDR
int event_base;
int error_base;
mode.index = modes.size();
mode.monitor = &monitor;
mode.rate = info->dotClock/(info->hTotal*info->vTotal);
- if(find_matching_mode(mode))
+ if(find_mode(mode))
continue;
modes.push_back(mode);
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<Monitor>::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
{
XCloseDisplay(priv->display);
delete priv;
+ delete err_dialog;
}
void Display::set_mode(const VideoMode &requested_mode, bool exclusive)
{
#ifdef WITH_XRANDR
- const VideoMode *mode = find_matching_mode(requested_mode);
+ const VideoMode *mode = find_mode(requested_mode);
if(!mode)
throw unsupported_video_mode(requested_mode);