[gnome-calendar/wip/gbsneto/gcal-event] application: update event colors when agenda changes
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar/wip/gbsneto/gcal-event] application: update event colors when agenda changes
- Date: Sun, 14 Feb 2016 14:58:46 +0000 (UTC)
commit 6283d9d0259ccb99ab5a0f8ba5beae10b74feed5
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Sun Feb 14 12:51:32 2016 -0200
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.
src/gcal-application.c | 12 ++----------
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 ce5aa55..784503f 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 2386be8..d790529 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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]