Factor out.
authorgb <gb@5584edef-b1fe-4b99-b61b-dd2bab72e969>
Mon, 15 Mar 2010 16:57:37 +0000 (16:57 +0000)
committergb <gb@5584edef-b1fe-4b99-b61b-dd2bab72e969>
Mon, 15 Mar 2010 16:57:37 +0000 (16:57 +0000)
gst-libs/gst/vaapi/gstvaapiwindow_x11.c

index c995a49..ad5cc3a 100644 (file)
@@ -113,8 +113,10 @@ x11_create_window(Display *display, unsigned int width, unsigned int height)
         vis,
         xswa_mask, &xswa
     );
-    if (window)
-        XSelectInput(display, window, x11_event_mask);
+    if (!window)
+        return None;
+
+    XSelectInput(display, window, x11_event_mask);
     return window;
 }
 
@@ -159,6 +161,30 @@ static void x11_wait_event(Display *dpy, Window w, int type)
 }
 
 static gboolean
+gst_vaapi_window_x11_show(GstVaapiWindow *window)
+{
+    GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv;
+    Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display);
+
+    x11_trap_errors();
+    XMapWindow(dpy, priv->xid);
+    x11_wait_event(dpy, priv->xid, MapNotify);
+    return x11_untrap_errors() == 0;
+}
+
+static gboolean
+gst_vaapi_window_x11_hide(GstVaapiWindow *window)
+{
+    GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv;
+    Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display);
+
+    x11_trap_errors();
+    XUnmapWindow(dpy, priv->xid);
+    x11_wait_event(dpy, priv->xid, UnmapNotify);
+    return x11_untrap_errors() == 0;
+}
+
+static gboolean
 gst_vaapi_window_x11_create(GstVaapiWindow *window, guint width, guint height)
 {
     GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv;
@@ -170,9 +196,13 @@ gst_vaapi_window_x11_create(GstVaapiWindow *window, guint width, guint height)
     dpy       = GST_VAAPI_DISPLAY_XDISPLAY(priv->display);
     priv->xid = x11_create_window(dpy, width, height);
 
-    XMapRaised(dpy, priv->xid);
-    x11_wait_event(dpy, priv->xid, MapNotify);
-    return TRUE;
+    if (!gst_vaapi_window_x11_show(window))
+        return FALSE;
+
+    x11_trap_errors();
+    XRaiseWindow(dpy, priv->xid);
+    XSync(dpy, False);
+    return x11_untrap_errors() == 0;
 }
 
 static void
@@ -182,8 +212,7 @@ gst_vaapi_window_x11_destroy(GstVaapiWindow *window)
     Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display);
 
     if (priv->create_window && priv->xid) {
-        XUnmapWindow(dpy, priv->xid);
-        x11_wait_event(dpy, priv->xid, UnmapNotify);
+        gst_vaapi_window_x11_hide(window);
         XDestroyWindow(dpy, priv->xid);
         priv->xid = None;
     }
@@ -193,30 +222,6 @@ gst_vaapi_window_x11_destroy(GstVaapiWindow *window)
 }
 
 static gboolean
-gst_vaapi_window_x11_show(GstVaapiWindow *window)
-{
-    GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv;
-    Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display);
-
-    x11_trap_errors();
-    XMapWindow(dpy, priv->xid);
-    x11_wait_event(dpy, priv->xid, MapNotify);
-    return x11_untrap_errors() == 0;
-}
-
-static gboolean
-gst_vaapi_window_x11_hide(GstVaapiWindow *window)
-{
-    GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv;
-    Display * const dpy = GST_VAAPI_DISPLAY_XDISPLAY(priv->display);
-
-    x11_trap_errors();
-    XUnmapWindow(dpy, priv->xid);
-    x11_wait_event(dpy, priv->xid, UnmapNotify);
-    return x11_untrap_errors() == 0;
-}
-
-static gboolean
 gst_vaapi_window_x11_resize(GstVaapiWindow *window, guint width, guint height)
 {
     GstVaapiWindowX11Private * const priv = GST_VAAPI_WINDOW_X11(window)->priv;