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:
+2
-10
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user