editor-dialog: Fix time-slot timezones

Uses the local timezone if the event was originally all-day.

Also set the end time to 1:00 if start and end date are the same.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/641>
This commit is contained in:
Trystan Mata
2025-10-21 14:08:04 +00:00
committed by Marge Bot
parent 2a73bbe974
commit 20274b0b94
+37 -9
View File
@@ -123,14 +123,43 @@ gcal_event_schedule_set_all_day (const GcalEventSchedule *values, gboolean all_d
else else
{ {
/* We are switching from an all-day event to a time-slot one. In this case, /* We are switching from an all-day event to a time-slot one. In this case,
* we want to preserve the current dates, but restore the times of the original * we want to preserve the current dates but if the original event was
* event. * time-slot, restore the times of the latter.
*/ */
GDateTime *start = values->curr.date_start; GDateTime *start = values->curr.date_start;
GDateTime *end = values->curr.date_end; GDateTime *end = values->curr.date_end;
g_autoptr (GDateTime) new_start = g_date_time_new (g_date_time_get_timezone (start), g_autoptr (GDateTime) new_start = NULL;
g_autoptr (GDateTime) new_end = NULL;
g_autoptr (GDateTime) tmp_end = g_date_time_add_days (end, -1);
if (values->orig.all_day)
{
gint end_hour = 0;
new_start = g_date_time_new_local (g_date_time_get_year (start),
g_date_time_get_month (start),
g_date_time_get_day_of_month (start),
0,
0,
0.0);
if (g_date_time_get_year (start) == g_date_time_get_year (tmp_end) &&
g_date_time_get_month (start) == g_date_time_get_month (tmp_end) &&
g_date_time_get_day_of_month (start) == g_date_time_get_day_of_month (tmp_end))
end_hour = 1;
new_end = g_date_time_new_local (g_date_time_get_year (tmp_end),
g_date_time_get_month (tmp_end),
g_date_time_get_day_of_month (tmp_end),
end_hour,
0,
0.0);
}
else
{
new_start = g_date_time_new (g_date_time_get_timezone (start),
g_date_time_get_year (start), g_date_time_get_year (start),
g_date_time_get_month (start), g_date_time_get_month (start),
g_date_time_get_day_of_month (start), g_date_time_get_day_of_month (start),
@@ -138,15 +167,14 @@ gcal_event_schedule_set_all_day (const GcalEventSchedule *values, gboolean all_d
g_date_time_get_minute (values->orig.date_start), g_date_time_get_minute (values->orig.date_start),
g_date_time_get_seconds (values->orig.date_start)); g_date_time_get_seconds (values->orig.date_start));
g_autoptr (GDateTime) tmp = g_date_time_new (g_date_time_get_timezone (end), new_end = g_date_time_new (g_date_time_get_timezone (tmp_end),
g_date_time_get_year (end), g_date_time_get_year (tmp_end),
g_date_time_get_month (end), g_date_time_get_month (tmp_end),
g_date_time_get_day_of_month (end), g_date_time_get_day_of_month (tmp_end),
g_date_time_get_hour (values->orig.date_end), g_date_time_get_hour (values->orig.date_end),
g_date_time_get_minute (values->orig.date_end), g_date_time_get_minute (values->orig.date_end),
g_date_time_get_seconds (values->orig.date_end)); g_date_time_get_seconds (values->orig.date_end));
}
g_autoptr (GDateTime) new_end = g_date_time_add_days (tmp, -1);
gcal_set_date_time (&copy->curr.date_start, new_start); gcal_set_date_time (&copy->curr.date_start, new_start);
gcal_set_date_time (&copy->curr.date_end, new_end); gcal_set_date_time (&copy->curr.date_end, new_end);