]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/x11/display.cpp
Implement graphical reporting for uncaught exceptions
[libs/gui.git] / source / graphics / x11 / display.cpp
index 368b67cecdc5b6953db9e113664e16f30bed9889..70b77c60ff6239c46041b2821a9c39777f6f0628 100644 (file)
@@ -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<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
@@ -184,6 +202,7 @@ Display::~Display()
 {
        XCloseDisplay(priv->display);
        delete priv;
+       delete err_dialog;
 }
 
 void Display::set_mode(const VideoMode &requested_mode, bool exclusive)