edit-dialog: fix date span backward

The problem is that the end date might change to one before the
start date when modifying the start time.

Treat some cases taking into consideration the start date and start
time related to the fact that an event is spanning all day or not.
Separate the handling of the start date and start time.

https://bugzilla.gnome.org/show_bug.cgi?id=772100
This commit is contained in:
Andrei Ceapa
2017-03-06 21:56:11 -03:00
committed by Georges Basile Stavracas Neto
parent e406f93239
commit 1228f05a90
+33 -4
View File
@@ -300,10 +300,12 @@ sync_datetimes (GcalEditDialog *self,
{
GDateTime *start, *end, *new_date;
GtkWidget *date_widget, *time_widget;
gboolean is_start;
gboolean is_start_time, is_start_date;
gint hour_to_add;
is_start = (widget == self->start_time_selector || widget == self->start_date_selector);
is_start_time = (widget == self->start_time_selector);
is_start_date = (widget == self->start_date_selector);
start = gcal_edit_dialog_get_date_start (self);
end = gcal_edit_dialog_get_date_end (self);
@@ -317,9 +319,36 @@ sync_datetimes (GcalEditDialog *self,
*/
hour_to_add = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->all_day_check)) ? 0 : 1;
if (is_start)
if (is_start_date)
{
new_date = g_date_time_add_hours (start, hour_to_add);
if (hour_to_add)
{
if (g_date_time_difference(end, start) < 0)
{
new_date = g_date_time_add_hours (start, hour_to_add + 24);
date_widget = self->end_date_selector;
time_widget = self->end_time_selector;
}
else
{
new_date = g_date_time_add_hours (start, hour_to_add);
date_widget = self->end_date_selector;
time_widget = self->end_time_selector;
}
}
else
{
new_date = g_date_time_add_hours (start, hour_to_add);
date_widget = self->end_date_selector;
time_widget = self->end_time_selector;
}
}
else if (is_start_time)
{
new_date = g_date_time_add_hours (start, hour_to_add + 24);
date_widget = self->end_date_selector;
time_widget = self->end_time_selector;