From da84b727b3c48f0e50fb73baad937a53d678345e Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 18 Aug 2023 10:41:41 -0300 Subject: [PATCH] core/subscriber: Pass old event on update Now that we keep precise control over GcalEvent instances, and can use simple pointer comparisons everywhere, GcalMonthView implemented its update function as a simple remove + add pair. The problem is that we're not passing the old event instance, so removals never actually happen, since the new instance is not yet available to subscribers. Pass old event in additio to the new one, and use it where it makes sense. Closes https://gitlab.gnome.org/GNOME/gnome-calendar/-/issues/1073 --- src/core/gcal-shell-search-provider.c | 1 + src/core/gcal-timeline-subscriber.h | 1 + src/core/gcal-timeline.c | 5 +++-- src/gui/event-editor/gcal-date-chooser.c | 3 ++- src/gui/views/gcal-agenda-view.c | 3 ++- src/gui/views/gcal-month-view.c | 3 ++- src/gui/views/gcal-week-view.c | 3 ++- src/search/gcal-search-model.c | 1 + 8 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/core/gcal-shell-search-provider.c b/src/core/gcal-shell-search-provider.c index 165436e8..a849629c 100644 --- a/src/core/gcal-shell-search-provider.c +++ b/src/core/gcal-shell-search-provider.c @@ -407,6 +407,7 @@ gcal_shell_search_provider_add_event (GcalTimelineSubscriber *subscriber, static void gcal_shell_search_provider_update_event (GcalTimelineSubscriber *subscriber, + GcalEvent *old_event, GcalEvent *event) { } diff --git a/src/core/gcal-timeline-subscriber.h b/src/core/gcal-timeline-subscriber.h index 2ad5966c..fa8fe0f0 100644 --- a/src/core/gcal-timeline-subscriber.h +++ b/src/core/gcal-timeline-subscriber.h @@ -44,6 +44,7 @@ struct _GcalTimelineSubscriberInterface GcalEvent *event); void (*update_event) (GcalTimelineSubscriber *self, + GcalEvent *old_event, GcalEvent *event); void (*remove_event) (GcalTimelineSubscriber *self, diff --git a/src/core/gcal-timeline.c b/src/core/gcal-timeline.c index f815ed05..8a9ba080 100644 --- a/src/core/gcal-timeline.c +++ b/src/core/gcal-timeline.c @@ -207,6 +207,7 @@ add_event_to_subscriber (GcalTimelineSubscriber *subscriber, static void update_subscriber_event (GcalTimelineSubscriber *subscriber, + GcalEvent *old_event, GcalEvent *event) { GCAL_TRACE_MSG ("Updating event '%s' (%s) at subscriber %s", @@ -214,7 +215,7 @@ update_subscriber_event (GcalTimelineSubscriber *subscriber, gcal_event_get_uid (event), G_OBJECT_TYPE_NAME (subscriber)); - GCAL_TIMELINE_SUBSCRIBER_GET_IFACE (subscriber)->update_event (subscriber, event); + GCAL_TIMELINE_SUBSCRIBER_GET_IFACE (subscriber)->update_event (subscriber, old_event, event); } static void remove_event_from_subscriber (GcalTimelineSubscriber *subscriber, @@ -741,7 +742,7 @@ timeline_source_dispatch (GSource *source, } if (subscriber) - update_subscriber_event (subscriber, event); + update_subscriber_event (subscriber, queue_data->old_event, event); } break; diff --git a/src/gui/event-editor/gcal-date-chooser.c b/src/gui/event-editor/gcal-date-chooser.c index 4815d831..6755a299 100644 --- a/src/gui/event-editor/gcal-date-chooser.c +++ b/src/gui/event-editor/gcal-date-chooser.c @@ -580,9 +580,10 @@ gcal_date_chooser_remove_event (GcalTimelineSubscriber *subscriber, static void gcal_date_chooser_update_event (GcalTimelineSubscriber *subscriber, + GcalEvent *old_event, GcalEvent *event) { - gcal_date_chooser_remove_event (subscriber, event); + gcal_date_chooser_remove_event (subscriber, old_event); gcal_date_chooser_add_event (subscriber, event); } diff --git a/src/gui/views/gcal-agenda-view.c b/src/gui/views/gcal-agenda-view.c index 6ed7356b..ff150320 100644 --- a/src/gui/views/gcal-agenda-view.c +++ b/src/gui/views/gcal-agenda-view.c @@ -601,11 +601,12 @@ gcal_agenda_view_remove_event (GcalTimelineSubscriber *subscriber, static void gcal_agenda_view_update_event (GcalTimelineSubscriber *subscriber, + GcalEvent *old_event, GcalEvent *event) { GCAL_ENTRY; - gcal_agenda_view_remove_event (subscriber, event); + gcal_agenda_view_remove_event (subscriber, old_event); gcal_agenda_view_add_event (subscriber, event); GCAL_EXIT; diff --git a/src/gui/views/gcal-month-view.c b/src/gui/views/gcal-month-view.c index af0bcfc3..b3c4bba2 100644 --- a/src/gui/views/gcal-month-view.c +++ b/src/gui/views/gcal-month-view.c @@ -1161,13 +1161,14 @@ gcal_month_view_remove_event (GcalTimelineSubscriber *subscriber, static void gcal_month_view_update_event (GcalTimelineSubscriber *subscriber, + GcalEvent *old_event, GcalEvent *event) { GCAL_ENTRY; g_assert (event != NULL); - gcal_month_view_remove_event (subscriber, event); + gcal_month_view_remove_event (subscriber, old_event); gcal_month_view_add_event (subscriber, event); GCAL_EXIT; diff --git a/src/gui/views/gcal-week-view.c b/src/gui/views/gcal-week-view.c index 0f98c144..4eb14a8a 100644 --- a/src/gui/views/gcal-week-view.c +++ b/src/gui/views/gcal-week-view.c @@ -503,6 +503,7 @@ gcal_week_view_add_event (GcalTimelineSubscriber *subscriber, static void gcal_week_view_update_event (GcalTimelineSubscriber *subscriber, + GcalEvent *old_event, GcalEvent *event) { GcalWeekView *self = GCAL_WEEK_VIEW (subscriber); @@ -510,7 +511,7 @@ gcal_week_view_update_event (GcalTimelineSubscriber *subscriber, GCAL_ENTRY; - event_id = gcal_event_get_uid (event); + event_id = gcal_event_get_uid (old_event); gcal_week_header_remove_event (GCAL_WEEK_HEADER (self->header), event_id); gcal_week_grid_remove_event (GCAL_WEEK_GRID (self->week_grid), event_id); diff --git a/src/search/gcal-search-model.c b/src/search/gcal-search-model.c index f67e4f13..e5e8b94c 100644 --- a/src/search/gcal-search-model.c +++ b/src/search/gcal-search-model.c @@ -171,6 +171,7 @@ gcal_search_model_add_event (GcalTimelineSubscriber *subscriber, static void gcal_search_model_update_event (GcalTimelineSubscriber *subscriber, + GcalEvent *old_event, GcalEvent *event) { }