diff options
author | Federico Mena Quintero <federico@helixcode.com> | 2000-07-20 09:06:52 +0800 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2000-07-20 09:06:52 +0800 |
commit | cb1c400a5007f81228e8d620f87cb1adeb86fbce (patch) | |
tree | 0313786e2d5e25c26f1239c7731b5e8b5463b952 /calendar/cal-util | |
parent | 9dfeaac6e4d1e87e48f1016c8e490e58bb74f638 (diff) | |
download | gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.tar gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.tar.gz gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.tar.bz2 gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.tar.lz gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.tar.xz gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.tar.zst gsoc2013-evolution-cb1c400a5007f81228e8d620f87cb1adeb86fbce.zip |
Finish filling the trigger. What a pain, again.
2000-07-19 Federico Mena Quintero <federico@helixcode.com>
* cal-util/cal-component.c (cal_component_alarm_set_trigger):
Finish filling the trigger. What a pain, again.
(cal_component_alarm_free_trigger): Implemented.
svn path=/trunk/; revision=4232
Diffstat (limited to 'calendar/cal-util')
-rw-r--r-- | calendar/cal-util/cal-component.c | 83 |
1 files changed, 77 insertions, 6 deletions
diff --git a/calendar/cal-util/cal-component.c b/calendar/cal-util/cal-component.c index 0d5b829520..ec2523a261 100644 --- a/calendar/cal-util/cal-component.c +++ b/calendar/cal-util/cal-component.c @@ -2230,7 +2230,8 @@ cal_component_alarm_set_action (CalComponentAlarm *alarm, CalComponentAlarmActio /** * cal_component_alarm_get_trigger: * @alarm: An alarm. - * @trigger: Return value for the trigger time. + * @trigger: Return value for the trigger time. This should be freed using the + * cal_component_alarm_free_trigger() function. * * Queries the trigger time for an alarm. **/ @@ -2322,37 +2323,107 @@ cal_component_alarm_get_trigger (CalComponentAlarm *alarm, CalComponentAlarmTrig } } +/** + * cal_component_alarm_set_trigger: + * @alarm: An alarm. + * @trigger: Trigger time structure. + * + * Sets the trigger time of an alarm. + **/ void cal_component_alarm_set_trigger (CalComponentAlarm *alarm, CalComponentAlarmTrigger *trigger) { union icaltriggertype t; + icalparameter *param; + icalparameter_value value_type; + icalparameter_related related; g_return_if_fail (alarm != NULL); g_return_if_fail (trigger != NULL); g_assert (alarm->icalcomp != NULL); + /* Delete old trigger */ + + if (alarm->trigger) { + icalcomponent_remove_property (alarm->icalcomp, alarm->trigger); + icalproperty_free (alarm->trigger); + alarm->trigger = NULL; + } + /* Set the value */ + value_type = ICAL_DURATION_VALUE; /* Keep GCC happy */ + related = ICAL_RELATED_START; /* Ditto */ + switch (trigger->type) { case CAL_COMPONENT_ALARM_TRIGGER_RELATIVE: t.duration = trigger->u.relative.duration; + value_type = ICAL_DURATION_VALUE; + + switch (trigger->u.relative.related) { + case CAL_COMPONENT_ALARM_TRIGGER_RELATED_START: + related = ICAL_RELATED_START; + break; + + case CAL_COMPONENT_ALARM_TRIGGER_RELATED_END: + related = ICAL_RELATED_END; + break; + + default: + g_assert_not_reached (); + return; + } + break; case CAL_COMPONENT_ALARM_TRIGGER_ABSOLUTE: t.time = trigger->u.absolute; + value_type = ICAL_DATETIME_VALUE; break; default: g_assert_not_reached (); + return; } - if (alarm->trigger) - icalproperty_set_trigger (alarm->trigger, t); + alarm->trigger = icalproperty_new_trigger (t); + icalcomponent_add_property (alarm->icalcomp, alarm->trigger); + + /* Value parameters */ + + param = icalproperty_get_first_parameter (alarm->trigger, ICAL_VALUE_PARAMETER); + if (param) + icalparameter_set_value (param, value_type); else { - alarm->trigger = icalproperty_new_trigger (t); - icalcomponent_add_property (alarm->icalcomp, alarm->trigger); + param = icalparameter_new_value (value_type); + icalproperty_add_parameter (alarm->trigger, param); + } + + /* Related parameter */ + + if (trigger->type == CAL_COMPONENT_ALARM_TRIGGER_RELATIVE) { + param = icalproperty_get_first_parameter (alarm->trigger, ICAL_RELATED_PARAMETER); + + if (param) + icalparameter_set_related (param, related); + else { + param = icalparameter_new_related (related); + icalproperty_add_parameter (alarm->trigger, param); + } } +} + +/** + * cal_component_alarm_free_trigger: + * @trigger: A #CalComponentAlarmTrigger structure. + * + * Frees a #CalComponentAlarmTrigger structure. + **/ +void +cal_component_alarm_free_trigger (CalComponentAlarmTrigger *trigger) +{ + g_return_if_fail (trigger != NULL); - /* Set the parameters */ + g_free (trigger); } |