Преглед изворни кода

~ Keep original X messages as they're kind of useful for debugging

Signed-off-by: Alexis Maiquez Murcia <almamu@almamu.com>
Alexis Maiquez Murcia пре 4 година
родитељ
комит
f4988158ad
1 измењених фајлова са 9 додато и 2 уклоњено
  1. 9 2
      src/WallpaperEngine/Render/CContext.cpp

+ 9 - 2
src/WallpaperEngine/Render/CContext.cpp

@@ -13,6 +13,8 @@
 
 using namespace WallpaperEngine::Render;
 
+XErrorHandler originalErrorHandler;
+
 void CustomXIOErrorExitHandler (Display* dsp, void* userdata)
 {
     auto context = static_cast <CContext*> (userdata);
@@ -25,11 +27,15 @@ void CustomXIOErrorExitHandler (Display* dsp, void* userdata)
     context->initializeViewports ();
 }
 
-int CustomXErrorHandler (Display* dsp, XErrorEvent* event)
+int CustomXErrorHandler (Display* dpy, XErrorEvent* event)
 {
 #ifdef DEBUG
     std::cerr << "Detected X error" << std::endl;
 #endif /* DEBUG */
+
+    // call the original handler so we can keep some information reporting
+    originalErrorHandler (dpy, event);
+
     return 0;
 }
 
@@ -38,6 +44,7 @@ int CustomXIOErrorHandler (Display* dsp)
 #ifdef DEBUG
     std::cerr << "Detected X IO error" << std::endl;
 #endif /* DEBUG */
+
     return 0;
 }
 
@@ -65,7 +72,7 @@ void CContext::initializeViewports ()
 #ifdef HAVE_XSETIOERROREXITHANDLER
     XSetIOErrorExitHandler (this->m_display, CustomXIOErrorExitHandler, this);
 #endif /* HAVE_XSETIOERROREXITHANDLER */
-    XSetErrorHandler (CustomXErrorHandler);
+    originalErrorHandler = XSetErrorHandler (CustomXErrorHandler);
     XSetIOErrorHandler (CustomXIOErrorHandler);
 
     int xrandr_result, xrandr_error;