From 718696d6ad8b86de668b8ceb1f1ee621995ad1ba Mon Sep 17 00:00:00 2001 From: huobos Date: Fri, 20 Jan 2017 10:23:44 +0800 Subject: [PATCH] Open files in selected layer --- src/file.c | 16 +++++++++++----- src/file.h | 2 +- src/vikwindow.c | 3 +-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/file.c b/src/file.c index ea80d889..7ea85807 100644 --- a/src/file.c +++ b/src/file.c @@ -649,7 +649,7 @@ gchar *append_file_ext ( const gchar *filename, VikFileType_t type ) return new_name; } -VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, const gchar *filename_or_uri ) +VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, VikTrwLayer *vtl, const gchar *filename_or_uri ) { g_return_val_if_fail ( vp != NULL, LOAD_TYPE_READ_FAILURE ); @@ -687,8 +687,12 @@ VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, const gchar // must be loaded into a new TrackWaypoint layer (hence it be created) gboolean success = TRUE; // Detect load failures - mainly to remove the layer created as it's not required - VikLayer *vtl = vik_layer_create ( VIK_LAYER_TRW, vp, FALSE ); - vik_layer_rename ( vtl, a_file_basename ( filename ) ); + // Add to specified layer + gboolean add_new = !IS_VIK_TRW_LAYER(vtl); + if (add_new) { + vtl = vik_layer_create ( VIK_LAYER_TRW, vp, FALSE ); + vik_layer_rename ( vtl, a_file_basename ( filename ) ); + } // In fact both kml & gpx files start the same as they are in xml if ( a_file_check_ext ( filename, ".kml" ) && check_magic ( f, GPX_MAGIC, GPX_MAGIC_LEN ) ) { @@ -720,8 +724,10 @@ VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, const gchar else { // Complete the setup from the successful load vik_layer_post_read ( vtl, vp, TRUE ); - vik_aggregate_layer_add_layer ( top, vtl, FALSE ); - vik_trw_layer_auto_set_view ( VIK_TRW_LAYER(vtl), vp ); + if (add_new) { + vik_aggregate_layer_add_layer ( top, vtl, FALSE ); + vik_trw_layer_auto_set_view ( VIK_TRW_LAYER(vtl), vp ); + } } } g_free ( dirpath ); diff --git a/src/file.h b/src/file.h index 70fe1238..a0b50d4f 100644 --- a/src/file.h +++ b/src/file.h @@ -58,7 +58,7 @@ typedef enum { gchar *append_file_ext ( const gchar *filename, VikFileType_t type ); -VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, const gchar *filename ); +VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, VikTrwLayer *vtl, const gchar *filename ); gboolean a_file_save ( VikAggregateLayer *top, gpointer vp, const gchar *filename ); /* Only need to define VikTrack if the file type is FILE_TYPE_GPX_TRACK */ gboolean a_file_export ( VikTrwLayer *vtl, const gchar *filename, VikFileType_t file_type, VikTrack *trk, gboolean write_hidden ); diff --git a/src/vikwindow.c b/src/vikwindow.c index 833b8c9c..d8beffbe 100644 --- a/src/vikwindow.c +++ b/src/vikwindow.c @@ -3100,8 +3100,7 @@ void vik_window_open_file ( VikWindow *vw, const gchar *filename, gboolean chang vw->filename = g_strdup ( filename ); gboolean success = FALSE; gboolean restore_original_filename = FALSE; - - vw->loaded_type = a_file_load ( vik_layers_panel_get_top_layer(vw->viking_vlp), vw->viking_vvp, filename ); + vw->loaded_type = a_file_load ( vik_layers_panel_get_top_layer(vw->viking_vlp), vw->viking_vvp, vw->containing_vtl, filename ); switch ( vw->loaded_type ) { case LOAD_TYPE_READ_FAILURE: -- 2.39.5