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);