From 175d22e9ef989b8a9e6df634d45392333f127b0f Mon Sep 17 00:00:00 2001 From: pandusonu2 Date: Sat, 25 Jun 2016 19:05:35 +0530 Subject: [PATCH] week-header: reposition present events on changing active date. When an event lasts beyond the active week, the event placement doesn't change on changing the week. We removed all the present events and added them to the list of events to be added to reposition them. --- src/views/gcal-week-header.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/views/gcal-week-header.c b/src/views/gcal-week-header.c index 7a3077bc..dd92fd39 100644 --- a/src/views/gcal-week-header.c +++ b/src/views/gcal-week-header.c @@ -63,6 +63,8 @@ static void update_headers (GcalWeekHeader *sel static void place_events (GcalWeekHeader *self); +static void clear_current_events (GcalWeekHeader *self); + static void gcal_week_header_finalize (GObject *object); static void gcal_week_header_get_property (GObject *object, @@ -237,6 +239,28 @@ place_events (GcalWeekHeader *self) g_list_free (iter); } +static void +clear_current_events (GcalWeekHeader *self) +{ + GList *children, *l; + + children = g_list_copy (gtk_container_get_children (GTK_CONTAINER (self->grid))); + + for (l = children; l != NULL; l = l->next) + { + if (!GCAL_IS_EVENT_WIDGET (l->data)) + continue; + + /* Add current events to events list to add later if necessary */ + self->events = g_list_append (self->events, + gcal_event_widget_get_event (l->data)); + + gtk_widget_destroy (l->data); + } + + g_list_free (children); +} + static void gcal_week_header_finalize (GObject *object) { @@ -313,6 +337,7 @@ gcal_week_header_set_property (GObject *object, self->active_date = g_value_dup_boxed (value); update_headers (self); + clear_current_events (self); place_events (self); gtk_widget_queue_draw (self->draw_area); @@ -573,6 +598,7 @@ gcal_week_header_set_current_date (GcalWeekHeader *self, self->current_date = gcal_dup_icaltime (current_date); update_headers (self); + clear_current_events (self); place_events (self); gtk_widget_queue_draw (self->draw_area);