diff --git a/src/gui/event-editor/gcal-schedule-section.blp b/src/gui/event-editor/gcal-schedule-section.blp index 8baf77ef..e1529c58 100644 --- a/src/gui/event-editor/gcal-schedule-section.blp +++ b/src/gui/event-editor/gcal-schedule-section.blp @@ -94,6 +94,7 @@ template $GcalScheduleSection: Box { numeric: true; adjustment: number_of_occurrences_adjustment; valign: center; + value-changed => $on_number_of_occurrences_changed_cb() swapped; } } diff --git a/src/gui/event-editor/gcal-schedule-section.c b/src/gui/event-editor/gcal-schedule-section.c index 5de17893..b021ce6d 100644 --- a/src/gui/event-editor/gcal-schedule-section.c +++ b/src/gui/event-editor/gcal-schedule-section.c @@ -124,6 +124,8 @@ static void on_schedule_type_changed_cb (GtkWidget GParamSpec *pspec, GcalScheduleSection *self); +static void on_number_of_occurrences_changed_cb (GcalScheduleSection *self); + static GcalScheduleValues gcal_schedule_values_copy (const GcalScheduleValues *values) { @@ -441,6 +443,22 @@ gcal_schedule_section_values_set_recur_limit_type (const GcalScheduleSectionValu return copy; } +static GcalScheduleSectionValues * +gcal_schedule_section_values_set_recurrence_count (const GcalScheduleSectionValues *values, + guint count) +{ + 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_COUNT); + + copy->curr.recur->limit.count = count; + + return copy; +} + static WidgetState * widget_state_from_values (const GcalScheduleSectionValues *values) { @@ -591,6 +609,7 @@ update_widgets (GcalScheduleSection *self, WidgetState *state) { 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); block_date_signals (self); adw_toggle_group_set_active_name (self->schedule_type_toggle_group, @@ -632,10 +651,12 @@ update_widgets (GcalScheduleSection *self, gtk_widget_set_visible (self->number_of_occurrences_spin, state->recurrence.number_of_occurrences_visible); if (state->recurrence.number_of_occurrences_visible) { + g_print ("update widgets: limit_count = %u\n", state->recurrence.limit_count); gtk_spin_button_set_value (GTK_SPIN_BUTTON (self->number_of_occurrences_spin), state->recurrence.limit_count); } unblock_date_signals (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); } @@ -715,6 +736,14 @@ on_end_date_time_changed_cb (GtkWidget *widget, update_from_section_values (self, updated); } +static void +on_number_of_occurrences_changed_cb (GcalScheduleSection *self) +{ + guint count = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (self->number_of_occurrences_spin)); + GcalScheduleSectionValues *updated = gcal_schedule_section_values_set_recurrence_count (self->values, count); + update_from_section_values (self, updated); +} + static GcalRecurrenceLimitType get_recurence_limit_type (GcalScheduleSection *self) { @@ -1017,6 +1046,7 @@ gcal_schedule_section_class_init (GcalScheduleSectionClass *klass) gtk_widget_class_bind_template_callback (widget_class, on_end_date_time_changed_cb); 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); } static void