From 9213666235271c5a80884a3cbdde056c79a25cac Mon Sep 17 00:00:00 2001 From: Alex Foobarian Date: Fri, 30 Sep 2005 20:15:43 +0000 Subject: [PATCH] fixed name collisions during track/wp DND --- ChangeLog | 1 + src/viktrwlayer.c | 23 +++++++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index c38a5461..e0f11131 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ Alex Foobarian : * Added a drag_drop_request method to layer interface, updated DnD to use it * Updated DND to insert layers at the point of the drop, instead of front of list * Added wp symbol support to gpx + * Fixed name collisions during track/wp DND 2005-09-29 Alex Foobarian : diff --git a/src/viktrwlayer.c b/src/viktrwlayer.c index 8ab54640..c494465b 100644 --- a/src/viktrwlayer.c +++ b/src/viktrwlayer.c @@ -1522,20 +1522,31 @@ static void trw_layer_drag_drop_request ( VikTrwLayer *vtl_src, VikTrwLayer *vtl } else { gint type = vik_treeview_item_get_data(vt, src_item_iter); gchar *name = vik_treeview_item_get_pointer(vt, src_item_iter); + gint i = 2; if (type==VIK_TRW_LAYER_SUBLAYER_TRACK) { VikTrack *t; - gchar *newname = strdup(name); - //g_print(" Moving track '%s' from layer '%s' to layer '%s'\n", newname, VIK_LAYER(vtl_src)->name, VIK_LAYER(vtl_dest)->name); - t = vik_track_copy(vik_trw_layer_get_track(vtl_src, newname)); + gchar *newname = g_strdup(name); + while (vik_trw_layer_get_track(vtl_dest, newname)) { + gchar *new_newname = g_strdup_printf("%s#%d", name, i); + g_free(newname); + newname = new_newname; + i++; + } + t = vik_track_copy(vik_trw_layer_get_track(vtl_src, name)); vik_trw_layer_delete_track(vtl_src, name); vik_trw_layer_add_track(vtl_dest, newname, t); } if (type==VIK_TRW_LAYER_SUBLAYER_WAYPOINT) { VikWaypoint *w; - gchar *newname = strdup(name); - //g_print(" Moving waypoint '%s' from layer '%s' to layer '%s'\n", newname, VIK_LAYER(vtl_src)->name, VIK_LAYER(vtl_dest)->name); - w = vik_waypoint_copy(vik_trw_layer_get_waypoint(vtl_src, newname)); + gchar *newname = g_strdup(name); + while (vik_trw_layer_get_waypoint(vtl_dest, newname)) { + gchar *new_newname = g_strdup_printf("%s#%d", name, i); + g_free(newname); + newname = new_newname; + i++; + } + w = vik_waypoint_copy(vik_trw_layer_get_waypoint(vtl_src, name)); vik_trw_layer_delete_waypoint(vtl_src, name); vik_trw_layer_add_waypoint(vtl_dest, newname, w); } -- 2.39.5