- switch(vik_treeview_item_get_type(vt, &src_iter)) {
- case VIK_TREEVIEW_TYPE_LAYER:
- /* dest_cp is the future new path as envisioned by Gtk, and may not exist yet.
- * We are interested in the future parent, which must be an aggregate layer.
- * Therefore, we need to find the first ancestor who is an aggregate layer.
- */
- gtk_tree_path_up(dest_cp);
- while (gtk_tree_model_get_iter (src_model, &dest_iter, dest_cp) &&
- (vik_treeview_item_get_type(vt, &dest_iter) != VIK_TREEVIEW_TYPE_LAYER ||
- !IS_VIK_AGGREGATE_LAYER(vik_treeview_item_get_pointer (vt, &dest_iter)))) {
- gtk_tree_path_up(dest_cp);
- fprintf(stderr, "up\n");
- }
- if (gtk_tree_model_get_iter (src_model, &dest_iter, dest_cp)) {
- VikLayer *vl_src, *vl_dest;
- vl_src = vik_treeview_item_get_pointer(vt, &src_iter);
- vl_dest = vik_treeview_item_get_pointer(vt, &dest_iter);
- printf("moving layer '%s' into layer '%s'\n", vl_src->name, vl_dest->name);
-
- /*
- * FIXME: ..._layer_delete unrefs the given layer, causing it to be destroyed.
- * However, ..._add_layer doesn't increase the ref count, so regardless of order
- * without the explicit g_object_ref this wouldn't work.
- */
- g_object_ref(vl_src);
- vik_aggregate_layer_delete(vik_treeview_item_get_parent(vt, &src_iter), &src_iter);
- vik_aggregate_layer_add_layer(VIK_AGGREGATE_LAYER(vl_dest), vl_src);
- }
- break;
- case VIK_TREEVIEW_TYPE_SUBLAYER:
- /*
- * If we're moving a sublayer, handle all known types separately. For now that
- * is only TRW. This might be done more elegantly through an interface.
- */
- if (IS_VIK_TRW_LAYER(vik_treeview_item_get_parent(vt, &src_iter))) {
- VikTrwLayer *vtl_src, *vtl_dest;