From a8105b91a6efb22c7dc19b9a16e9fc2c9c498fd2 Mon Sep 17 00:00:00 2001 From: Julien Isorce Date: Fri, 21 Nov 2008 20:51:48 +0100 Subject: [PATCH] [278/906] Implement set_xwindow_id (gst_gl_window_set_external_window_id). --- gst-libs/gst/gl/gstglwindow_x11.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/gst-libs/gst/gl/gstglwindow_x11.c b/gst-libs/gst/gl/gstglwindow_x11.c index 688a099ed7..95ba65f371 100644 --- a/gst-libs/gst/gl/gstglwindow_x11.c +++ b/gst-libs/gst/gl/gstglwindow_x11.c @@ -392,23 +392,25 @@ gst_gl_window_error_quark (void) void gst_gl_window_set_external_window_id (GstGLWindow *window, guint64 id) { - /*stGLWindowPrivate *priv = window->priv; - WNDPROC window_parent_proc = (WNDPROC) (guint64) GetWindowLongPtr((HWND)id, GWL_WNDPROC); - RECT rect; + g_debug ("SET EXTERNAL WIN IN\n"); + if (window) + { + GstGLWindowPrivate *priv = window->priv; + XWindowAttributes attr; - SetProp (priv->internal_win_id, "gl_window_parent_id", (HWND)id); - SetProp ((HWND)id, "gl_window_id", priv->internal_win_id); - SetProp ((HWND)id, "gl_window_parent_proc", (WNDPROC) window_parent_proc); - SetWindowLongPtr ((HWND)id, GWL_WNDPROC, (DWORD) (guint64) sub_class_proc); + g_mutex_lock (priv->x_lock); - SetWindowLongPtr (priv->internal_win_id, GWL_STYLE, WS_CHILD | WS_MAXIMIZE); - SetParent (priv->internal_win_id, (HWND)id); + XGetWindowAttributes (priv->disp_send, (Window) id, &attr); - //take changes into account: SWP_FRAMECHANGED - GetClientRect ((HWND)id, &rect); - SetWindowPos (priv->internal_win_id, HWND_TOP, rect.left, rect.top, rect.right, rect.bottom, - SWP_ASYNCWINDOWPOS | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_NOACTIVATE); - MoveWindow (priv->internal_win_id, rect.left, rect.top, rect.right, rect.bottom, FALSE);*/ + XResizeWindow (priv->disp_send, priv->internal_win_id, attr.width, attr.height); + + XReparentWindow (priv->disp_send, priv->internal_win_id, (Window) id, attr.x, attr.y); + + XSync (priv->disp_send, FALSE); + + g_mutex_unlock (priv->x_lock); + } + g_debug ("SET EXTERNAL WIN OUT\n"); } void