static void
champlain_map_source_chain_dispose (GObject *object)
{
  ChamplainMapSourceChain *source_chain = CHAMPLAIN_MAP_SOURCE_CHAIN (object);

  while (source_chain->priv->stack_top)
    champlain_map_source_chain_pop (source_chain);

  G_OBJECT_CLASS (champlain_map_source_chain_parent_class)->dispose (object);
}
static guint
get_tile_size (ChamplainMapSource *map_source)
{
  ChamplainMapSourceChain *source_chain = CHAMPLAIN_MAP_SOURCE_CHAIN (map_source);
  g_return_val_if_fail (source_chain, 0);

  ChamplainMapSourceChainPrivate *priv = source_chain->priv;
  g_return_val_if_fail (priv->stack_top, 0);

  return champlain_map_source_get_tile_size (priv->stack_top);
}
static const gchar *
get_license_uri (ChamplainMapSource *map_source)
{
  ChamplainMapSourceChain *source_chain = CHAMPLAIN_MAP_SOURCE_CHAIN (map_source);
  g_return_val_if_fail (source_chain, NULL);

  ChamplainMapSourceChainPrivate *priv = source_chain->priv;
  g_return_val_if_fail (priv->stack_top, NULL);

  return champlain_map_source_get_license_uri (priv->stack_top);
}
static void
fill_tile (ChamplainMapSource *map_source,
    ChamplainTile *tile)
{
  ChamplainMapSourceChain *source_chain = CHAMPLAIN_MAP_SOURCE_CHAIN (map_source);
  g_return_if_fail (source_chain);

  ChamplainMapSourceChainPrivate *priv = source_chain->priv;
  g_return_if_fail (priv->stack_top);

  champlain_map_source_fill_tile (priv->stack_top, tile);
}
static void
on_set_next_source (ChamplainMapSource *map_source,
    G_GNUC_UNUSED ChamplainMapSource *old_next_source,
    ChamplainMapSource *new_next_source)
{
  ChamplainMapSourceChain *source_chain = CHAMPLAIN_MAP_SOURCE_CHAIN (map_source);
  ChamplainMapSourceChainPrivate *priv = source_chain->priv;

  g_return_if_fail (source_chain);

  if (priv->stack_bottom)
    champlain_map_source_set_next_source (priv->stack_bottom, new_next_source);
}