+ Cleanup();
+}
+
+//---------------------------------------------------------------------------
+// wxGStreamerMediaBackend::OnGTKRealize
+//
+// If the window wasn't realized when Load was called, this is the
+// callback for when it is.
+//
+// 1) Installs GTK idle handler if it doesn't exist
+// 2) Yeilds to avoid an X11 bug (?)
+// 3) Tells GStreamer to play the video in our control
+//---------------------------------------------------------------------------
+#ifdef __WXGTK__
+
+#ifdef __WXDEBUG__
+
+#if wxUSE_THREADS
+# define DEBUG_MAIN_THREAD if (wxThread::IsMain() && g_mainThreadLocked) printf("gui reentrance");
+#else
+# define DEBUG_MAIN_THREAD
+#endif
+#else
+#define DEBUG_MAIN_THREAD
+#endif // Debug
+
+extern void wxapp_install_idle_handler();
+extern bool g_isIdle;
+extern bool g_mainThreadLocked;
+
+gint wxGStreamerMediaBackend::OnGTKRealize(GtkWidget* theWidget,
+ wxGStreamerMediaBackend* be)
+{
+ DEBUG_MAIN_THREAD
+
+ if (g_isIdle)
+ wxapp_install_idle_handler();
+
+ wxYield(); //FIXME: X Server gets an error if I don't do this or a messagebox beforehand?!?!??
+
+ GdkWindow *window = GTK_PIZZA(theWidget)->bin_window;
+ wxASSERT(window);
+
+ GstElement* videosink;
+ g_object_get (G_OBJECT (be->m_player), "video-sink", &videosink, NULL);
+
+ GstElement* overlay = gst_bin_get_by_interface (GST_BIN (videosink),
+ GST_TYPE_X_OVERLAY);
+ gst_x_overlay_set_xwindow_id( GST_X_OVERLAY(overlay),
+ GDK_WINDOW_XWINDOW( window )
+ );
+
+ return 0;
+}
+
+
+#endif
+
+//---------------------------------------------------------------------------
+// wxGStreamerMediaBackend::Cleanup
+//
+// Frees the gstreamer interfaces if there were any created
+//---------------------------------------------------------------------------
+void wxGStreamerMediaBackend::Cleanup()
+{
+ if(m_player && GST_IS_OBJECT(m_player))
+ {
+ gst_element_set_state (m_player, GST_STATE_NULL);
+ gst_object_unref (GST_OBJECT (m_player));
+ }