[278/906] Implement set_xwindow_id (gst_gl_window_set_external_window_id).
authorJulien Isorce <julien.isorce@gmail.com>
Fri, 21 Nov 2008 19:51:48 +0000 (20:51 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:31:20 +0000 (19:31 +0000)
gst-libs/gst/gl/gstglwindow_x11.c

index 688a099..95ba65f 100644 (file)
@@ -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;
-
-  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);
-
-  SetWindowLongPtr (priv->internal_win_id, GWL_STYLE, WS_CHILD | WS_MAXIMIZE);
-  SetParent (priv->internal_win_id, (HWND)id);
-
-  //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);*/
+  g_debug ("SET EXTERNAL WIN IN\n");
+  if (window)
+  {
+    GstGLWindowPrivate *priv = window->priv;
+    XWindowAttributes attr;
+
+    g_mutex_lock (priv->x_lock);
+
+    XGetWindowAttributes (priv->disp_send, (Window) id, &attr);
+
+    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