c2c89b667e99cc5248da9a632db534a9c94193e3
Since 78cb11c64d, GcalCalendarMonitor now
notifies when a completed calendar transitions to incomplete, and
GcalTimeline decrements its completed_calendars counter. But we forgot
to remove the code that resets completed_calendars when previously
needed. That's not required anymore, because we can trust
GcalCalendarMonitor to do the right thing.
In my case, I have 5 calendars enabled and 6 total. When starting
gnome-calendar, all 5 are successively completed, and
completed_calendars increments from 0 -> 1 -> 2 -> 3 -> 4 -> 5. Then,
when transitioning month view from January 2020 to December 2019, we
call reset_completed_calendars() and completed_calenders gets clobbered
to 0. Then it decrements from 0 -> -1 -> -2 -> -3 -> -4 -> -5 as the
GcalCalendarMonitors notify that they are no longer completed. Well,
that is what would happen, if it didn't crash when decrementing to -1.
We assert -1 <= 6 (the total number of calendars) and crash because -1
gets promoted to a huge unsigned int, since we're comparing signed to
unsigned. (That crash would have been avoided if we used
-Wsign-compare, although that warning would not have caught the logic
problem.)
Anyway, since GcalMonitor now notifies when calendars are no longer
complete, it is safe to simply remove reset_completed_calendars().
GcalTimeline will still notify if it needs to change its own complete
property (in on_calendar_monitor_completed_cb).
Fixes #567
Fixes #636
Fixes #638
Fixes #647
Fixes #650
GNOME Calendar
GNOME Calendar is a simple and beautiful calendar application for GNOME. We give a lot of attention to details, and as such, design is an essential and ongoing effort.
Useful links
- Homepage: https://wiki.gnome.org/Apps/Calendar
- Report issues: https://gitlab.gnome.org/GNOME/gnome-calendar/issues/
- Donate: https://www.gnome.org/friends/
- Translate: https://wiki.gnome.org/TranslationProject
Languages
C
97.6%
Meson
1.2%
CSS
0.7%
Python
0.3%
Shell
0.2%