X-Git-Url: http://pileus.org/git/?p=grits;a=blobdiff_plain;f=src%2Fplugin-radar.c;h=1d4706e5f070b32e925a1ea029eaa78859761d75;hp=7f4efa39950440725638d13b184b0b5d89a9837f;hb=5e979044ddae3f2e9d31f480dd103bfb0fa7103b;hpb=2aab8c43b0862052f7e0abca6e4f56600748a2bc diff --git a/src/plugin-radar.c b/src/plugin-radar.c index 7f4efa3..1d4706e 100644 --- a/src/plugin-radar.c +++ b/src/plugin-radar.c @@ -29,25 +29,47 @@ /**************** * GObject code * ****************/ +/* Plugin init */ static void aweather_radar_plugin_init(AWeatherPluginInterface *iface); static void _aweather_radar_expose(AWeatherPlugin *_radar); G_DEFINE_TYPE_WITH_CODE(AWeatherRadar, aweather_radar, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE(AWEATHER_TYPE_PLUGIN, aweather_radar_plugin_init)); -static void aweather_radar_class_init(AWeatherRadarClass *klass) -{ - GObjectClass *object_class = (GObjectClass*)klass; -} static void aweather_radar_plugin_init(AWeatherPluginInterface *iface) { + g_debug("AWeatherRadar: plugin_init"); /* Add methods to the interface */ iface->expose = _aweather_radar_expose; } +/* Class/Object init */ static void aweather_radar_init(AWeatherRadar *radar) { + g_debug("AWeatherRadar: class_init"); /* Set defaults */ radar->gui = NULL; } +static void aweather_radar_dispose(GObject *gobject) +{ + g_debug("AWeatherRadar: dispose"); + AWeatherRadar *self = AWEATHER_RADAR(gobject); + /* Drop references */ + G_OBJECT_CLASS(aweather_radar_parent_class)->dispose(gobject); +} +static void aweather_radar_finalize(GObject *gobject) +{ + g_debug("AWeatherRadar: finalize"); + AWeatherRadar *self = AWEATHER_RADAR(gobject); + /* Free data */ + G_OBJECT_CLASS(aweather_radar_parent_class)->finalize(gobject); + +} +static void aweather_radar_class_init(AWeatherRadarClass *klass) +{ + g_debug("AWeatherRadar: class_init"); + GObjectClass *gobject_class = (GObjectClass*)klass; + gobject_class->dispose = aweather_radar_dispose; + gobject_class->finalize = aweather_radar_finalize; +} /************************** * Data loading functions * @@ -197,12 +219,8 @@ static void load_radar(AWeatherRadar *self, gchar *radar_file) char *dir = g_path_get_dirname(radar_file); char *site = g_path_get_basename(dir); g_free(dir); - RSL_read_these_sweeps("all", NULL); - if (self->cur_radar) { - g_debug("AWeatherRadar: load_radar - Freeing old radar"); - RSL_free_radar(self->cur_radar); - } g_debug("AWeatherRadar: load_radar - Loading new radar"); + RSL_read_these_sweeps("all", NULL); Radar *radar = self->cur_radar = RSL_wsr88d_to_radar(radar_file, site); if (radar == NULL) { g_warning("fail to load radar: path=%s, site=%s", radar_file, site); @@ -279,14 +297,15 @@ typedef struct { gchar *radar_file; } decompressed_t; -static void decompressed_cb(GPid pid, gint status, gpointer _self) +static void decompressed_cb(GPid pid, gint status, gpointer _udata) { - decompressed_t *udata = _self; + decompressed_t *udata = _udata; if (status != 0) { g_warning("wsr88ddec exited with status %d", status); return; } load_radar(udata->self, udata->radar_file); + g_spawn_close_pid(pid); g_free(udata->radar_file); g_free(udata); } @@ -352,8 +371,10 @@ static void on_time_changed(AWeatherView *view, char *time, gpointer _self) gtk_container_add(GTK_CONTAINER(self->config_body), gtk_label_new("Loading radar...")); gtk_widget_show_all(self->config_body); + if (self->cur_radar) + RSL_free_radar(self->cur_radar); self->cur_radar = NULL; - self->cur_sweep = NULL; // Clear radar + self->cur_sweep = NULL; aweather_gui_gl_redraw(self->gui); /* Start loading the new radar */ @@ -372,7 +393,7 @@ static void on_site_changed(AWeatherView *view, char *site, gpointer _self) g_free(time); } -static void on_refresh(AWeatherView *view, gpointer user_data, gpointer _self) +static void on_refresh(AWeatherView *view, gpointer _self) { AWeatherRadar *self = AWEATHER_RADAR(_self); char *site = aweather_view_get_site(view);