]> git.sesse.net Git - vlc/commitdiff
* modules/video_output/x11/xcommon.c: don't abort on X_SetInputFocus error which...
authorGildas Bazin <gbazin@videolan.org>
Tue, 8 Mar 2005 18:10:49 +0000 (18:10 +0000)
committerGildas Bazin <gbazin@videolan.org>
Tue, 8 Mar 2005 18:10:49 +0000 (18:10 +0000)
modules/video_output/x11/xcommon.c

index 85c89def155049c098c14116b9cad8157cb6e83a..52ed66cc021bc3f1c11bd8b9549bfa0056b475e2 100644 (file)
@@ -52,6 +52,7 @@
 #endif
 
 #include <X11/Xlib.h>
+#include <X11/Xproto.h>
 #include <X11/Xmd.h>
 #include <X11/Xutil.h>
 #include <X11/keysym.h>
@@ -128,6 +129,8 @@ static int ConvertKey( int );
 
 static int WindowOnTop( vout_thread_t *, vlc_bool_t );
 
+static int X11ErrorHandler( Display *, XErrorEvent * );
+
 /*****************************************************************************
  * Activate: allocate X11 video thread output method
  *****************************************************************************
@@ -180,6 +183,9 @@ int E_(Activate) ( vlc_object_t *p_this )
     }
     if( psz_display ) free( psz_display );
 
+    /* Replace error handler so we can intercept some non-fatal errors */
+    XSetErrorHandler( X11ErrorHandler );
+
     /* Get a screen ID matching the XOpenDisplay return value */
     p_vout->p_sys->i_screen = DefaultScreen( p_vout->p_sys->p_display );
 
@@ -2109,6 +2115,23 @@ static IMAGE_TYPE * CreateImage( vout_thread_t *p_vout,
     return p_image;
 }
 
+/*****************************************************************************
+ * X11ErrorHandler: replace error handler so we can intercept some of them
+ *****************************************************************************/
+static int X11ErrorHandler( Display * display, XErrorEvent * event )
+{
+    /* Ingnore errors on XSetInputFocus()
+     * (they happen when a window is not yet mapped) */
+    if( event->request_code == X_SetInputFocus )
+    {
+        fprintf(stderr, "XSetInputFocus failed\n");
+        return 0;
+    }
+
+    XSetErrorHandler(NULL);
+    return (XSetErrorHandler(X11ErrorHandler))( display, event );
+}
+
 #ifdef MODULE_NAME_IS_x11
 /*****************************************************************************
  * SetPalette: sets an 8 bpp palette