manager: implemented GcalManager::source-added and GcalManager::source-removed signals

This commit is contained in:
Georges Basile Stavracas Neto
2014-12-16 11:12:48 -02:00
parent 069ea90d57
commit 0cefc9f5ea
2 changed files with 54 additions and 0 deletions
+50
View File
@@ -66,6 +66,16 @@ struct _MoveEventData
typedef struct _MoveEventData MoveEventData;
enum
{
SOURCE_ACTIVATE,
SOURCE_ADDED,
SOURCE_REMOVED,
NUM_SIGNALS
};
static guint signals[NUM_SIGNALS] = { 0, };
static void free_async_ops_data (AsyncOpsData *data);
static void free_unit_data (GcalManagerUnit *data);
@@ -77,6 +87,10 @@ static void on_client_connected (GObject *sour
GAsyncResult *result,
gpointer user_data);
static void on_client_readonly_changed (EClient *client,
GParamSpec *pspec,
gpointer user_data);
static void on_client_refreshed (GObject *source_object,
GAsyncResult *result,
gpointer user_data);
@@ -259,11 +273,16 @@ on_client_connected (GObject *source_object,
unit->enabled = TRUE;
g_hash_table_insert (priv->clients, source, unit);
g_signal_emit (GCAL_MANAGER (user_data), signals[SOURCE_ADDED], 0, source);
g_debug ("Source %s (%s) connected",
e_source_get_display_name (source),
e_source_get_uid (source));
/* notify the readonly property */
g_signal_connect (client, "notify::readonly",
G_CALLBACK (on_client_readonly_changed), user_data);
e_cal_data_model_add_client (priv->e_data_model, client);
e_cal_data_model_add_client (priv->search_data_model, client);
g_clear_object (&client);
@@ -283,6 +302,20 @@ on_client_connected (GObject *source_object,
}
}
static void
on_client_readonly_changed (EClient *client,
GParamSpec *pspec,
gpointer user_data)
{
ESource *source;
gboolean readonly;
source = e_client_get_source (client);
readonly = e_client_is_readonly (client);
g_signal_emit (GCAL_MANAGER (user_data), signals[SOURCE_ACTIVATE], 0, source, !readonly);
}
static void
on_client_refreshed (GObject *source_object,
@@ -404,12 +437,29 @@ remove_source (GcalManager *manager,
e_cal_data_model_remove_client (priv->search_data_model,
e_source_get_uid (source));
g_hash_table_remove (priv->clients, source);
g_signal_emit (manager, signals[SOURCE_REMOVED], 0, source);
}
static void
gcal_manager_class_init (GcalManagerClass *klass)
{
G_OBJECT_CLASS (klass)->finalize = gcal_manager_finalize;
/* signals */
signals[SOURCE_ACTIVATE] = g_signal_new ("source-activate", GCAL_TYPE_MANAGER, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GcalManagerClass, source_activate),
NULL, NULL, NULL,
G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_BOOLEAN);
signals[SOURCE_ADDED] = g_signal_new ("source-added", GCAL_TYPE_MANAGER, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GcalManagerClass, source_added),
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
signals[SOURCE_REMOVED] = g_signal_new ("source-removed", GCAL_TYPE_MANAGER, G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GcalManagerClass, source_removed),
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
}
static void
+4
View File
@@ -44,6 +44,10 @@ struct _GcalManager
struct _GcalManagerClass
{
GObjectClass parent_class;
/* signals */
void (*source_added) (GcalManager *manager, ESource *source);
void (*source_removed) (GcalManager *manager, ESource *source);
};
typedef struct