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
This commit is contained in:
Georges Basile Stavracas Neto
2023-08-18 10:41:41 -03:00
parent 60223adc5c
commit da84b727b3
8 changed files with 14 additions and 6 deletions
+1
View File
@@ -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)
{
}
+1
View File
@@ -44,6 +44,7 @@ struct _GcalTimelineSubscriberInterface
GcalEvent *event);
void (*update_event) (GcalTimelineSubscriber *self,
GcalEvent *old_event,
GcalEvent *event);
void (*remove_event) (GcalTimelineSubscriber *self,
+3 -2
View File
@@ -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;
+2 -1
View File
@@ -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);
}
+2 -1
View File
@@ -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;
+2 -1
View File
@@ -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;
+2 -1
View File
@@ -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);
+1
View File
@@ -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)
{
}