rem: g_message ("data->signal %d", data->signal);
context: xine_error (BaconVideoWidget *bvw, GError **error){	signal_data *data, *save_data;	int err;	save_data = NULL;	/* Steal messages from the async queue, if there's an error,	 * to use as the error message rather than the crappy errors from	 * xine_open() */	while ((data = g_async_queue_try_pop (bvw->priv->queue)) != NULL)	{		g_message ("data->signal %d", data->signal);		g_assert (data->signal == MESSAGE_ASYNC				|| data->signal == BUFFERING_ASYNC				|| data->signal == REDIRECT_ASYNC				|| data->signal == EOS_ASYNC);		if (data->signal == ERROR_ASYNC)		{			if (save_data != NULL)			{				g_free (save_data->msg);				g_free (save_data);			}			save_data = data;		} else {			g_free (data->msg);			g_free (data);		}	}	if (save_data != NULL)	{		g_set_error (error, BVW_ERROR, save_data->num,				"%s", save_data->msg);		g_free (save_data->msg);		g_free (save_data);		return;	}	err = xine_get_error (bvw->priv->stream);	if (err == XINE_ERROR_NONE)		return;	switch (err)	{	case XINE_ERROR_NO_INPUT_PLUGIN:	case XINE_ERROR_NO_DEMUX_PLUGIN:		g_set_error (error, BVW_ERROR, BVW_ERROR_NO_PLUGIN_FOR_FILE,				_("There is no plugin to handle this movie."));		break;	case XINE_ERROR_DEMUX_FAILED:		g_set_error (error, BVW_ERROR, BVW_ERROR_BROKEN_FILE,				_("This movie is broken and can not be played further."));		break;	case XINE_ERROR_MALFORMED_MRL:		g_set_error (error, BVW_ERROR, BVW_ERROR_UNVALID_LOCATION,				_("This location is not a valid one."));		break;	case XINE_ERROR_INPUT_FAILED:		g_set_error (error, BVW_ERROR, BVW_ERROR_FILE_GENERIC,				_("This movie could not be opened."));		break;	default:		g_set_error (error, BVW_ERROR, BVW_ERROR_GENERIC,				_("Generic Error."));		break;	}}