X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/0ab355252e7f5431a1765140520acb79bcf7a5cb..d61ec067563735c651f81e6ad0f31be01a8c202b:/src/viklayer.c?ds=sidebyside diff --git a/src/viklayer.c b/src/viklayer.c index 880c7394..76d494dd 100644 --- a/src/viklayer.c +++ b/src/viklayer.c @@ -42,6 +42,9 @@ extern VikLayerInterface vik_coord_layer_interface; extern VikLayerInterface vik_georef_layer_interface; extern VikLayerInterface vik_gps_layer_interface; extern VikLayerInterface vik_dem_layer_interface; +#ifdef HAVE_LIBMAPNIK +extern VikLayerInterface vik_mapnik_layer_interface; +#endif enum { VL_UPDATE_SIGNAL, @@ -93,10 +96,15 @@ static gboolean idle_draw ( VikLayer *vl ) void vik_layer_emit_update ( VikLayer *vl ) { if ( vl->visible && vl->realized ) { + GThread *thread = vik_window_get_thread ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vl)) ); + if ( !thread ) + // Do nothing + return; + vik_window_set_redraw_trigger(vl); // Only ever draw when there is time to do so - if ( g_thread_self() != vik_window_get_thread (VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vl))) ) + if ( g_thread_self() != thread ) // Drawing requested from another (background) thread, so handle via the gdk thread method gdk_threads_add_idle ( (GSourceFunc) idle_draw, vl ); else @@ -131,6 +139,9 @@ static VikLayerInterface *vik_layer_interfaces[VIK_LAYER_NUM_TYPES] = { &vik_gps_layer_interface, &vik_maps_layer_interface, &vik_dem_layer_interface, +#ifdef HAVE_LIBMAPNIK + &vik_mapnik_layer_interface, +#endif }; VikLayerInterface *vik_layer_get_interface ( VikLayerTypeEnum type ) @@ -203,6 +214,13 @@ const gchar *vik_layer_get_name ( VikLayer *l ) return l->name; } +time_t vik_layer_get_timestamp ( VikLayer *vl ) +{ + if ( vik_layer_interfaces[vl->type]->get_timestamp ) + return vik_layer_interfaces[vl->type]->get_timestamp ( vl ); + return 0; +} + VikLayer *vik_layer_create ( VikLayerTypeEnum type, VikViewport *vp, gboolean interactive ) { VikLayer *new_layer = NULL;