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.
This commit is contained in:
Georges Basile Stavracas Neto
2016-02-14 12:51:32 -02:00
parent 8511285525
commit 6283d9d025
2 changed files with 23 additions and 10 deletions
+2 -10
View File
@@ -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);
+21
View File
@@ -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);