manager: implemented GcalManager::source-added and GcalManager::source-removed signals
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user