[california] Reflect display changes to calendars in Week view: Bug #730670



commit 7092eaa649ab94105306e192276e61e53123b896
Author: Jim Nelson <jim yorba org>
Date:   Fri Sep 12 13:24:42 2014 -0700

    Reflect display changes to calendars in Week view: Bug #730670

 src/view/common/common-events-cell.vala |    4 ++--
 src/view/month/month-grid.vala          |   12 ++++++------
 src/view/week/week-day-pane.vala        |    6 ++++++
 src/view/week/week-grid.vala            |   14 ++++++++++++++
 4 files changed, 28 insertions(+), 8 deletions(-)
---
diff --git a/src/view/common/common-events-cell.vala b/src/view/common/common-events-cell.vala
index 912aa4c..76ddb91 100644
--- a/src/view/common/common-events-cell.vala
+++ b/src/view/common/common-events-cell.vala
@@ -265,12 +265,12 @@ internal abstract class EventsCell : Gtk.EventBox, InstanceContainer {
     }
     
     /**
-     * To be called by the owning widget when a calendar's visibility has changed.
+     * To be called by the owning widget when a calendar's display (visibility, color) has changed.
      *
      * This causes event line numbers to be reassigned and thie { link Cell} redrawn, if the
      * calendar in question has any events in this date.
      */
-    public void notify_calendar_visibility_changed(Backing.CalendarSource calendar_source) {
+    public void notify_calendar_display_changed(Backing.CalendarSource calendar_source) {
         if (!traverse<Component.Event>(days_events).any((event) => event.calendar_source == calendar_source))
             return;
         
diff --git a/src/view/month/month-grid.vala b/src/view/month/month-grid.vala
index 8a9cc8e..f124f94 100644
--- a/src/view/month/month-grid.vala
+++ b/src/view/month/month-grid.vala
@@ -201,20 +201,20 @@ private class Grid : Gtk.Grid {
     }
     
     private void on_calendar_added(Backing.CalendarSource calendar) {
-        calendar.notify[Backing.Source.PROP_VISIBLE].connect(on_calendar_visibility_changed);
-        calendar.notify[Backing.Source.PROP_COLOR].connect(queue_draw);
+        calendar.notify[Backing.Source.PROP_VISIBLE].connect(on_calendar_display_changed);
+        calendar.notify[Backing.Source.PROP_COLOR].connect(on_calendar_display_changed);
     }
     
     private void on_calendar_removed(Backing.CalendarSource calendar) {
-        calendar.notify[Backing.Source.PROP_VISIBLE].disconnect(on_calendar_visibility_changed);
-        calendar.notify[Backing.Source.PROP_COLOR].disconnect(queue_draw);
+        calendar.notify[Backing.Source.PROP_VISIBLE].disconnect(on_calendar_display_changed);
+        calendar.notify[Backing.Source.PROP_COLOR].disconnect(on_calendar_display_changed);
     }
     
-    private void on_calendar_visibility_changed(Object o, ParamSpec pspec) {
+    private void on_calendar_display_changed(Object o, ParamSpec pspec) {
         Backing.CalendarSource calendar = (Backing.CalendarSource) o;
         
         foreach_cell((cell) => {
-            cell.notify_calendar_visibility_changed(calendar);
+            cell.notify_calendar_display_changed(calendar);
             
             return true;
         });
diff --git a/src/view/week/week-day-pane.vala b/src/view/week/week-day-pane.vala
index 02c33c9..40e563a 100644
--- a/src/view/week/week-day-pane.vala
+++ b/src/view/week/week-day-pane.vala
@@ -208,6 +208,11 @@ internal class DayPane : Pane, Common.InstanceContainer {
         queue_draw();
     }
     
+    public void notify_calendar_display_changed(Backing.CalendarSource calendar_source) {
+        if (traverse<Component.Event>(days_events).any(event => event.calendar_source == calendar_source))
+            queue_draw();
+    }
+    
     public override bool query_tooltip(int x, int y, bool keyboard_mode, Gtk.Tooltip tooltip) {
         // convery y into a time of day
         Calendar.WallTime wall_time = get_wall_time(y);
@@ -261,6 +266,7 @@ internal class DayPane : Pane, Common.InstanceContainer {
         // https://bugzilla.gnome.org/show_bug.cgi?id=736444
         Gee.TreeSet<Component.Event> sorted_events = traverse<Component.Event>(days_events)
             .filter(filter_date_spanning_events)
+            .filter(event => event.calendar_source != null && event.calendar_source.visible)
             .to_tree_set();
         foreach (Component.Event event in sorted_events) {
             Calendar.WallTime start_time =
diff --git a/src/view/week/week-grid.vala b/src/view/week/week-grid.vala
index c2141f4..e79af4e 100644
--- a/src/view/week/week-grid.vala
+++ b/src/view/week/week-grid.vala
@@ -273,9 +273,23 @@ internal class Grid : Gtk.Box {
     }
     
     private void on_calendar_added(Backing.CalendarSource calendar) {
+        calendar.notify[Backing.Source.PROP_VISIBLE].connect(on_calendar_display_changed);
+        calendar.notify[Backing.Source.PROP_COLOR].connect(on_calendar_display_changed);
     }
     
     private void on_calendar_removed(Backing.CalendarSource calendar) {
+        calendar.notify[Backing.Source.PROP_VISIBLE].disconnect(on_calendar_display_changed);
+        calendar.notify[Backing.Source.PROP_COLOR].disconnect(on_calendar_display_changed);
+    }
+    
+    private void on_calendar_display_changed(Object o, ParamSpec pspec) {
+        Backing.CalendarSource calendar_source = (Backing.CalendarSource) o;
+        
+        foreach (AllDayCell cell in date_to_all_day.values)
+            cell.notify_calendar_display_changed(calendar_source);
+        
+        foreach (DayPane pane in date_to_panes.values)
+            pane.notify_calendar_display_changed(calendar_source);
     }
     
     private void on_calendar_instance_added_or_altered(Component.Instance instance) {


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