]> git.street.me.uk Git - andy/viking.git/blobdiff - src/bingmapsource.c
Merge pull request #32 from davidedelvento/installnotes
[andy/viking.git] / src / bingmapsource.c
index 917d5302586e4290d0f4dbb43f3ea6af9d4e6d91..0c9fd99587ea46545bb3a2dd9faf4696057afc62 100644 (file)
@@ -357,25 +357,29 @@ btext (GMarkupParseContext *context,
        int len = g_slist_length ((GSList *)stack);
 
        const gchar *parent = len > 1 ? g_slist_nth_data ((GSList *)stack, 1) : NULL;
-       
        if (strcmp (element, "Attribution") == 0) {
                g_free (priv->attribution);
                priv->attribution = g_strdup (textl);
-       } else if (parent != NULL && strcmp (parent, "CoverageArea") == 0) {
-               if (strcmp (element, "ZoomMin") == 0) {
-                       attribution->minZoom = atoi (textl);
-               } else if (strcmp (element, "ZoomMax") == 0) {
-                       attribution->maxZoom = atoi (textl);
-               }
-       } else if (parent != NULL && strcmp (parent, "BoundingBox") == 0) {
-               if (strcmp (element, "SouthLatitude") == 0) {
-                       attribution->bounds.south = g_ascii_strtod (textl, NULL);
-               } else if (strcmp (element, "WestLongitude") == 0) {
-                       attribution->bounds.west = g_ascii_strtod (textl, NULL);
-               } else if (strcmp (element, "NorthLatitude") == 0) {
-                       attribution->bounds.north = g_ascii_strtod (textl, NULL);
-               } else if (strcmp (element, "EastLongitude") == 0) {
-                       attribution->bounds.east = g_ascii_strtod (textl, NULL);
+       }
+       else {
+               if ( attribution ) {
+                       if (parent != NULL && strcmp (parent, "CoverageArea") == 0) {
+                               if (strcmp (element, "ZoomMin") == 0) {
+                                       attribution->minZoom = atoi (textl);
+                               } else if (strcmp (element, "ZoomMax") == 0) {
+                                       attribution->maxZoom = atoi (textl);
+                               }
+                       } else if (parent != NULL && strcmp (parent, "BoundingBox") == 0) {
+                               if (strcmp (element, "SouthLatitude") == 0) {
+                                       attribution->bounds.south = g_ascii_strtod (textl, NULL);
+                               } else if (strcmp (element, "WestLongitude") == 0) {
+                                       attribution->bounds.west = g_ascii_strtod (textl, NULL);
+                               } else if (strcmp (element, "NorthLatitude") == 0) {
+                                       attribution->bounds.north = g_ascii_strtod (textl, NULL);
+                               } else if (strcmp (element, "EastLongitude") == 0) {
+                                       attribution->bounds.east = g_ascii_strtod (textl, NULL);
+                               }
+                       }
                }
        }
        g_free(textl);
@@ -460,30 +464,30 @@ _load_attributions ( BingMapSource *self )
        gchar *uri = g_strdup_printf(URL_ATTR_FMT, priv->api_key);
 
        gchar *tmpname = a_download_uri_to_tmp_file ( uri, vik_map_source_default_get_download_options(VIK_MAP_SOURCE_DEFAULT(self)) );
+       if ( !tmpname ) {
+               ret = -1;
+               goto done;
+       }
 
        g_debug("%s: %s", __FUNCTION__, tmpname);
        if (!_parse_file_for_attributions(self, tmpname)) {
                ret = -1;
-               goto done;
        }
 
+       (void)g_remove(tmpname);
+       g_free(tmpname);
 done:
        priv->loading_attributions = FALSE;
        g_free(uri);
-       g_remove(tmpname);
-       g_free(tmpname);
        return ret;
 }
 
-static int
+static gboolean
 _emit_update ( gpointer data )
 {
-       gdk_threads_enter();
-       /* TODO
-       vik_layers_panel_emit_update ( VIK_LAYERS_PANEL (data) );
-       */
-       gdk_threads_leave();
-       return 0;
+       //if ( data )
+       //      vik_layers_panel_emit_update ( VIK_LAYERS_PANEL (data) );
+       return FALSE;
 }
 
 static int
@@ -495,10 +499,9 @@ _load_attributions_thread ( BingMapSource *self, gpointer threaddata )
                return -1; /* Abort thread */
 
        /* Emit update */
-       /* As we are on a download thread,
-        * it's better to fire the update from the main loop.
-        */
-       g_idle_add ( (GSourceFunc)_emit_update, NULL /* FIXME */ );
+       // As we are on a download thread, must the update GUI from the main loop
+       // TODO: have reference to the window/viewport/layerspanel to update...
+       (void)gdk_threads_add_idle ( _emit_update, NULL );
 
        return 0;
 }