Handle the recurrence count 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
d65e1ff216
commit
7bb6549cb6
@@ -94,6 +94,7 @@ template $GcalScheduleSection: Box {
|
|||||||
numeric: true;
|
numeric: true;
|
||||||
adjustment: number_of_occurrences_adjustment;
|
adjustment: number_of_occurrences_adjustment;
|
||||||
valign: center;
|
valign: center;
|
||||||
|
value-changed => $on_number_of_occurrences_changed_cb() swapped;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -124,6 +124,8 @@ static void on_schedule_type_changed_cb (GtkWidget
|
|||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
GcalScheduleSection *self);
|
GcalScheduleSection *self);
|
||||||
|
|
||||||
|
static void on_number_of_occurrences_changed_cb (GcalScheduleSection *self);
|
||||||
|
|
||||||
static GcalScheduleValues
|
static GcalScheduleValues
|
||||||
gcal_schedule_values_copy (const GcalScheduleValues *values)
|
gcal_schedule_values_copy (const GcalScheduleValues *values)
|
||||||
{
|
{
|
||||||
@@ -441,6 +443,22 @@ gcal_schedule_section_values_set_recur_limit_type (const GcalScheduleSectionValu
|
|||||||
return copy;
|
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 *
|
static WidgetState *
|
||||||
widget_state_from_values (const GcalScheduleSectionValues *values)
|
widget_state_from_values (const GcalScheduleSectionValues *values)
|
||||||
{
|
{
|
||||||
@@ -591,6 +609,7 @@ update_widgets (GcalScheduleSection *self,
|
|||||||
WidgetState *state)
|
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->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);
|
block_date_signals (self);
|
||||||
|
|
||||||
adw_toggle_group_set_active_name (self->schedule_type_toggle_group,
|
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);
|
gtk_widget_set_visible (self->number_of_occurrences_spin, state->recurrence.number_of_occurrences_visible);
|
||||||
if (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);
|
gtk_spin_button_set_value (GTK_SPIN_BUTTON (self->number_of_occurrences_spin), state->recurrence.limit_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
unblock_date_signals (self);
|
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);
|
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);
|
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
|
static GcalRecurrenceLimitType
|
||||||
get_recurence_limit_type (GcalScheduleSection *self)
|
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_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_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_repeat_type_changed_cb);
|
||||||
|
gtk_widget_class_bind_template_callback (widget_class, on_number_of_occurrences_changed_cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
Reference in New Issue
Block a user