From d8e22b56460e60159c9af3d571e1384ad24b3b0b Mon Sep 17 00:00:00 2001 From: Trystan Mata Date: Mon, 1 Sep 2025 15:41:21 +0200 Subject: [PATCH] event-editor: Fix template update when updating all events Change how the template end date is determined by mainly relying on the new template start date: - If all day, end date is start date plus 1 day (midnight enforced) - If time-based, end date is start date plus the time span of the event properties Part-of: --- .../event-editor/gcal-event-editor-dialog.c | 33 ++++--------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/src/gui/event-editor/gcal-event-editor-dialog.c b/src/gui/event-editor/gcal-event-editor-dialog.c index 0c6b2596..a7ef425e 100644 --- a/src/gui/event-editor/gcal-event-editor-dialog.c +++ b/src/gui/event-editor/gcal-event-editor-dialog.c @@ -140,16 +140,12 @@ apply_event_properties_to_template_event (GcalEvent *template_event, g_autoptr (GList) alarms = gcal_event_get_alarms (event); GDateTime *template_start_date; GDateTime *event_start_date; - GDateTime *template_end_date; GDateTime *event_end_date; - gboolean was_all_day; gboolean is_all_day; is_all_day = gcal_event_get_all_day (event); - was_all_day = gcal_event_get_all_day (template_event); template_start_date = gcal_event_get_date_start (template_event); - template_end_date = gcal_event_get_date_end (template_event); event_start_date = gcal_event_get_date_start (event); event_end_date = gcal_event_get_date_end (event); @@ -157,29 +153,14 @@ apply_event_properties_to_template_event (GcalEvent *template_event, g_date_time_get_year (template_start_date), g_date_time_get_month (template_start_date), g_date_time_get_day_of_month (template_start_date), - g_date_time_get_hour (event_start_date), - g_date_time_get_minute (event_start_date), - g_date_time_get_second (event_start_date)); + is_all_day ? 0 : g_date_time_get_hour (event_start_date), + is_all_day ? 0 : g_date_time_get_minute (event_start_date), + is_all_day ? 0 : g_date_time_get_second (event_start_date)); - end_date = g_date_time_new (g_date_time_get_timezone (event_end_date), - g_date_time_get_year (template_end_date), - g_date_time_get_month (template_end_date), - g_date_time_get_day_of_month (template_end_date), - g_date_time_get_hour (event_end_date), - g_date_time_get_minute (event_end_date), - g_date_time_get_second (event_end_date)); - - if (was_all_day != is_all_day) - { - g_autoptr (GDateTime) fake_end_date = NULL; - - if (is_all_day) - fake_end_date = g_date_time_add_days (end_date, -1); - else - fake_end_date = g_date_time_add_days (end_date, 1); - - gcal_set_date_time (&end_date, fake_end_date); - } + if (is_all_day) + end_date = g_date_time_add_days (start_date, 1); + else + end_date = g_date_time_add (start_date, g_date_time_difference (event_end_date, event_start_date)); gcal_event_set_summary (template_event, gcal_event_get_summary (event)); gcal_event_set_location (template_event, gcal_event_get_location (event));