]> git.tdb.fi Git - libs/gui.git/blobdiff - source/gbase/display.cpp
Exception changes
[libs/gui.git] / source / gbase / display.cpp
index 6ae2906f42cbf903bbe4e2c20b90e4a2e5cb6e1e..da036a1baa9a4174049f40920fd0575e42fc0ceb 100644 (file)
@@ -5,7 +5,6 @@
 #include <X11/extensions/xf86vmode.h>
 #endif
 #endif
-#include <msp/core/except.h>
 #include <msp/strings/format.h>
 #include <msp/strings/lexicalcast.h>
 #include "display.h"
@@ -48,6 +47,11 @@ int x_error_handler(Display *display, XErrorEvent *event)
 namespace Msp {
 namespace Graphics {
 
+unsupported_video_mode::unsupported_video_mode(const VideoMode &mode):
+       runtime_error(format("%dx%d", mode.width, mode.height))
+{ }
+
+
 Display::Display(const string &disp_name):
        priv(new Private)
 {
@@ -77,7 +81,7 @@ Display::Display(const string &disp_name):
        else
                priv->display = XOpenDisplay(disp_name.c_str());
        if(!priv->display)
-               throw Exception("Couldn't open X display");
+               throw runtime_error("XOpenDisplay");
 
        XSetErrorHandler(x_error_handler);
 
@@ -141,7 +145,9 @@ void Display::set_mode(const VideoMode &mode)
                info.dmDisplayFrequency = mode.rate;
        }
 
-       ChangeDisplaySettings(&info, CDS_FULLSCREEN);
+       LONG ret = ChangeDisplaySettings(&info, CDS_FULLSCREEN);
+       if(ret!=DISP_CHANGE_SUCCESSFUL)
+               throw unsupported_video_mode(mode);
 #elif defined(WITH_XF86VIDMODE)
        int screen = DefaultScreen(priv->display);
 
@@ -163,10 +169,10 @@ void Display::set_mode(const VideoMode &mode)
                }
        }
 
-       throw InvalidParameterValue("Requested mode not supported");
+       throw unsupported_video_mode(mode);
 #else
        (void)mode;
-       throw Exception("Video mode switching not supported");
+       throw runtime_error("no xf86vidmode support");
 #endif
 }
 
@@ -229,7 +235,7 @@ void Display::check_error()
        if(error_flag)
        {
                error_flag = false;
-               throw Exception(error_msg);
+               throw runtime_error(error_msg);
        }
 }