+void XineEngine::add_stream(XineStream &stream)
+{
+ streams.push_back(&stream);
+}
+
+void XineEngine::remove_stream(XineStream &stream)
+{
+ list<XineStream *>::iterator i = find(streams.begin(), streams.end(), &stream);
+ if(i!=streams.end())
+ streams.erase(i);
+}
+
+void XineEngine::tick()
+{
+ if(pending_expose)
+ {
+ xine_port_send_gui_data(video_driver, XINE_GUI_SEND_EXPOSE_EVENT, &pending_expose->xevent);
+ delete pending_expose;
+ pending_expose = 0;
+ }
+
+ for(list<XineStream *>::const_iterator i=streams.begin(); i!=streams.end(); ++i)
+ (*i)->tick();
+}
+
+void XineEngine::window_exposed(unsigned, unsigned, unsigned, unsigned, const Graphics::Window::Event &event)
+{
+ delete pending_expose;
+ pending_expose = new Graphics::Window::Event(event);
+}
+