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:
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ struct _GcalTimelineSubscriberInterface
|
||||
GcalEvent *event);
|
||||
|
||||
void (*update_event) (GcalTimelineSubscriber *self,
|
||||
GcalEvent *old_event,
|
||||
GcalEvent *event);
|
||||
|
||||
void (*remove_event) (GcalTimelineSubscriber *self,
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user