summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
fee3a49)
Also switch to using the builtin grits references for removing objects.
+void aweather_level2_hide(GritsObject *_self, gboolean hidden)
+{
+ AWeatherLevel2 *self = AWEATHER_LEVEL2(_self);
+ if (self->volume)
+ grits_object_hide(GRITS_OBJECT(self->volume), hidden);
+}
+
level2->volume->color[2] = data[2];
level2->volume->color[3] = data[3];
grits_volume_set_level(level2->volume, level);
level2->volume->color[2] = data[2];
level2->volume->color[3] = data[3];
grits_volume_set_level(level2->volume, level);
- GRITS_OBJECT(level2->volume)->hidden = FALSE;
+ grits_object_hide(GRITS_OBJECT(level2->volume), FALSE);
- GRITS_OBJECT(level2->volume)->hidden = TRUE;
+ grits_object_hide(GRITS_OBJECT(level2->volume), TRUE);
static void aweather_level2_init(AWeatherLevel2 *self)
{
}
static void aweather_level2_init(AWeatherLevel2 *self)
{
}
+static void aweather_level2_dispose(GObject *_self)
+{
+ AWeatherLevel2 *self = AWEATHER_LEVEL2(_self);
+ g_debug("AWeatherLevel2: dispose - %p", _self);
+ if (self->volume) {
+ grits_viewer_remove(GRITS_OBJECT(self)->viewer, self->volume);
+ self->volume = NULL;
+ }
+ G_OBJECT_CLASS(aweather_level2_parent_class)->dispose(_self);
+}
static void aweather_level2_finalize(GObject *_self)
{
AWeatherLevel2 *self = AWEATHER_LEVEL2(_self);
static void aweather_level2_finalize(GObject *_self)
{
AWeatherLevel2 *self = AWEATHER_LEVEL2(_self);
}
static void aweather_level2_class_init(AWeatherLevel2Class *klass)
{
}
static void aweather_level2_class_init(AWeatherLevel2Class *klass)
{
+ G_OBJECT_CLASS(klass)->dispose = aweather_level2_dispose;
G_OBJECT_CLASS(klass)->finalize = aweather_level2_finalize;
G_OBJECT_CLASS(klass)->finalize = aweather_level2_finalize;
- GRITS_OBJECT_CLASS(klass)->draw = aweather_level2_draw;
+ GRITS_OBJECT_CLASS(klass)->draw = aweather_level2_draw;
+ GRITS_OBJECT_CLASS(klass)->hide = aweather_level2_hide;
/* Information */
city_t *city;
GritsMarker *marker; // Map marker for grits
/* Information */
city_t *city;
GritsMarker *marker; // Map marker for grits
- gpointer *marker_ref; // Reference to maker
/* Stuff from the parents */
GritsViewer *viewer;
/* Stuff from the parents */
GritsViewer *viewer;
RadarSiteStatus status; // Loading status for the site
GtkWidget *config;
AWeatherLevel2 *level2; // The Level2 structure for the current volume
RadarSiteStatus status; // Loading status for the site
GtkWidget *config;
AWeatherLevel2 *level2; // The Level2 structure for the current volume
- gpointer level2_ref; // GritsViewer reference to the added radar
/* Internal data */
time_t time; // Current timestamp of the level2
/* Internal data */
time_t time; // Current timestamp of the level2
site->message = "Load failed";
goto out;
}
site->message = "Load failed";
goto out;
}
- GRITS_OBJECT(site->level2)->hidden = site->hidden;
- site->level2_ref = grits_viewer_add(site->viewer,
- GRITS_OBJECT(site->level2), GRITS_LEVEL_WORLD, TRUE);
+ grits_object_hide(GRITS_OBJECT(site->level2), site->hidden);
+ grits_viewer_add(site->viewer, GRITS_OBJECT(site->level2),
+ GRITS_LEVEL_WORLD, TRUE);
out:
g_idle_add(_site_update_end, site);
out:
g_idle_add(_site_update_end, site);
/* Remove old volume */
g_debug("RadarSite: update - remove - %s", site->city->code);
/* Remove old volume */
g_debug("RadarSite: update - remove - %s", site->city->code);
- if (site->level2_ref) {
- site->level2 = NULL;
- grits_viewer_remove(site->viewer, site->level2_ref);
- site->level2_ref = NULL;
+ if (site->level2) {
+ grits_viewer_remove(site->viewer, site->level2);
+ site->level2 = NULL;
}
/* Fork loading right away so updating the
}
/* Fork loading right away so updating the
gtk_widget_destroy(site->config);
/* Remove radar */
gtk_widget_destroy(site->config);
/* Remove radar */
- if (site->level2_ref) {
- site->level2 = NULL;
- grits_viewer_remove(site->viewer, site->level2_ref);
- site->level2_ref = NULL;
+ if (site->level2) {
+ grits_viewer_remove(site->viewer, site->level2);
+ site->level2 = NULL;
}
site->status = STATUS_UNLOADED;
}
site->status = STATUS_UNLOADED;
site->marker = grits_marker_new(site->city->name);
GRITS_OBJECT(site->marker)->center = site->city->pos;
GRITS_OBJECT(site->marker)->lod = EARTH_R*site->city->lod;
site->marker = grits_marker_new(site->city->name);
GRITS_OBJECT(site->marker)->center = site->city->pos;
GRITS_OBJECT(site->marker)->lod = EARTH_R*site->city->lod;
- site->marker_ref = grits_viewer_add(site->viewer,
- GRITS_OBJECT(site->marker), GRITS_LEVEL_OVERLAY, FALSE);
+ grits_viewer_add(site->viewer, GRITS_OBJECT(site->marker),
+ GRITS_LEVEL_OVERLAY, FALSE);
return FALSE;
}
RadarSite *radar_site_new(city_t *city, GtkWidget *pconfig,
return FALSE;
}
RadarSite *radar_site_new(city_t *city, GtkWidget *pconfig,
void radar_site_free(RadarSite *site)
{
radar_site_unload(site);
void radar_site_free(RadarSite *site)
{
radar_site_unload(site);
- grits_viewer_remove(site->viewer, site->marker_ref);
+ grits_viewer_remove(site->viewer, site->marker);
if (site->location_id)
g_signal_handler_disconnect(site->viewer, site->location_id);
grits_http_free(site->http);
if (site->location_id)
g_signal_handler_disconnect(site->viewer, site->location_id);
grits_http_free(site->http);
gchar *path;
GritsTile *tile[2];
gchar *path;
GritsTile *tile[2];
guint time_id; // "time-changed" callback ID
guint refresh_id; // "refresh" callback ID
guint time_id; // "time-changed" callback ID
guint refresh_id; // "refresh" callback ID
conus->tile[1] = grits_tile_new(NULL, CONUS_NORTH, south, east, mid);
conus->tile[0]->zindex = 2;
conus->tile[1]->zindex = 1;
conus->tile[1] = grits_tile_new(NULL, CONUS_NORTH, south, east, mid);
conus->tile[0]->zindex = 2;
conus->tile[1]->zindex = 1;
- conus->tile_ref[0] = grits_viewer_add(viewer,
- GRITS_OBJECT(conus->tile[0]), GRITS_LEVEL_WORLD, TRUE);
- conus->tile_ref[1] = grits_viewer_add(viewer,
- GRITS_OBJECT(conus->tile[1]), GRITS_LEVEL_WORLD, TRUE);
+ grits_viewer_add(viewer, GRITS_OBJECT(conus->tile[0]), GRITS_LEVEL_WORLD, TRUE);
+ grits_viewer_add(viewer, GRITS_OBJECT(conus->tile[1]), GRITS_LEVEL_WORLD, TRUE);
conus->time_id = g_signal_connect_swapped(viewer, "time-changed",
G_CALLBACK(_conus_update), conus);
conus->time_id = g_signal_connect_swapped(viewer, "time-changed",
G_CALLBACK(_conus_update), conus);
for (int i = 0; i < 2; i++) {
GritsTile *tile = conus->tile[i];
for (int i = 0; i < 2; i++) {
GritsTile *tile = conus->tile[i];
- gpointer ref = conus->tile_ref[i];
if (tile->data) {
glDeleteTextures(1, tile->data);
g_free(tile->data);
}
if (tile->data) {
glDeleteTextures(1, tile->data);
g_free(tile->data);
}
- grits_viewer_remove(conus->viewer, ref);
+ grits_viewer_remove(conus->viewer, tile);
}
g_object_unref(conus->viewer);
}
g_object_unref(conus->viewer);
- GRITS_OBJECT(conus->tile[0])->hidden = is_hidden;
- GRITS_OBJECT(conus->tile[1])->hidden = is_hidden;
+ grits_object_hide(GRITS_OBJECT(conus->tile[0]), is_hidden);
+ grits_object_hide(GRITS_OBJECT(conus->tile[1]), is_hidden);
} else if (site) {
site->hidden = is_hidden;
if (site->level2)
} else if (site) {
site->hidden = is_hidden;
if (site->level2)
- GRITS_OBJECT(site->level2)->hidden = is_hidden;
+ grits_object_hide(GRITS_OBJECT(site->level2), is_hidden);
} else {
g_warning("GritsPluginRadar: _update_hidden - no site or counus found");
}
} else {
g_warning("GritsPluginRadar: _update_hidden - no site or counus found");
}
self->prefs = prefs;
/* Setup page switching */
self->prefs = prefs;
/* Setup page switching */
- g_signal_connect(self->config, "switch-page",
+ self->tab_id = g_signal_connect(self->config, "switch-page",
G_CALLBACK(_update_hidden), viewer);
/* Load HUD */
G_CALLBACK(_update_hidden), viewer);
/* Load HUD */
- GritsCallback *hud_cb = grits_callback_new(_draw_hud, self);
- self->hud_ref = grits_viewer_add(viewer, GRITS_OBJECT(hud_cb), GRITS_LEVEL_HUD, FALSE);
+ self->hud = grits_callback_new(_draw_hud, self);
+ grits_viewer_add(viewer, GRITS_OBJECT(self->hud), GRITS_LEVEL_HUD, FALSE);
/* Load Conus */
self->conus = radar_conus_new(self->config, self->viewer, self->conus_http);
/* Load Conus */
self->conus = radar_conus_new(self->config, self->viewer, self->conus_http);
}
/* Need to position on the top because of Win32 bug */
}
/* Need to position on the top because of Win32 bug */
- gtk_notebook_set_tab_pos(GTK_NOTEBOOK(self->config), GTK_POS_BOTTOM);
+ gtk_notebook_set_tab_pos(GTK_NOTEBOOK(self->config), GTK_POS_LEFT);
}
static void grits_plugin_radar_dispose(GObject *gobject)
{
g_debug("GritsPluginRadar: dispose");
GritsPluginRadar *self = GRITS_PLUGIN_RADAR(gobject);
}
static void grits_plugin_radar_dispose(GObject *gobject)
{
g_debug("GritsPluginRadar: dispose");
GritsPluginRadar *self = GRITS_PLUGIN_RADAR(gobject);
- grits_viewer_remove(self->viewer, self->hud_ref);
+ g_signal_handler_disconnect(self->config, self->tab_id);
+ grits_viewer_remove(self->viewer, self->hud);
radar_conus_free(self->conus);
/* Drop references */
G_OBJECT_CLASS(grits_plugin_radar_parent_class)->dispose(gobject);
radar_conus_free(self->conus);
/* Drop references */
G_OBJECT_CLASS(grits_plugin_radar_parent_class)->dispose(gobject);
GritsViewer *viewer;
GritsPrefs *prefs;
GtkWidget *config;
GritsViewer *viewer;
GritsPrefs *prefs;
GtkWidget *config;
AWeatherColormap *colormap;
AWeatherColormap *colormap;
GHashTable *sites;
GritsHttp *sites_http;
GHashTable *sites;
GritsHttp *sites_http;