[gnome-calendar/wip/pandusonu/week-view: 16/21] week-header: don't rearrange events if week didn't change



commit 5238e6ff9d69493ef313a7f762f5ca2c1a8bbf39
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Dec 8 17:50:30 2016 -0200

    week-header: don't rearrange events if week didn't change

 src/views/gcal-week-header.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)
---
diff --git a/src/views/gcal-week-header.c b/src/views/gcal-week-header.c
index e60374f..8bf5c09 100644
--- a/src/views/gcal-week-header.c
+++ b/src/views/gcal-week-header.c
@@ -951,13 +951,27 @@ gcal_week_header_set_property (GObject      *object,
                                GParamSpec   *pspec)
 {
   GcalWeekHeader *self = GCAL_WEEK_HEADER (object);
-  icaltimetype *old_date;
+  icaltimetype *old_date, *new_date;
 
   switch (prop_id)
     {
     case PROP_ACTIVE_DATE:
       old_date = self->active_date;
-      self->active_date = g_value_dup_boxed (value);
+      new_date = g_value_dup_boxed (value);
+
+      /*
+       * If the active date changed, but we're still in the same week,
+       * there's no need to recalculate visible events.
+       */
+      if (old_date && new_date &&
+          old_date->year == new_date->year &&
+          icaltime_week_number (*old_date) == icaltime_week_number (*new_date))
+        {
+          g_free (new_date);
+          break;
+        }
+
+      self->active_date = new_date;
 
       update_title (self);
       gtk_widget_queue_draw (GTK_WIDGET (self));
@@ -966,7 +980,7 @@ gcal_week_header_set_property (GObject      *object,
         update_unchanged_events (self, old_date, self->active_date);
 
       g_clear_pointer (&old_date, g_free);
-      return;
+      break;
 
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]