[california] Update event in Week view when altered or removed: Bug #732671



commit 7784efb202571b785018e5559a377c7bc326c2be
Author: Jim Nelson <jim yorba org>
Date:   Wed Jul 9 15:36:37 2014 -0700

    Update event in Week view when altered or removed: Bug #732671

 src/view/week/week-day-pane.vala |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)
---
diff --git a/src/view/week/week-day-pane.vala b/src/view/week/week-day-pane.vala
index f065910..5090355 100644
--- a/src/view/week/week-day-pane.vala
+++ b/src/view/week/week-day-pane.vala
@@ -100,6 +100,10 @@ internal class DayPane : Pane, Common.InstanceContainer {
         if (!days_events.add(event))
             return;
         
+        event.notify[Component.Event.PROP_SUMMARY].connect(queue_draw);
+        event.notify[Component.Event.PROP_DATE_SPAN].connect(on_update_date_time);
+        event.notify[Component.Event.PROP_EXACT_TIME_SPAN].connect(on_update_date_time);
+        
         queue_draw();
     }
     
@@ -107,6 +111,10 @@ internal class DayPane : Pane, Common.InstanceContainer {
         if (!days_events.remove(event))
             return;
         
+        event.notify[Component.Event.PROP_SUMMARY].disconnect(queue_draw);
+        event.notify[Component.Event.PROP_DATE_SPAN].disconnect(on_update_date_time);
+        event.notify[Component.Event.PROP_EXACT_TIME_SPAN].disconnect(on_update_date_time);
+        
         queue_draw();
     }
     
@@ -116,6 +124,18 @@ internal class DayPane : Pane, Common.InstanceContainer {
         queue_draw();
     }
     
+    private void on_update_date_time(Object object, ParamSpec param) {
+        Component.Event event = (Component.Event) object;
+        
+        // remove entirely if not in this date any more, otherwise remove and re-add to re-sort
+        if (!(date in event.get_event_date_span(Calendar.System.timezone)))
+            remove_event(event);
+        else if (days_events.remove(event))
+            days_events.add(event);
+        
+        queue_draw();
+    }
+    
     public Component.Event? get_event_at(Gdk.Point point) {
         Calendar.ExactTime exact_time = new Calendar.ExactTime(Calendar.Timezone.local, date,
             get_wall_time(point.y));


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