Handle the recurrence until-date with an action, not via the widgets
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
This commit is contained in:
committed by
Georges Basile Stavracas Neto
parent
8c0281aef5
commit
e9a626ed40
@@ -106,6 +106,7 @@ template $GcalScheduleSection: Box {
|
||||
$GcalDateSelector until_date_selector {
|
||||
visible: false;
|
||||
valign: center;
|
||||
notify::date => $on_until_date_changed_cb() swapped;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,6 +125,7 @@ static void on_schedule_type_changed_cb (GtkWidget
|
||||
GcalScheduleSection *self);
|
||||
|
||||
static void on_number_of_occurrences_changed_cb (GcalScheduleSection *self);
|
||||
static void on_until_date_changed_cb (GcalScheduleSection *self);
|
||||
|
||||
static GcalScheduleValues
|
||||
gcal_schedule_values_copy (const GcalScheduleValues *values)
|
||||
@@ -459,6 +460,22 @@ gcal_schedule_section_values_set_recurrence_count (const GcalScheduleSectionValu
|
||||
return copy;
|
||||
}
|
||||
|
||||
static GcalScheduleSectionValues *
|
||||
gcal_schedule_section_values_set_recurrence_until (const GcalScheduleSectionValues *values,
|
||||
GDateTime *until)
|
||||
{
|
||||
GcalScheduleSectionValues *copy = gcal_schedule_section_values_copy (values);
|
||||
|
||||
/* An old recurrence would already be present */
|
||||
g_assert (copy->curr.recur != NULL);
|
||||
g_assert (copy->curr.recur->frequency != GCAL_RECURRENCE_NO_REPEAT);
|
||||
g_assert (copy->curr.recur->limit_type == GCAL_RECURRENCE_UNTIL);
|
||||
|
||||
gcal_set_date_time (©->curr.recur->limit.until, until);
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
static WidgetState *
|
||||
widget_state_from_values (const GcalScheduleSectionValues *values)
|
||||
{
|
||||
@@ -610,6 +627,7 @@ update_widgets (GcalScheduleSection *self,
|
||||
{
|
||||
g_signal_handlers_block_by_func (self->schedule_type_toggle_group, on_schedule_type_changed_cb, self);
|
||||
g_signal_handlers_block_by_func (self->number_of_occurrences_spin, on_number_of_occurrences_changed_cb, self);
|
||||
g_signal_handlers_block_by_func (self->until_date_selector, on_until_date_changed_cb, self);
|
||||
block_date_signals (self);
|
||||
|
||||
adw_toggle_group_set_active_name (self->schedule_type_toggle_group,
|
||||
@@ -656,6 +674,7 @@ update_widgets (GcalScheduleSection *self,
|
||||
}
|
||||
|
||||
unblock_date_signals (self);
|
||||
g_signal_handlers_unblock_by_func (self->until_date_selector, on_until_date_changed_cb, self);
|
||||
g_signal_handlers_unblock_by_func (self->number_of_occurrences_spin, on_number_of_occurrences_changed_cb, self);
|
||||
g_signal_handlers_unblock_by_func (self->schedule_type_toggle_group, on_schedule_type_changed_cb, self);
|
||||
}
|
||||
@@ -744,6 +763,14 @@ on_number_of_occurrences_changed_cb (GcalScheduleSection *self)
|
||||
update_from_section_values (self, updated);
|
||||
}
|
||||
|
||||
static void
|
||||
on_until_date_changed_cb (GcalScheduleSection *self)
|
||||
{
|
||||
GDateTime *until = gcal_date_selector_get_date (GCAL_DATE_SELECTOR (self->until_date_selector));
|
||||
GcalScheduleSectionValues *updated = gcal_schedule_section_values_set_recurrence_until (self->values, until);
|
||||
update_from_section_values (self, updated);
|
||||
}
|
||||
|
||||
static GcalRecurrenceLimitType
|
||||
get_recurence_limit_type (GcalScheduleSection *self)
|
||||
{
|
||||
@@ -1047,6 +1074,7 @@ gcal_schedule_section_class_init (GcalScheduleSectionClass *klass)
|
||||
gtk_widget_class_bind_template_callback (widget_class, on_repeat_duration_changed_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, on_repeat_type_changed_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, on_number_of_occurrences_changed_cb);
|
||||
gtk_widget_class_bind_template_callback (widget_class, on_until_date_changed_cb);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user