summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2016-02-14 12:51:32 -0200
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2016-02-14 12:51:32 -0200
commit6283d9d0259ccb99ab5a0f8ba5beae10b74feed5 (patch)
treef78ad4951a8f19eb870606046017a099372dd25f
parent8511285525fa2e287c006b918f1d63de2d34ba3d (diff)
downloadgnome-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.c12
-rw-r--r--src/gcal-manager.c21
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);