gl/x11: don't XGetWindowAttributes every XEvent

fixes a deadlock in xcb where the X window may not exist.

https://bugzilla.gnome.org/show_bug.cgi?id=745633
This commit is contained in:
Matthew Waters 2015-03-11 18:49:22 +00:00 committed by Tim-Philipp Müller
parent 9968b512c5
commit 39eb34eb43

View file

@ -539,7 +539,6 @@ gst_gl_window_x11_handle_event (GstGLWindowX11 * window_x11)
KeySym keysym; KeySym keysym;
struct mouse_event *mouse_data; struct mouse_event *mouse_data;
struct key_event *key_data; struct key_event *key_data;
XWindowAttributes attr;
window = GST_GL_WINDOW (window_x11); window = GST_GL_WINDOW (window_x11);
@ -549,10 +548,6 @@ gst_gl_window_x11_handle_event (GstGLWindowX11 * window_x11)
/* XSendEvent (which are called in other threads) are done from another display structure */ /* XSendEvent (which are called in other threads) are done from another display structure */
XNextEvent (window_x11->device, &event); XNextEvent (window_x11->device, &event);
XGetWindowAttributes (window_x11->device, window_x11->internal_win_id,
&attr);
window_x11->current_width = attr.width;
window_x11->current_height = attr.height;
window_x11->allow_extra_expose_events = XPending (window_x11->device) <= 2; window_x11->allow_extra_expose_events = XPending (window_x11->device) <= 2;
@ -585,6 +580,9 @@ gst_gl_window_x11_handle_event (GstGLWindowX11 * window_x11)
if (window->resize) if (window->resize)
window->resize (window->resize_data, event.xconfigure.width, window->resize (window->resize_data, event.xconfigure.width,
event.xconfigure.height); event.xconfigure.height);
window_x11->current_width = event.xconfigure.width;
window_x11->current_height = event.xconfigure.width;
break; break;
} }
@ -610,6 +608,9 @@ gst_gl_window_x11_handle_event (GstGLWindowX11 * window_x11)
gst_object_unref (context); gst_object_unref (context);
} }
window_x11->current_width = event.xexpose.width;
window_x11->current_height = event.xexpose.width;
break; break;
case VisibilityNotify: case VisibilityNotify: