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 schedule_type_all_day;
|
||||||
gboolean date_widgets_visible;
|
gboolean date_widgets_visible;
|
||||||
gboolean date_time_widgets_visible;
|
gboolean date_time_widgets_visible;
|
||||||
|
GcalTimeFormat time_format;
|
||||||
} WidgetState;
|
} WidgetState;
|
||||||
|
|
||||||
static void widget_state_free (WidgetState *state);
|
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_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->date_end = values->date_end ? g_date_time_ref (values->date_end) : NULL;
|
||||||
copy->recur = values->recur ? gcal_recurrence_ref (values->recur) : NULL;
|
copy->recur = values->recur ? gcal_recurrence_ref (values->recur) : NULL;
|
||||||
|
copy->time_format = values->time_format;
|
||||||
|
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
@@ -128,6 +130,15 @@ gcal_schedule_values_set_all_day (const GcalScheduleValues *values, gboolean all
|
|||||||
return copy;
|
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 *
|
static WidgetState *
|
||||||
widget_state_from_values (const GcalScheduleValues *values)
|
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->schedule_type_all_day = values->all_day;
|
||||||
state->date_widgets_visible = values->all_day;
|
state->date_widgets_visible = values->all_day;
|
||||||
state->date_time_widgets_visible = !values->all_day;
|
state->date_time_widgets_visible = !values->all_day;
|
||||||
|
state->time_format = values->time_format;
|
||||||
|
|
||||||
return state;
|
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->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);
|
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);
|
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);
|
GcalTimeFormat time_format = gcal_context_get_time_format (self->context);
|
||||||
|
|
||||||
gcal_date_time_chooser_set_time_format (self->start_date_time_chooser, time_format);
|
GcalScheduleValues *updated = gcal_schedule_values_set_time_format (self->values, time_format);
|
||||||
gcal_date_time_chooser_set_time_format (self->end_date_time_chooser, 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;
|
GcalRecurrenceLimitType limit_type;
|
||||||
GcalRecurrenceFrequency frequency;
|
GcalRecurrenceFrequency frequency;
|
||||||
gboolean all_day, new_event;
|
gboolean all_day, new_event;
|
||||||
|
GcalTimeFormat time_format;
|
||||||
GcalScheduleValues *values;
|
GcalScheduleValues *values;
|
||||||
g_autoptr (WidgetState) state = NULL;
|
g_autoptr (WidgetState) state = NULL;
|
||||||
|
|
||||||
@@ -432,7 +451,8 @@ gcal_schedule_section_set_event (GcalEventEditorSection *section,
|
|||||||
g_set_object (&self->event, event);
|
g_set_object (&self->event, event);
|
||||||
self->flags = flags;
|
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 */
|
values = self->values; /* alias to avoid "self->values" everywhere */
|
||||||
|
|
||||||
if (!event)
|
if (!event)
|
||||||
@@ -636,7 +656,9 @@ gcal_schedule_section_apply (GcalEventEditorSection *section)
|
|||||||
gcal_schedule_section_apply_to_event (self, self->event);
|
gcal_schedule_section_apply_to_event (self, self->event);
|
||||||
|
|
||||||
gcal_schedule_values_free (self->values);
|
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;
|
GCAL_EXIT;
|
||||||
}
|
}
|
||||||
@@ -762,7 +784,6 @@ gcal_schedule_section_set_property (GObject *object,
|
|||||||
G_CALLBACK (on_time_format_changed_cb),
|
G_CALLBACK (on_time_format_changed_cb),
|
||||||
self,
|
self,
|
||||||
G_CONNECT_SWAPPED);
|
G_CONNECT_SWAPPED);
|
||||||
on_time_format_changed_cb (self);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -874,7 +895,8 @@ gcal_schedule_section_day_changed (GcalScheduleSection *self)
|
|||||||
* gcal_schedule_values_free().
|
* gcal_schedule_values_free().
|
||||||
*/
|
*/
|
||||||
GcalScheduleValues *
|
GcalScheduleValues *
|
||||||
gcal_schedule_values_from_event (GcalEvent *event)
|
gcal_schedule_values_from_event (GcalEvent *event,
|
||||||
|
GcalTimeFormat time_format)
|
||||||
{
|
{
|
||||||
GcalScheduleValues *values = g_new0 (GcalScheduleValues, 1);
|
GcalScheduleValues *values = g_new0 (GcalScheduleValues, 1);
|
||||||
|
|
||||||
@@ -892,6 +914,8 @@ gcal_schedule_values_from_event (GcalEvent *event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
values->time_format = time_format;
|
||||||
|
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,13 +39,15 @@ typedef struct
|
|||||||
GDateTime *date_start;
|
GDateTime *date_start;
|
||||||
GDateTime *date_end;
|
GDateTime *date_end;
|
||||||
GcalRecurrence *recur;
|
GcalRecurrence *recur;
|
||||||
|
GcalTimeFormat time_format;
|
||||||
} GcalScheduleValues;
|
} GcalScheduleValues;
|
||||||
|
|
||||||
gboolean gcal_schedule_section_recurrence_changed (GcalScheduleSection *self);
|
gboolean gcal_schedule_section_recurrence_changed (GcalScheduleSection *self);
|
||||||
|
|
||||||
gboolean gcal_schedule_section_day_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);
|
void gcal_schedule_values_free (GcalScheduleValues *values);
|
||||||
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (GcalScheduleValues, gcal_schedule_values_free);
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (GcalScheduleValues, gcal_schedule_values_free);
|
||||||
|
|||||||
Reference in New Issue
Block a user