X-Git-Url: http://pileus.org/git/?p=aweather;a=blobdiff_plain;f=src%2Fplugins%2Falert.c;h=73cb56451cbab60f55242a6c5903d42b60ef7a8b;hp=e1d6c91a80409552d0653a03d899b3c42a961f46;hb=a625a6710df170206d38a9d1899496f4d3a2562f;hpb=62fd949a306332987eef7fc7e1c3d39045ed15fb diff --git a/src/plugins/alert.c b/src/plugins/alert.c index e1d6c91..73cb564 100644 --- a/src/plugins/alert.c +++ b/src/plugins/alert.c @@ -24,6 +24,8 @@ #include "alert.h" #include "alert-info.h" +#include "compat.h" + #define MSG_INDEX "http://alerts.weather.gov/cap/us.php?x=0" #define CONFIG_HEIGHT 3 @@ -397,7 +399,7 @@ gboolean fips_group_state(gpointer key, gpointer value, gpointer data) GList *counties = value; GList **states = data; GritsPoly *poly = fips_combine(counties); - GRITS_OBJECT(poly)->lod = EARTH_R/5; + GRITS_OBJECT(poly)->lod = EARTH_R/10; *states = g_list_prepend(*states, poly); g_list_free(counties); return FALSE; @@ -477,7 +479,7 @@ static GtkWidget *_make_msg_details(AlertMsg *msg) g_free(alert_str); GtkWidget *align = gtk_alignment_new(0, 0, 1, 1); - GtkWidget *box = gtk_vbox_new(FALSE, 10); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10); gtk_alignment_set_padding(GTK_ALIGNMENT(align), 10, 10, 10, 10); gtk_container_add(GTK_CONTAINER(align), box); gtk_box_pack_start(GTK_BOX(box), title, FALSE, FALSE, 0); @@ -497,7 +499,7 @@ static GtkWidget *_find_details(GtkNotebook *notebook, AlertMsg *msg) return NULL; } -static void _show_details(GritsPoly *county, GritsPluginAlert *alert) +static gboolean _show_details(GritsPoly *county, GdkEvent *_, GritsPluginAlert *alert) { /* Add details for this messages */ AlertMsg *msg = g_object_get_data(G_OBJECT(county), "msg"); @@ -520,10 +522,12 @@ static void _show_details(GritsPoly *county, GritsPluginAlert *alert) gtk_widget_show_all(dialog); gint num = gtk_notebook_page_num(GTK_NOTEBOOK(notebook), details); gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), num); + + return FALSE; } /* Update counties */ -static void _alert_leave(GritsPoly *county, GritsPluginAlert *alert) +static gboolean _alert_leave(GritsPoly *county, GdkEvent *_, GritsPluginAlert *alert) { g_debug("_alert_leave"); if (county->width == 3) { @@ -533,9 +537,10 @@ static void _alert_leave(GritsPoly *county, GritsPluginAlert *alert) county->width = 1; } grits_object_queue_draw(GRITS_OBJECT(county)); + return FALSE; } -static void _alert_enter(GritsPoly *county, GritsPluginAlert *alert) +static gboolean _alert_enter(GritsPoly *county, GdkEvent *_, GritsPluginAlert *alert) { g_debug("_alert_enter"); if (county->width == 3) { @@ -545,6 +550,7 @@ static void _alert_enter(GritsPoly *county, GritsPluginAlert *alert) county->width = 2; } grits_object_queue_draw(GRITS_OBJECT(county)); + return FALSE; } /* Update polygons */ @@ -637,7 +643,7 @@ static gboolean _show_hide(GtkToggleButton *button, GritsPluginAlert *alert) GRITS_OBJECT(msg->storm_based)->hidden = !sshow || hide; } - gtk_widget_queue_draw(GTK_WIDGET(alert->viewer)); + grits_viewer_queue_draw(alert->viewer); return TRUE; } @@ -722,6 +728,7 @@ static gboolean _update_buttons(GritsPluginAlert *alert) g_free(date_str); gtk_widget_show_all(GTK_WIDGET(alert->config)); + alert->update_source = 0; return FALSE; } @@ -732,13 +739,6 @@ static gint _sort_warnings(gconstpointer _a, gconstpointer _b) (a->info->prior == b->info->prior) ? 0 : 1; } -static gboolean _update_end(gpointer _alert) -{ - GritsPluginAlert *alert = _alert; - gtk_widget_queue_draw(GTK_WIDGET(alert->viewer)); - return FALSE; -} - static void _update_warnings(GritsPluginAlert *alert, GList *old) { g_debug("GritsPluginAlert: _update_warnings"); @@ -763,12 +763,12 @@ static void _update_warnings(GritsPluginAlert *alert, GList *old) AlertMsg *msg = cur->data; msg->county_based = _load_county_based(alert, msg); } - g_idle_add(_update_end, alert); + grits_viewer_queue_draw(alert->viewer); for (GList *cur = alert->msgs; cur; cur = cur->next) { AlertMsg *msg = cur->data; msg->storm_based = _load_storm_based(alert, msg); } - g_idle_add(_update_end, alert); + grits_viewer_queue_draw(alert->viewer); g_debug("GritsPluginAlert: _load_warnings - end"); } @@ -785,7 +785,8 @@ static void _update(gpointer _, gpointer _alert) if (!(alert->msgs = msg_load_index(alert->http, when, &alert->updated, offline))) return; - g_idle_add((GSourceFunc)_update_buttons, alert); + if (!alert->update_source) + alert->update_source = g_idle_add((GSourceFunc)_update_buttons, alert); _update_warnings(alert, old); g_list_foreach(old, (GFunc)msg_free, NULL); @@ -802,10 +803,10 @@ static void _on_update(GritsPluginAlert *alert) /* Init helpers */ static GtkWidget *_make_config(GritsPluginAlert *alert) { - GtkWidget *config = gtk_vbox_new(FALSE, 0); + GtkWidget *config = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); /* Setup tools area */ - GtkWidget *tools = gtk_hbox_new(FALSE, 10); + GtkWidget *tools = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); GtkWidget *updated = gtk_label_new(" Loading..."); GtkWidget *storm_based = gtk_toggle_button_new_with_label("Storm based"); GtkWidget *county_based = gtk_toggle_button_new_with_label("County based"); @@ -824,7 +825,7 @@ static GtkWidget *_make_config(GritsPluginAlert *alert) gchar *labels[] = {"Warnings", "Watches", "Advisories", "Other"}; gchar *keys[] = {"warning", "watch", "advisory", "other"}; - GtkWidget *alerts = gtk_hbox_new(FALSE, 10); + GtkWidget *alerts = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); for (int i = 0; i < G_N_ELEMENTS(labels); i++) { GtkWidget *frame = gtk_frame_new(labels[i]); GtkWidget *table = gtk_table_new(1, 1, TRUE); @@ -853,7 +854,7 @@ static gboolean _clear_details(GtkWidget *dialog) return TRUE; } -static gboolean _set_details_uri(GtkWidget *notebook, GtkNotebookPage *_, +static gboolean _set_details_uri(GtkWidget *notebook, gpointer _, guint num, GtkWidget *button) { g_debug("_set_details_uri"); @@ -958,14 +959,13 @@ static void grits_plugin_alert_dispose(GObject *gobject) /* Drop references */ if (alert->viewer) { GritsViewer *viewer = alert->viewer; - alert->viewer = NULL; g_signal_handler_disconnect(viewer, alert->refresh_id); g_signal_handler_disconnect(viewer, alert->time_changed_id); soup_session_abort(alert->http->soup); g_thread_pool_free(alert->threads, TRUE, TRUE); - gtk_widget_destroy(alert->details); - while (gtk_events_pending()) - gtk_main_iteration(); + if (alert->update_source) + g_source_remove(alert->update_source); + alert->viewer = NULL; for (GList *cur = alert->msgs; cur; cur = cur->next) { AlertMsg *msg = cur->data; if (msg->county_based) grits_viewer_remove(viewer, @@ -975,6 +975,7 @@ static void grits_plugin_alert_dispose(GObject *gobject) } for (GList *cur = alert->states; cur; cur = cur->next) grits_viewer_remove(viewer, cur->data); + gtk_widget_destroy(alert->details); g_object_unref(alert->prefs); g_object_unref(viewer); }