rem: D("ref mrl detected: %s", ref->mrl);
add: bacon_video_widget_close (bvw); bacon_video_widget_open (bvw, ref->mrl, NULL);
context: xine_event (void *user_data, const xine_event_t *event){	BaconVideoWidget *bvw = (BaconVideoWidget *) user_data;	xine_ui_data_t *ui_data;	xine_progress_data_t *prg;	xine_mrl_reference_data_t *ref;	signal_data *data;	switch (event->type)	{	case XINE_EVENT_UI_PLAYBACK_FINISHED:		data = g_new0 (signal_data, 1);		data->signal = EOS_ASYNC;		g_async_queue_push (bvw->priv->queue, data);		g_idle_add ((GSourceFunc) bacon_video_widget_idle_signal, bvw);		break;	case XINE_EVENT_UI_CHANNELS_CHANGED:		data = g_new0 (signal_data, 1);		data->signal = CHANNELS_CHANGE_ASYNC;		g_async_queue_push (bvw->priv->queue, data);		g_idle_add ((GSourceFunc) bacon_video_widget_idle_signal, bvw);		break;	case XINE_EVENT_UI_SET_TITLE:		ui_data = event->data;		data = g_new0 (signal_data, 1);		data->signal = TITLE_CHANGE_ASYNC;		data->msg = g_strdup (ui_data->str);		g_async_queue_push (bvw->priv->queue, data);		g_idle_add ((GSourceFunc) bacon_video_widget_idle_signal, bvw);		break;	case XINE_EVENT_PROGRESS:		prg = event->data;		data = g_new0 (signal_data, 1);		data->signal = BUFFERING_ASYNC;		data->num = prg->percent;		g_async_queue_push (bvw->priv->queue, data);		g_idle_add ((GSourceFunc) bacon_video_widget_idle_signal, bvw);		break;	case XINE_EVENT_MRL_REFERENCE:		ref = event->data;		D("ref mrl detected: %s", ref->mrl);		break;	case XINE_EVENT_UI_MESSAGE:		xine_event_message (bvw, (xine_ui_message_data_t *)event->data);		break;	}}