diff options
Diffstat (limited to 'calendar')
-rw-r--r-- | calendar/ChangeLog | 6 | ||||
-rw-r--r-- | calendar/gui/alarm-notify/alarm-queue.c | 27 |
2 files changed, 22 insertions, 11 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 08c594c3e2..f06a8ca2c1 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,9 @@ +2006-06-12 Srinivasa Ragavan <sragavan@novell.com> + + * gui/alarm-notify/alarm-queue.c: (remove_queued_alarm), + (alarm_trigger_cb), (tray_list_remove_async): Fixed atleast + 6 crashes, that were in bnc. + 2006-06-08 Hiroyuki Ikezoe <poincare@ikezoe.net> ** Fixes bug #341961. diff --git a/calendar/gui/alarm-notify/alarm-queue.c b/calendar/gui/alarm-notify/alarm-queue.c index 25745d4fb0..c1d6f5af14 100644 --- a/calendar/gui/alarm-notify/alarm-queue.c +++ b/calendar/gui/alarm-notify/alarm-queue.c @@ -309,7 +309,7 @@ lookup_queued_alarm (CompQueuedAlarms *cqa, gpointer alarm_id) /* Removes an alarm from the list of alarms of a component. If the alarm was * the last one listed for the component, it removes the component itself. */ -static void +static gboolean remove_queued_alarm (CompQueuedAlarms *cqa, gpointer alarm_id, gboolean free_object, gboolean remove_alarm) { @@ -325,7 +325,7 @@ remove_queued_alarm (CompQueuedAlarms *cqa, gpointer alarm_id, } if (!l) - return; + return FALSE; cqa->queued_alarms = g_slist_delete_link (cqa->queued_alarms, l); @@ -343,7 +343,7 @@ remove_queued_alarm (CompQueuedAlarms *cqa, gpointer alarm_id, */ if (cqa->queued_alarms != NULL) - return; + return FALSE; d(printf("%s:%d (remove_queued_alarm)) - Last Component. Removing CQA- Free=%d\n",__FILE__, __LINE__, free_object)); if (free_object) { @@ -355,6 +355,8 @@ remove_queued_alarm (CompQueuedAlarms *cqa, gpointer alarm_id, e_cal_component_alarms_free (cqa->alarms); cqa->alarms = NULL; } + + return TRUE; } /* Callback used when an alarm triggers */ @@ -385,10 +387,8 @@ alarm_trigger_cb (gpointer alarm_id, time_t trigger, gpointer data) */ alarm = e_cal_component_get_alarm (comp, qa->instance->auid); - g_assert (alarm != NULL); - - /* Show it independent of what the notification is?*/ - display_notification (trigger, cqa, alarm_id, TRUE); + if (!alarm) + return; e_cal_component_alarm_get_action (alarm, &action); e_cal_component_alarm_free (alarm); @@ -402,6 +402,7 @@ alarm_trigger_cb (gpointer alarm_id, time_t trigger, gpointer data) #ifdef HAVE_LIBNOTIFY popup_notification (trigger, cqa, alarm_id, TRUE); #endif + display_notification (trigger, cqa, alarm_id, TRUE); break; case E_CAL_COMPONENT_ALARM_EMAIL: @@ -1119,11 +1120,15 @@ tray_list_remove_async(EThread *e, AlarmMsg *msg, void *data) if (!tray_data->snooze_set){ GList *temp = list->next; + gboolean status; + tray_icons_list = g_list_remove_link (tray_icons_list, list); - remove_queued_alarm (tray_data->cqa, tray_data->alarm_id, FALSE, TRUE); - g_hash_table_remove (tray_data->cqa->parent_client->uid_alarms_hash, tray_data->cqa->id); - e_cal_component_free_id (tray_data->cqa->id); - g_free (tray_data->cqa); + status = remove_queued_alarm (tray_data->cqa, tray_data->alarm_id, FALSE, TRUE); + if (status) { + g_hash_table_remove (tray_data->cqa->parent_client->uid_alarms_hash, tray_data->cqa->id); + e_cal_component_free_id (tray_data->cqa->id); + g_free (tray_data->cqa); + } free_tray_icon_data (tray_data); tray_data = NULL; g_list_free_1 (list); |