[gnome-calendar/wip/gbsneto/gcal-event] application: update event colors when agenda changes



commit 6283d9d0259ccb99ab5a0f8ba5beae10b74feed5
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sun Feb 14 12:51:32 2016 -0200

    application: update event colors when agenda changes
    
    When we change a source (aka agenda) color, we have to
    restart Calendar in order to see it in action.
    
    After the work on GcalEvent, events are now able to track
    the agenda's color changes, and the event widget updates
    itself in response to that.
    
    The last step was simple notifying GcalApplication when an
    agenda changes, so it knows when to recreate the color schemes.

 src/gcal-application.c |   12 ++----------
 src/gcal-manager.c     |   21 +++++++++++++++++++++
 2 files changed, 23 insertions(+), 10 deletions(-)
---
diff --git a/src/gcal-application.c b/src/gcal-application.c
index ce5aa55..784503f 100644
--- a/src/gcal-application.c
+++ b/src/gcal-application.c
@@ -170,15 +170,6 @@ process_sources (GcalApplication *application)
 }
 
 static void
-sources_added_cb (GcalApplication *application,
-                  ESource         *source,
-                  gboolean         enabled,
-                  GcalManager     *manager)
-{
-  process_sources (application);
-}
-
-static void
 gcal_application_class_init (GcalApplicationClass *klass)
 {
   GObjectClass *object_class;
@@ -203,7 +194,8 @@ gcal_application_init (GcalApplication *self)
   self->colors_provider = gtk_css_provider_new ();
 
   self->manager = gcal_manager_new_with_settings (self->settings);
-  g_signal_connect_swapped (self->manager, "source-added", G_CALLBACK (sources_added_cb), self);
+  g_signal_connect_swapped (self->manager, "source-added", G_CALLBACK (process_sources), self);
+  g_signal_connect_swapped (self->manager, "source-changed", G_CALLBACK (process_sources), self);
 
   self->search_provider = gcal_shell_search_provider_new ();
   gcal_shell_search_provider_connect (self->search_provider, self->manager);
diff --git a/src/gcal-manager.c b/src/gcal-manager.c
index 2386be8..d790529 100644
--- a/src/gcal-manager.c
+++ b/src/gcal-manager.c
@@ -103,6 +103,7 @@ enum
 {
   SOURCE_ACTIVATED,
   SOURCE_ADDED,
+  SOURCE_CHANGED,
   SOURCE_REMOVED,
   SOURCE_ENABLED,
   LOAD_COMPLETED,
@@ -117,6 +118,9 @@ static void     free_async_ops_data                       (AsyncOpsData    *data
 
 static void     free_unit_data                            (GcalManagerUnit *data);
 
+static void     source_changed                            (GcalManager     *manager,
+                                                           ESource         *source);
+
 static void     load_source                               (GcalManager     *manager,
                                                            ESource         *source);
 
@@ -280,6 +284,17 @@ gather_events (ECalDataModel         *data_model,
   return TRUE;
 }
 
+static void
+source_changed (GcalManager *manager,
+                ESource     *source)
+{
+  if (g_hash_table_lookup (manager->clients, source) != NULL &&
+      e_source_has_extension (source, E_SOURCE_EXTENSION_CALENDAR))
+    {
+      g_signal_emit (manager, signals[SOURCE_CHANGED], 0, source);
+    }
+}
+
 /**
  * load_source:
  * @manager: Manager instance
@@ -707,6 +722,11 @@ gcal_manager_class_init (GcalManagerClass *klass)
                                         NULL, NULL, NULL,
                                         G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_BOOLEAN);
 
+  signals[SOURCE_CHANGED] = g_signal_new ("source-changed", GCAL_TYPE_MANAGER, G_SIGNAL_RUN_LAST,
+                                          0,
+                                          NULL, NULL, NULL,
+                                          G_TYPE_NONE, 1, E_TYPE_SOURCE);
+
   signals[SOURCE_REMOVED] = g_signal_new ("source-removed", GCAL_TYPE_MANAGER, G_SIGNAL_RUN_LAST,
                                           0,
                                           NULL, NULL, NULL,
@@ -850,6 +870,7 @@ gcal_manager_constructed (GObject *object)
 
   g_signal_connect_swapped (manager->source_registry, "source-added", G_CALLBACK (load_source), object);
   g_signal_connect_swapped (manager->source_registry, "source-removed", G_CALLBACK (remove_source), object);
+  g_signal_connect_swapped (manager->source_registry, "source-changed", G_CALLBACK (source_changed), object);
 
   /* create data model */
   manager->e_data_model = e_cal_data_model_new (submit_thread_job);


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