#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
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);
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");
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) {
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) {
county->width = 2;
}
grits_object_queue_draw(GRITS_OBJECT(county));
+ return FALSE;
}
/* Update polygons */
GRITS_OBJECT(msg->storm_based)->hidden = !sshow || hide;
}
- gtk_widget_queue_draw(GTK_WIDGET(alert->viewer));
+ grits_viewer_queue_draw(alert->viewer);
return TRUE;
}
g_free(date_str);
gtk_widget_show_all(GTK_WIDGET(alert->config));
+ alert->update_source = 0;
return FALSE;
}
(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");
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");
}
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);
/* 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");
gchar *labels[] = {"<b>Warnings</b>", "<b>Watches</b>",
"<b>Advisories</b>", "<b>Other</b>"};
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);
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");
/* 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,
}
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);
}