From 03b231a20b0e2e1bdfc422ff713127b34e4cce19 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Wed, 27 Jun 2001 00:12:28 +0000 Subject: Renamed the occur field to occur_start; added an occur_end field. This way 2001-06-26 Federico Mena Quintero * idl/evolution-calendar.idl (CalAlarmInstance): Renamed the occur field to occur_start; added an occur_end field. This way we can present the complete times for the occurrence from the server. * cal-util/cal-component.h (CalAlarmInstance): Likewise. * pcs/cal-backend-file.c (add_alarm_occurrences_cb): Fill the new fields appropriately. (generate_absolute_triggers): Likewise; we use -1 in case the component has no DTSTART or DTEND because there are no meaningful occurrence dates here. (fill_alarm_instances_seq): Fill in the new fields. * cal-client/cal-client.c (build_alarm_instance_list): Likewise. * gui/alarm-notify/alarm-notify-dialog.c (alarm_notify_dialog): Take in both the occur_start and occur_end times. * gui/goto.c (goto_dialog): Free the dlg structure on the bail-out cases. * gui/dialogs/event-page.c (get_widgets): Do not assert if we cannot find the main widget; just return FALSE. * gui/dialogs/alarm-page.c (get_widgets): Likewise. * gui/dialogs/task-page.c (get_widgets): Likewise. * gui/dialogs/task-details-page.c (get_widgets): Likewise. * gui/dialogs/meeting-page.c (get_widgets): Likewise. svn path=/trunk/; revision=10517 --- calendar/gui/alarm-notify/alarm-notify-dialog.c | 112 ++++++++++++++++++++++-- calendar/gui/alarm-notify/alarm-notify-dialog.h | 3 +- calendar/gui/alarm-notify/alarm-queue.c | 14 +-- calendar/gui/dialogs/alarm-page.c | 4 +- calendar/gui/dialogs/event-page.c | 4 +- calendar/gui/dialogs/meeting-page.c | 4 +- calendar/gui/dialogs/recurrence-page.c | 4 +- calendar/gui/dialogs/task-details-page.c | 4 +- calendar/gui/dialogs/task-page.c | 4 +- calendar/gui/goto.c | 2 + 10 files changed, 128 insertions(+), 27 deletions(-) (limited to 'calendar/gui') diff --git a/calendar/gui/alarm-notify/alarm-notify-dialog.c b/calendar/gui/alarm-notify/alarm-notify-dialog.c index 99b244613a..219bf7b102 100644 --- a/calendar/gui/alarm-notify/alarm-notify-dialog.c +++ b/calendar/gui/alarm-notify/alarm-notify-dialog.c @@ -120,10 +120,106 @@ edit_clicked_cb (GtkWidget *widget, gpointer data) gtk_widget_destroy (an->dialog); } +/* Creates a heading for the alarm notification dialog */ +static char * +make_heading (CalComponent *comp, time_t occur_start, time_t occur_end) +{ + CalComponentVType vtype; + char *buf; + char s[128], e[128]; + + vtype = cal_component_get_vtype (comp); + + if (occur_start != -1) { + struct tm tm; + + tm = *localtime (&occur_start); + strftime (s, sizeof (s), "%A %b %d %Y %H:%M", &tm); + } + + if (occur_end != -1) { + struct tm tm; + + tm = *localtime (&occur_end); + strftime (e, sizeof (e), "%A %b %d %Y %H:%M", &tm); + } + + /* I love combinatorial explosion */ + + switch (vtype) { + case CAL_COMPONENT_EVENT: + if (occur_start != -1) { + if (occur_end != -1) + buf = g_strdup_printf (_("Notification about your appointment " + "starting on %s and ending on %s"), + s, e); + else + buf = g_strdup_printf (_("Notification about your appointment " + "starting on %s"), + s); + } else { + if (occur_end != -1) + buf = g_strdup_printf (_("Notification about your appointment " + "ending on %s"), + e); + else + buf = g_strdup_printf (_("Notification about your appointment")); + } + break; + + case CAL_COMPONENT_TODO: + if (occur_start != -1) { + if (occur_end != -1) + buf = g_strdup_printf (_("Notification about your task " + "starting on %s and ending on %s"), + s, e); + else + buf = g_strdup_printf (_("Notification about your task " + "starting on %s"), + s); + } else { + if (occur_end != -1) + buf = g_strdup_printf (_("Notification about your task " + "ending on %s"), + e); + else + buf = g_strdup_printf (_("Notification about your task")); + } + break; + + case CAL_COMPONENT_JOURNAL: + if (occur_start != -1) { + if (occur_end != -1) + buf = g_strdup_printf (_("Notification about your journal entry " + "starting on %s and ending on %s"), + s, e); + else + buf = g_strdup_printf (_("Notification about your journal entry " + "starting on %s"), + s); + } else { + if (occur_end != -1) + buf = g_strdup_printf (_("Notification about your journal entry " + "ending on %s"), + e); + else + buf = g_strdup_printf (_("Notification about your journal entry")); + } + break; + + default: + g_assert_not_reached(); + return NULL; + } + + return buf; +} + /** * alarm_notify_dialog: * @trigger: Trigger time for the alarm. - * @occur: Occurrence time for the event. + * @occur_start: Start of occurrence time for the event. + * @occur_end: End of occurrence time for the event. * @comp: Calendar component object which corresponds to the alarm. * @func: Function to be called when a dialog action is invoked. * @func_data: Closure data for @func. @@ -134,17 +230,17 @@ edit_clicked_cb (GtkWidget *widget, gpointer data) * Return value: TRUE on success, FALSE if the dialog could not be created. **/ gboolean -alarm_notify_dialog (time_t trigger, time_t occur, CalComponent *comp, +alarm_notify_dialog (time_t trigger, time_t occur_start, time_t occur_end, + CalComponent *comp, AlarmNotifyFunc func, gpointer func_data) { AlarmNotify *an; char buf[256]; + char *heading; struct tm tm_trigger; - struct tm tm_occur; CalComponentText summary; g_return_val_if_fail (trigger != -1, FALSE); - g_return_val_if_fail (occur != -1, FALSE); g_return_val_if_fail (comp != NULL, FALSE); g_return_val_if_fail (IS_CAL_COMPONENT (comp), FALSE); g_return_val_if_fail (func != NULL, FALSE); @@ -191,11 +287,9 @@ alarm_notify_dialog (time_t trigger, time_t occur, CalComponent *comp, /* Heading */ - tm_occur = *localtime (&occur); - strftime (buf, sizeof (buf), - _("Notification about your appointment on %A %b %d %Y %H:%M"), - &tm_occur); - gtk_label_set_text (GTK_LABEL (an->heading), buf); + heading = make_heading (comp, occur_start, occur_end); + gtk_label_set_text (GTK_LABEL (an->heading), heading); + g_free (heading); /* Summary */ diff --git a/calendar/gui/alarm-notify/alarm-notify-dialog.h b/calendar/gui/alarm-notify/alarm-notify-dialog.h index 1b37a097aa..6399261819 100644 --- a/calendar/gui/alarm-notify/alarm-notify-dialog.h +++ b/calendar/gui/alarm-notify/alarm-notify-dialog.h @@ -36,7 +36,8 @@ typedef enum { typedef void (* AlarmNotifyFunc) (AlarmNotifyResult result, int snooze_mins, gpointer data); -gboolean alarm_notify_dialog (time_t trigger, time_t occur, CalComponent *comp, +gboolean alarm_notify_dialog (time_t trigger, time_t occur_start, time_t occur_end, + CalComponent *comp, AlarmNotifyFunc func, gpointer func_data); diff --git a/calendar/gui/alarm-notify/alarm-queue.c b/calendar/gui/alarm-notify/alarm-queue.c index 2072e03c84..c0e66ff484 100644 --- a/calendar/gui/alarm-notify/alarm-queue.c +++ b/calendar/gui/alarm-notify/alarm-queue.c @@ -163,8 +163,6 @@ alarm_trigger_cb (gpointer alarm_id, time_t trigger, gpointer data) CalComponent *comp; GSList *l; QueuedAlarm *qa; - const char *auid; - time_t occur; cqa = data; comp = cqa->alarms->comp; @@ -181,15 +179,9 @@ alarm_trigger_cb (gpointer alarm_id, time_t trigger, gpointer data) g_assert (qa != NULL); - /* Fetch the alarm information. We use the trigger time passed to us - * instead of the one in the instance structure because this may not be - * the actual computed trigger but a snoozed one instead. - */ - - auid = qa->instance->auid; - occur = qa->instance->occur; - - if (!alarm_notify_dialog (trigger, occur, comp, notify_dialog_cb, comp)) + if (!alarm_notify_dialog (trigger, + qa->instance->occur_start, qa->instance->occur_end, + comp, notify_dialog_cb, comp)) g_message ("alarm_trigger_cb(): Could not create the alarm notify dialog"); } diff --git a/calendar/gui/dialogs/alarm-page.c b/calendar/gui/dialogs/alarm-page.c index 74e728ad4c..9a92b5c9a2 100644 --- a/calendar/gui/dialogs/alarm-page.c +++ b/calendar/gui/dialogs/alarm-page.c @@ -562,7 +562,9 @@ get_widgets (AlarmPage *apage) #define GW(name) glade_xml_get_widget (priv->xml, name) priv->main = GW ("alarm-page"); - g_assert (priv->main); + if (!priv->main) + return FALSE; + gtk_widget_ref (priv->main); gtk_widget_unparent (priv->main); diff --git a/calendar/gui/dialogs/event-page.c b/calendar/gui/dialogs/event-page.c index 93d9b65e14..5646a31a76 100644 --- a/calendar/gui/dialogs/event-page.c +++ b/calendar/gui/dialogs/event-page.c @@ -534,7 +534,9 @@ get_widgets (EventPage *epage) #define GW(name) glade_xml_get_widget (priv->xml, name) priv->main = GW ("event-page"); - g_assert (priv->main); + if (!priv->main) + return FALSE; + gtk_widget_ref (priv->main); gtk_widget_unparent (priv->main); diff --git a/calendar/gui/dialogs/meeting-page.c b/calendar/gui/dialogs/meeting-page.c index 7932fbd177..fddaab1900 100644 --- a/calendar/gui/dialogs/meeting-page.c +++ b/calendar/gui/dialogs/meeting-page.c @@ -373,7 +373,9 @@ get_widgets (MeetingPage *mpage) #define GW(name) glade_xml_get_widget (priv->xml, name) priv->main = GW ("meeting-page"); - g_assert (priv->main); + if (!priv->main) + return FALSE; + gtk_widget_ref (priv->main); gtk_widget_unparent (priv->main); diff --git a/calendar/gui/dialogs/recurrence-page.c b/calendar/gui/dialogs/recurrence-page.c index c5c45def15..e1656ad83f 100644 --- a/calendar/gui/dialogs/recurrence-page.c +++ b/calendar/gui/dialogs/recurrence-page.c @@ -1747,7 +1747,9 @@ get_widgets (RecurrencePage *rpage) #define GW(name) glade_xml_get_widget (priv->xml, name) priv->main = GW ("recurrence-page"); - g_assert (priv->main); + if (!priv->main) + return FALSE; + gtk_widget_ref (priv->main); gtk_widget_unparent (priv->main); diff --git a/calendar/gui/dialogs/task-details-page.c b/calendar/gui/dialogs/task-details-page.c index 76a3cadcd4..2e4a5ddab1 100644 --- a/calendar/gui/dialogs/task-details-page.c +++ b/calendar/gui/dialogs/task-details-page.c @@ -320,7 +320,9 @@ get_widgets (TaskDetailsPage *tdpage) #define GW(name) glade_xml_get_widget (priv->xml, name) priv->main = GW ("task-details-page"); - g_assert (priv->main); + if (!priv->main) + return FALSE; + gtk_widget_ref (priv->main); gtk_widget_unparent (priv->main); diff --git a/calendar/gui/dialogs/task-page.c b/calendar/gui/dialogs/task-page.c index 02a1e1bfd3..ce01a389e6 100644 --- a/calendar/gui/dialogs/task-page.c +++ b/calendar/gui/dialogs/task-page.c @@ -618,7 +618,9 @@ get_widgets (TaskPage *tpage) #define GW(name) glade_xml_get_widget (priv->xml, name) priv->main = GW ("task-page"); - g_assert (priv->main); + if (!priv->main) + return FALSE; + gtk_widget_ref (priv->main); gtk_widget_unparent (priv->main); diff --git a/calendar/gui/goto.c b/calendar/gui/goto.c index 86dc92bb3a..16c1eecc9f 100644 --- a/calendar/gui/goto.c +++ b/calendar/gui/goto.c @@ -184,11 +184,13 @@ goto_dialog (GnomeCalendar *gcal) dlg->xml = glade_xml_new (EVOLUTION_GLADEDIR "/goto-dialog.glade", NULL); if (!dlg->xml) { g_message ("goto_dialog(): Could not load the Glade XML file!"); + g_free (dlg); return; } if (!get_widgets (dlg)) { g_message ("goto_dialog(): Could not find all widgets in the XML file!"); + g_free (dlg); return; } dlg->gcal = gcal; -- cgit v1.2.3