From c2964baaed3436bba5119f8dd5ceb76452352993 Mon Sep 17 00:00:00 2001 From: mindonwarp Date: Sun, 4 Oct 2026 20:17:33 +0200 Subject: [PATCH] views/week-header: Avoid setting date when dates share the same start-of-week Instead of checking `g_date_time_get_week_of_year()`, which doesn't care about "first day of week" settings, we use our `gcal_date_time_get_start_of_week()` utility function. This function determines the first day of the week the passed date belongs to, constructs a new `GDateTime` object that represents the first day of week as 'Y-M-D 00:00:00' in local timezone, all while taking into account the "first day of week" Desktop setting. Fixes: Part-of: --- src/gui/views/gcal-week-header.c | 12 ++++++++---- src/utils/gcal-date-time-utils.c | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/gui/views/gcal-week-header.c b/src/gui/views/gcal-week-header.c index 1e0336a1..1839b478 100644 --- a/src/gui/views/gcal-week-header.c +++ b/src/gui/views/gcal-week-header.c @@ -1849,17 +1849,21 @@ void gcal_week_header_set_date (GcalWeekHeader *self, GDateTime *date) { + g_autoptr (GDateTime) start_of_week_1 = NULL; + g_autoptr (GDateTime) start_of_week_2 = NULL; gboolean had_date; /* * If the active date changed, but we're still in the same week, * there's no need to recalculate visible events. */ - if (self->active_date && date && - g_date_time_get_year (self->active_date) == g_date_time_get_year (date) && - g_date_time_get_week_of_year (self->active_date) == g_date_time_get_week_of_year (date)) + if (self->active_date && date) { - return; + start_of_week_1 = gcal_date_time_get_start_of_week (self->active_date); + start_of_week_2 = gcal_date_time_get_start_of_week (date); + + if (g_date_time_equal (start_of_week_1, start_of_week_2)) + return; } had_date = self->active_date != NULL; diff --git a/src/utils/gcal-date-time-utils.c b/src/utils/gcal-date-time-utils.c index ed1b8455..586656e8 100644 --- a/src/utils/gcal-date-time-utils.c +++ b/src/utils/gcal-date-time-utils.c @@ -89,7 +89,7 @@ gcal_date_time_get_start_of_week (GDateTime *date) g_assert (date != NULL); first_weekday = gcal_context_get_week_start_day (context); - weekday = g_date_time_get_day_of_week (date) % GCAL_N_WEEKDAYS; + weekday = g_date_time_get_day_of_week (date); n_days_after_week_start = GCAL_NTH_WEEKDAY (weekday, first_weekday); start_of_week = g_date_time_add_days (date, -n_days_after_week_start);