Handle the time_format as part of GcalScheduleValues and WidgetState
This will let us write tests for changing the time format without a context object. Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/550>
This commit is contained in:
committed by
Georges Basile Stavracas Neto
parent
11dcab5ddf
commit
938419c1d4
@@ -68,6 +68,7 @@ typedef struct
|
||||
gboolean schedule_type_all_day;
|
||||
gboolean date_widgets_visible;
|
||||
gboolean date_time_widgets_visible;
|
||||
GcalTimeFormat time_format;
|
||||
} WidgetState;
|
||||
|
||||
static void widget_state_free (WidgetState *state);
|
||||
@@ -115,6 +116,7 @@ gcal_schedule_values_copy (const GcalScheduleValues *values)
|
||||
copy->date_start = values->date_start ? g_date_time_ref (values->date_start) : NULL;
|
||||
copy->date_end = values->date_end ? g_date_time_ref (values->date_end) : NULL;
|
||||
copy->recur = values->recur ? gcal_recurrence_ref (values->recur) : NULL;
|
||||
copy->time_format = values->time_format;
|
||||
|
||||
return copy;
|
||||
}
|
||||
@@ -128,6 +130,15 @@ gcal_schedule_values_set_all_day (const GcalScheduleValues *values, gboolean all
|
||||
return copy;
|
||||
}
|
||||
|
||||
static GcalScheduleValues *
|
||||
gcal_schedule_values_set_time_format (const GcalScheduleValues *values, GcalTimeFormat time_format)
|
||||
{
|
||||
GcalScheduleValues *copy = gcal_schedule_values_copy (values);
|
||||
|
||||
copy->time_format = time_format;
|
||||
return copy;
|
||||
}
|
||||
|
||||
static WidgetState *
|
||||
widget_state_from_values (const GcalScheduleValues *values)
|
||||
{
|
||||
@@ -136,6 +147,7 @@ widget_state_from_values (const GcalScheduleValues *values)
|
||||
state->schedule_type_all_day = values->all_day;
|
||||
state->date_widgets_visible = values->all_day;
|
||||
state->date_time_widgets_visible = !values->all_day;
|
||||
state->time_format = values->time_format;
|
||||
|
||||
return state;
|
||||
}
|
||||
@@ -204,6 +216,9 @@ update_widgets (GcalScheduleSection *self,
|
||||
gtk_widget_set_visible (GTK_WIDGET (self->start_date_time_chooser), state->date_time_widgets_visible);
|
||||
gtk_widget_set_visible (GTK_WIDGET (self->end_date_time_chooser), state->date_time_widgets_visible);
|
||||
|
||||
gcal_date_time_chooser_set_time_format (self->start_date_time_chooser, state->time_format);
|
||||
gcal_date_time_chooser_set_time_format (self->end_date_time_chooser, state->time_format);
|
||||
|
||||
g_signal_handlers_unblock_by_func (self->schedule_type_toggle_group, on_schedule_type_changed_cb, self);
|
||||
}
|
||||
|
||||
@@ -387,8 +402,11 @@ on_time_format_changed_cb (GcalScheduleSection *self)
|
||||
{
|
||||
GcalTimeFormat time_format = gcal_context_get_time_format (self->context);
|
||||
|
||||
gcal_date_time_chooser_set_time_format (self->start_date_time_chooser, time_format);
|
||||
gcal_date_time_chooser_set_time_format (self->end_date_time_chooser, time_format);
|
||||
GcalScheduleValues *updated = gcal_schedule_values_set_time_format (self->values, time_format);
|
||||
|
||||
WidgetState *state = widget_state_from_values (updated);
|
||||
update_widgets (self, state);
|
||||
widget_state_free (state);
|
||||
}
|
||||
|
||||
|
||||
@@ -422,6 +440,7 @@ gcal_schedule_section_set_event (GcalEventEditorSection *section,
|
||||
GcalRecurrenceLimitType limit_type;
|
||||
GcalRecurrenceFrequency frequency;
|
||||
gboolean all_day, new_event;
|
||||
GcalTimeFormat time_format;
|
||||
GcalScheduleValues *values;
|
||||
g_autoptr (WidgetState) state = NULL;
|
||||
|
||||
@@ -432,7 +451,8 @@ gcal_schedule_section_set_event (GcalEventEditorSection *section,
|
||||
g_set_object (&self->event, event);
|
||||
self->flags = flags;
|
||||
|
||||
self->values = gcal_schedule_values_from_event (event);
|
||||
time_format = gcal_context_get_time_format (self->context);
|
||||
self->values = gcal_schedule_values_from_event (event, time_format);
|
||||
values = self->values; /* alias to avoid "self->values" everywhere */
|
||||
|
||||
if (!event)
|
||||
@@ -636,7 +656,9 @@ gcal_schedule_section_apply (GcalEventEditorSection *section)
|
||||
gcal_schedule_section_apply_to_event (self, self->event);
|
||||
|
||||
gcal_schedule_values_free (self->values);
|
||||
self->values = gcal_schedule_values_from_event (self->event);
|
||||
|
||||
GcalTimeFormat time_format = gcal_context_get_time_format (self->context);
|
||||
self->values = gcal_schedule_values_from_event (self->event, time_format);
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
@@ -762,7 +784,6 @@ gcal_schedule_section_set_property (GObject *object,
|
||||
G_CALLBACK (on_time_format_changed_cb),
|
||||
self,
|
||||
G_CONNECT_SWAPPED);
|
||||
on_time_format_changed_cb (self);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -874,7 +895,8 @@ gcal_schedule_section_day_changed (GcalScheduleSection *self)
|
||||
* gcal_schedule_values_free().
|
||||
*/
|
||||
GcalScheduleValues *
|
||||
gcal_schedule_values_from_event (GcalEvent *event)
|
||||
gcal_schedule_values_from_event (GcalEvent *event,
|
||||
GcalTimeFormat time_format)
|
||||
{
|
||||
GcalScheduleValues *values = g_new0 (GcalScheduleValues, 1);
|
||||
|
||||
@@ -892,6 +914,8 @@ gcal_schedule_values_from_event (GcalEvent *event)
|
||||
}
|
||||
}
|
||||
|
||||
values->time_format = time_format;
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
|
||||
@@ -39,13 +39,15 @@ typedef struct
|
||||
GDateTime *date_start;
|
||||
GDateTime *date_end;
|
||||
GcalRecurrence *recur;
|
||||
GcalTimeFormat time_format;
|
||||
} GcalScheduleValues;
|
||||
|
||||
gboolean gcal_schedule_section_recurrence_changed (GcalScheduleSection *self);
|
||||
|
||||
gboolean gcal_schedule_section_day_changed (GcalScheduleSection *self);
|
||||
|
||||
GcalScheduleValues *gcal_schedule_values_from_event (GcalEvent *event);
|
||||
GcalScheduleValues *gcal_schedule_values_from_event (GcalEvent *event,
|
||||
GcalTimeFormat time_format);
|
||||
void gcal_schedule_values_free (GcalScheduleValues *values);
|
||||
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (GcalScheduleValues, gcal_schedule_values_free);
|
||||
|
||||
Reference in New Issue
Block a user