diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2016-02-14 12:51:32 -0200 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2016-02-14 12:51:32 -0200 |
commit | 6283d9d0259ccb99ab5a0f8ba5beae10b74feed5 (patch) | |
tree | f78ad4951a8f19eb870606046017a099372dd25f | |
parent | 8511285525fa2e287c006b918f1d63de2d34ba3d (diff) | |
download | gnome-calendar-wip/gbsneto/gcal-event.tar.gz |
application: update event colors when agenda changeswip/gbsneto/gcal-event
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.
-rw-r--r-- | src/gcal-application.c | 12 | ||||
-rw-r--r-- | 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 @@ -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 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); |