diff --git a/video/out/opengl/x11.c b/video/out/opengl/x11.c index 4d7efbac90..16d674c802 100644 --- a/video/out/opengl/x11.c +++ b/video/out/opengl/x11.c @@ -112,11 +112,13 @@ static bool create_context_x11_gl3(struct MPGLContext *ctx, int vo_flags, GLX_CONTEXT_FLAGS_ARB, ctx_flags, None }; + vo_x11_silence_xlib(1); GLXContext context = glXCreateContextAttribsARB(vo->x11->display, glx_ctx->fbc, 0, True, context_attribs); + vo_x11_silence_xlib(-1); if (!context) { - MP_INFO(vo, "Could not create GL3 context. Retrying with legacy context.\n"); + MP_VERBOSE(vo, "Could not create GL3 context. Retrying with legacy context.\n"); return false; } diff --git a/video/out/x11_common.c b/video/out/x11_common.c index 0aa49a4257..62d66fd730 100644 --- a/video/out/x11_common.c +++ b/video/out/x11_common.c @@ -37,6 +37,7 @@ #include "vo.h" #include "win_state.h" +#include "osdep/atomics.h" #include "osdep/timer.h" #include "osdep/subprocess.h" @@ -125,6 +126,7 @@ static const char x11_icon[] = ; static struct mp_log *x11_error_output; +static atomic_int x11_error_silence; static void vo_x11_update_geometry(struct vo *vo); static void vo_x11_fullscreen(struct vo *vo); @@ -262,8 +264,11 @@ static void vo_set_cursor_hidden(struct vo *vo, bool cursor_hidden) static int x11_errorhandler(Display *display, XErrorEvent *event) { struct mp_log *log = x11_error_output; - char msg[60]; + if (atomic_load(&x11_error_silence)) + return 0; + + char msg[60]; XGetErrorText(display, event->error_code, (char *) &msg, sizeof(msg)); mp_err(log, "X11 error: %s\n", msg); @@ -276,6 +281,11 @@ static int x11_errorhandler(Display *display, XErrorEvent *event) return 0; } +void vo_x11_silence_xlib(int dir) +{ + atomic_fetch_add(&x11_error_silence, dir); +} + static int net_wm_support_state_test(struct vo_x11_state *x11, Atom atom) { #define NET_WM_STATE_TEST(x) { \ diff --git a/video/out/x11_common.h b/video/out/x11_common.h index a25b8e2cca..7707c0a707 100644 --- a/video/out/x11_common.h +++ b/video/out/x11_common.h @@ -130,4 +130,6 @@ bool vo_x11_create_vo_window(struct vo *vo, XVisualInfo *vis, void vo_x11_config_vo_window(struct vo *vo); int vo_x11_control(struct vo *vo, int *events, int request, void *arg); +void vo_x11_silence_xlib(int dir); + #endif /* MPLAYER_X11_COMMON_H */