aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog6
-rw-r--r--calendar/gui/alarm-notify/alarm-queue.c27
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);