Set the recurrence frequency via an action function, not by poking the widgets directly
Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
This commit is contained in:
committed by
Georges Basile Stavracas Neto
parent
74e784fb92
commit
52a7021241
@@ -347,6 +347,44 @@ gcal_schedule_section_values_set_end_date_time (const GcalScheduleSectionValues
|
|||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GcalRecurrence *
|
||||||
|
recur_change_frequency (GcalRecurrence *old_recur, GcalRecurrenceFrequency frequency)
|
||||||
|
{
|
||||||
|
if (frequency == GCAL_RECURRENCE_NO_REPEAT)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GcalRecurrence *new_recur;
|
||||||
|
|
||||||
|
if (old_recur)
|
||||||
|
{
|
||||||
|
new_recur = gcal_recurrence_copy (old_recur);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new_recur = gcal_recurrence_new ();
|
||||||
|
}
|
||||||
|
|
||||||
|
new_recur->frequency = frequency;
|
||||||
|
|
||||||
|
return new_recur;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static GcalScheduleSectionValues *
|
||||||
|
gcal_schedule_section_values_set_recur_frequency (const GcalScheduleSectionValues *values,
|
||||||
|
GcalRecurrenceFrequency frequency)
|
||||||
|
{
|
||||||
|
GcalScheduleSectionValues *copy = gcal_schedule_section_values_copy (values);
|
||||||
|
GcalRecurrence *new_recur = recur_change_frequency (copy->curr.recur, frequency);
|
||||||
|
g_clear_pointer (©->curr.recur, gcal_recurrence_unref);
|
||||||
|
copy->curr.recur = new_recur;
|
||||||
|
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
static WidgetState *
|
static WidgetState *
|
||||||
widget_state_from_values (const GcalScheduleSectionValues *values)
|
widget_state_from_values (const GcalScheduleSectionValues *values)
|
||||||
{
|
{
|
||||||
@@ -649,11 +687,8 @@ on_repeat_type_changed_cb (GtkWidget *widget,
|
|||||||
GcalScheduleSection *self)
|
GcalScheduleSection *self)
|
||||||
{
|
{
|
||||||
GcalRecurrenceFrequency frequency = get_recurrence_frequency (self);
|
GcalRecurrenceFrequency frequency = get_recurrence_frequency (self);
|
||||||
|
GcalScheduleSectionValues *updated = gcal_schedule_section_values_set_recur_frequency (self->values, frequency);
|
||||||
if (frequency == GCAL_RECURRENCE_NO_REPEAT)
|
update_from_section_values (self, updated);
|
||||||
adw_combo_row_set_selected (ADW_COMBO_ROW (self->repeat_duration_combo), GCAL_RECURRENCE_FOREVER);
|
|
||||||
|
|
||||||
gtk_widget_set_visible (self->repeat_duration_combo, frequency != GCAL_RECURRENCE_NO_REPEAT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1238,6 +1273,16 @@ test_43_switching_to_all_day_preserves_timezones (void)
|
|||||||
g_assert (g_date_time_equal (not_all_day_values->curr.date_end, expected_end_date2));
|
g_assert (g_date_time_equal (not_all_day_values->curr.date_end, expected_end_date2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_recur_changes_to_no_repeat (void)
|
||||||
|
{
|
||||||
|
g_autoptr (GcalRecurrence) old_recur = gcal_recurrence_new ();
|
||||||
|
old_recur->frequency = GCAL_RECURRENCE_WEEKLY;
|
||||||
|
|
||||||
|
g_autoptr (GcalRecurrence) new_recur = recur_change_frequency (old_recur, GCAL_RECURRENCE_NO_REPEAT);
|
||||||
|
g_assert_null (new_recur);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gcal_schedule_section_add_tests (void)
|
gcal_schedule_section_add_tests (void)
|
||||||
{
|
{
|
||||||
@@ -1253,4 +1298,6 @@ gcal_schedule_section_add_tests (void)
|
|||||||
test_all_day_displays_sensible_dates_and_roundtrips);
|
test_all_day_displays_sensible_dates_and_roundtrips);
|
||||||
g_test_add_func ("/event_editor/schedule_section/43_switching_to_all_day_preserves_timezones",
|
g_test_add_func ("/event_editor/schedule_section/43_switching_to_all_day_preserves_timezones",
|
||||||
test_43_switching_to_all_day_preserves_timezones);
|
test_43_switching_to_all_day_preserves_timezones);
|
||||||
|
g_test_add_func ("/event_editor/schedule_section/recur_changes_to_no_repeat",
|
||||||
|
test_recur_changes_to_no_repeat);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user