]> Pileus Git - aweather/blobdiff - src/plugins/radar.c
Improve shutdown code
[aweather] / src / plugins / radar.c
index b53bfe41a7beee20cacada69b9e6040e847d3448..94b18c6cbc613e602ba9d0f75af196b67f5f9733 100644 (file)
@@ -283,12 +283,11 @@ void _site_on_location_changed(GritsViewer *viewer,
                radar_site_unload(site);
 }
 
-gboolean _site_add_marker(gpointer _site)
+gboolean _site_add_marker(RadarSite *site)
 {
-       RadarSite *site = _site;
        site->marker = grits_marker_new(site->city->name);
        GRITS_OBJECT(site->marker)->center = site->city->pos;
-       GRITS_OBJECT(site->marker)->lod    = EARTH_R*2*site->city->lod;
+       GRITS_OBJECT(site->marker)->lod    = EARTH_R*0.75*site->city->lod;
        grits_viewer_add(site->viewer, GRITS_OBJECT(site->marker),
                        GRITS_LEVEL_OVERLAY, FALSE);
        return FALSE;
@@ -313,7 +312,7 @@ RadarSite *radar_site_new(city_t *city, GtkWidget *pconfig,
        _site_on_location_changed(viewer, lat, lon, elev, site);
 
        /* Add marker */
-       g_idle_add_full(G_PRIORITY_LOW, _site_add_marker, site, NULL);
+       _site_add_marker(site);
 
        /* Connect signals */
        site->location_id  = g_signal_connect(viewer, "location-changed",
@@ -778,9 +777,13 @@ static void grits_plugin_radar_dispose(GObject *gobject)
 {
        g_debug("GritsPluginRadar: dispose");
        GritsPluginRadar *self = GRITS_PLUGIN_RADAR(gobject);
-       g_signal_handler_disconnect(self->config, self->tab_id);
-       grits_viewer_remove(self->viewer, GRITS_OBJECT(self->hud));
-       radar_conus_free(self->conus);
+       if (self->viewer) {
+               GritsViewer *viewer = self->viewer;
+               self->viewer = NULL;
+               g_signal_handler_disconnect(self->config, self->tab_id);
+               grits_viewer_remove(viewer, GRITS_OBJECT(self->hud));
+               radar_conus_free(self->conus);
+       }
        /* Drop references */
        G_OBJECT_CLASS(grits_plugin_radar_parent_class)->dispose(gobject);
 }