FIX: windows build process: enable png build
[navit-package] / navit / mapset.c
index ba5560b..41d39b5 100644 (file)
@@ -44,6 +44,10 @@ struct mapset {
        GList *maps; /**< Linked list of all the maps in the mapset */
 };
 
+struct attr_iter {
+       GList *last;
+};
+
 /**
  * @brief Creates a new, empty mapset
  *
@@ -59,6 +63,18 @@ struct mapset *mapset_new(struct attr *parent, struct attr **attrs)
 }
 
 
+struct attr_iter *
+mapset_attr_iter_new(void)
+{
+       return g_new0(struct attr_iter, 1);
+}
+
+void
+mapset_attr_iter_destroy(struct attr_iter *iter)
+{
+       g_free(iter);
+}
+
 /**
  * @brief Adds a map to a mapset
  *
@@ -82,11 +98,17 @@ mapset_get_attr(struct mapset *ms, enum attr_type type, struct attr *attr, struc
 {
        GList *map;
        map=ms->maps;
+       attr->type=type;
        switch (type) {
        case attr_map:
-               if (map) {
-                       attr->u.map=map->data;
-                       return 1;
+               while (map) {
+                       if (!iter || iter->last == g_list_previous(map)) {
+                               attr->u.map=map->data;
+                               if (iter)
+                                       iter->last=map;
+                               return 1;
+                       }
+                       map=g_list_next(map);
                }
                break;
        default:
@@ -170,6 +192,12 @@ struct map * mapset_next(struct mapset_handle *msh, int active)
                msh->l=g_list_next(msh->l);
                if (!active)
                        return ret;                     
+               if (active == 2 && map_get_attr(ret, attr_route_active, &active_attr, NULL)) {
+                       if (active_attr.u.num)
+                               return ret;
+                       else
+                               continue;
+               }
                if (!map_get_attr(ret, attr_active, &active_attr, NULL))
                        return ret;
                if (active_attr.u.num)