From 6283d9d0259ccb99ab5a0f8ba5beae10b74feed5 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Sun, 14 Feb 2016 12:51:32 -0200 Subject: [PATCH] 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 ce5aa555..784503f8 100644 --- a/src/gcal-application.c +++ b/src/gcal-application.c @@ -169,15 +169,6 @@ process_sources (GcalApplication *application) g_free (new_css_data); } -static void -sources_added_cb (GcalApplication *application, - ESource *source, - gboolean enabled, - GcalManager *manager) -{ - process_sources (application); -} - static void gcal_application_class_init (GcalApplicationClass *klass) { @@ -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 2386be81..d7905298 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);