#ifdef WITH_XF86VIDMODE
#include <X11/extensions/xf86vmode.h>
#endif
+#include <msp/io/print.h>
#include <msp/strings/format.h>
#include <msp/strings/lexicalcast.h>
#include "display.h"
string msg = Msp::format("Request %s failed with %s [%08X]", req, err, event->resourceid);
if(error_flag)
- cerr<<"Discarding error: "<<msg<<'\n';
+ Msp::IO::print(Msp::IO::cerr, "Discarding error: %s\n", msg);
else
{
- cerr<<msg<<'\n';
+ Msp::IO::print(Msp::IO::cerr, "%s\n", msg);
error_msg = msg;
error_flag = true;
}
namespace Graphics {
Display::Display(const string &disp_name):
+ primary_monitor(0),
priv(new Private)
{
if(disp_name.empty())
#ifdef WITH_XF86VIDMODE
int screen = DefaultScreen(priv->display);
+ monitors.push_back(Monitor());
+ Monitor &monitor = monitors.back();
+ primary_monitor = &monitor;
+
int nmodes;
XF86VidModeModeInfo **infos;
XF86VidModeGetAllModeLines(priv->display, screen, &nmodes, &infos);
+
+ XF86VidModeModeLine modeline;
+ int dotclock;
+ XF86VidModeGetModeLine(priv->display, screen, &dotclock, &modeline);
+
for(int i=0; i<nmodes; ++i)
{
XF86VidModeModeInfo &info = *infos[i];
VideoMode mode(info.hdisplay, info.vdisplay);
+ mode.monitor = &monitor;
if(info.htotal && info.vtotal)
mode.rate = info.dotclock/(info.htotal*info.vtotal);
modes.push_back(mode);
+ monitor.video_modes.push_back(&modes.back());
+
+ if(info.htotal==modeline.htotal && info.vtotal==modeline.vtotal && info.dotclock==static_cast<unsigned>(dotclock))
+ monitor.desktop_mode = &modes.back();
}
XFree(infos);
-
- XF86VidModeModeLine modeline;
- int dotclock;
- XF86VidModeGetModeLine(priv->display, screen, &dotclock, &modeline);
- orig_mode = VideoMode(modeline.hdisplay, modeline.vdisplay);
- if(modeline.htotal && modeline.vtotal)
- orig_mode.rate = dotclock/(modeline.htotal*modeline.vtotal);
#endif
}
delete priv;
}
-void Display::set_mode(const VideoMode &mode)
+void Display::set_mode(const VideoMode &mode, bool)
{
#ifdef WITH_XF86VIDMODE
int screen = DefaultScreen(priv->display);