From 422037ce2808d9db060f27beb3fbc81d725cffaa Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Thu, 29 May 2014 14:34:04 +0000
Subject: [PATCH] set custom fltk error handlers

---
 Fltk/FlGui.cpp | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/Fltk/FlGui.cpp b/Fltk/FlGui.cpp
index 465734911f..a5a7cf804e 100644
--- a/Fltk/FlGui.cpp
+++ b/Fltk/FlGui.cpp
@@ -198,9 +198,39 @@ static void gamepad_handler(void *data)
   }
 }
 
+static void error_handler(const char *fmt, ...)
+{
+  char str[5000];
+  va_list args;
+  va_start(args, fmt);
+  vsnprintf(str, sizeof(str), fmt, args);
+  va_end(args);
+  if(!strcmp(str, "Insufficient GL support")){ // this should be fatal
+    CTX::instance()->terminal = 1;
+    Msg::Error("%s (FLTK internal error)", str);
+    Msg::Fatal("Your system does not seem to support OpenGL - aborting");
+  }
+  else{
+    Msg::Error("%s (FLTK internal error)", str);
+  }
+}
+
+static void fatal_error_handler(const char *fmt, ...)
+{
+  char str[5000];
+  va_list args;
+  va_start(args, fmt);
+  vsnprintf(str, sizeof(str), fmt, args);
+  va_end(args);
+  CTX::instance()->terminal = 1;
+  Msg::Fatal("%s (FLTK internal error)", str);
+}
 
 FlGui::FlGui(int argc, char **argv)
 {
+  Fl::error = error_handler;
+  Fl::fatal = fatal_error_handler;
+
   // set X display
   if(CTX::instance()->display.size())
     Fl::display(CTX::instance()->display.c_str());
-- 
GitLab