GcalScheduleValues: new struct to hold values from a GcalEvent for the schedule widges
We'll move GcalScheduleSection to operate without a backing GcalEvent, so we can add tests. Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
This commit is contained in:
committed by
Georges Basile Stavracas Neto
parent
42b00ec052
commit
f75785a34c
@@ -771,3 +771,47 @@ gcal_schedule_section_day_changed (GcalScheduleSection *self)
|
|||||||
GCAL_RETURN (gcal_date_time_compare_date (start_date, gcal_event_get_date_start (self->event)) < 0 ||
|
GCAL_RETURN (gcal_date_time_compare_date (start_date, gcal_event_get_date_start (self->event)) < 0 ||
|
||||||
gcal_date_time_compare_date (end_date, gcal_event_get_date_end (self->event)) > 0);
|
gcal_date_time_compare_date (end_date, gcal_event_get_date_end (self->event)) > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts the values from @event that are needed to populate #GcalScheduleSection.
|
||||||
|
*
|
||||||
|
* Returns: a #GcalscheduleValues ready for use. Free it with
|
||||||
|
* gcal_schedule_values_free().
|
||||||
|
*/
|
||||||
|
GcalScheduleValues *
|
||||||
|
gcal_schedule_values_from_event (GcalEvent *event)
|
||||||
|
{
|
||||||
|
GcalScheduleValues *values = g_new0 (GcalScheduleValues, 1);
|
||||||
|
|
||||||
|
if (event)
|
||||||
|
{
|
||||||
|
GcalRecurrence *recur = gcal_event_get_recurrence (event);
|
||||||
|
|
||||||
|
values->all_day = gcal_event_get_all_day (event);
|
||||||
|
values->date_start = g_date_time_ref (gcal_event_get_date_start (event));
|
||||||
|
values->date_end = g_date_time_ref (gcal_event_get_date_end (event));
|
||||||
|
|
||||||
|
if (recur)
|
||||||
|
{
|
||||||
|
values->recur = gcal_recurrence_ref (recur);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Frees the contents of @values. Does not free the @values pointer itself;
|
||||||
|
* this structure is meant to be allocated on the stack.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gcal_schedule_values_free (GcalScheduleValues *values)
|
||||||
|
{
|
||||||
|
values->all_day = FALSE;
|
||||||
|
|
||||||
|
g_clear_pointer (&values->date_start, g_date_time_unref);
|
||||||
|
g_clear_pointer (&values->date_end, g_date_time_unref);
|
||||||
|
g_clear_pointer (&values->recur, gcal_recurrence_unref);
|
||||||
|
|
||||||
|
g_free (values);
|
||||||
|
}
|
||||||
|
|||||||
@@ -28,8 +28,26 @@ G_BEGIN_DECLS
|
|||||||
#define GCAL_TYPE_SCHEDULE_SECTION (gcal_schedule_section_get_type())
|
#define GCAL_TYPE_SCHEDULE_SECTION (gcal_schedule_section_get_type())
|
||||||
G_DECLARE_FINAL_TYPE (GcalScheduleSection, gcal_schedule_section, GCAL, SCHEDULE_SECTION, GtkBox)
|
G_DECLARE_FINAL_TYPE (GcalScheduleSection, gcal_schedule_section, GCAL, SCHEDULE_SECTION, GtkBox)
|
||||||
|
|
||||||
|
/* Values from a GcalEvent that this widget can manipulate.
|
||||||
|
*
|
||||||
|
* We keep an immutable copy of the original event's values, and later generate
|
||||||
|
* a new GcalScheduleValues with the updated data from the widgetry.
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
gboolean all_day;
|
||||||
|
GDateTime *date_start;
|
||||||
|
GDateTime *date_end;
|
||||||
|
GcalRecurrence *recur;
|
||||||
|
} GcalScheduleValues;
|
||||||
|
|
||||||
gboolean gcal_schedule_section_recurrence_changed (GcalScheduleSection *self);
|
gboolean gcal_schedule_section_recurrence_changed (GcalScheduleSection *self);
|
||||||
|
|
||||||
gboolean gcal_schedule_section_day_changed (GcalScheduleSection *self);
|
gboolean gcal_schedule_section_day_changed (GcalScheduleSection *self);
|
||||||
|
|
||||||
|
GcalScheduleValues *gcal_schedule_values_from_event (GcalEvent *event);
|
||||||
|
void gcal_schedule_values_free (GcalScheduleValues *values);
|
||||||
|
|
||||||
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (GcalScheduleValues, gcal_schedule_values_free);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
Reference in New Issue
Block a user