+/**
+ * Some common things to do on completion of a datasource process
+ * . Update layer
+ * . Update dialog info
+ * . Update main dsisplay
+ */
+static void on_complete_process (w_and_interface_t *wi)
+{
+ if (wi->w->running) {
+ gtk_label_set_text ( GTK_LABEL(wi->w->status), _("Done.") );
+ if ( wi->creating_new_layer ) {
+ /* Only create the layer if it actually contains anything useful */
+ // TODO: create function for this operation to hide detail:
+ if ( ! vik_trw_layer_is_empty ( wi->vtl ) ) {
+ vik_layer_post_read ( VIK_LAYER(wi->vtl), wi->w->vvp, TRUE );
+ vik_aggregate_layer_add_layer ( vik_layers_panel_get_top_layer(wi->w->vlp), VIK_LAYER(wi->vtl), TRUE );
+ }
+ else
+ gtk_label_set_text ( GTK_LABEL(wi->w->status), _("No data.") );
+ }
+ if ( wi->w->source_interface->keep_dialog_open ) {
+ gtk_dialog_set_response_sensitive ( GTK_DIALOG(wi->w->dialog), GTK_RESPONSE_ACCEPT, TRUE );
+ gtk_dialog_set_response_sensitive ( GTK_DIALOG(wi->w->dialog), GTK_RESPONSE_REJECT, FALSE );
+ } else {
+ gtk_dialog_response ( GTK_DIALOG(wi->w->dialog), GTK_RESPONSE_ACCEPT );
+ }
+ // Main display update
+ if ( wi->vtl ) {
+ vik_layer_post_read ( VIK_LAYER(wi->vtl), wi->w->vvp, TRUE );
+ // View this data if desired - must be done after post read (so that the bounds are known)
+ if ( wi->w->source_interface->autoview ) {
+ vik_trw_layer_auto_set_view ( wi->vtl, vik_layers_panel_get_viewport(wi->w->vlp) );
+ }
+ vik_layers_panel_emit_update ( wi->w->vlp );
+ }
+ } else {
+ /* cancelled */
+ if ( wi->creating_new_layer )
+ g_object_unref(wi->vtl);
+ }
+}