gboolean mc_event_raise (const gchar * event_group_name, const gchar * event_name, gpointer event_data) { GTree *event_group; GPtrArray *callbacks; guint array_index; if (mc_event_grouplist == NULL || event_group_name == NULL || event_name == NULL) return FALSE; event_group = mc_event_get_event_group_by_name (event_group_name, FALSE, NULL); if (event_group == NULL) return FALSE; callbacks = mc_event_get_event_by_name (event_group, event_name, FALSE, NULL); if (callbacks == NULL) return FALSE; for (array_index = callbacks->len; array_index > 0; array_index--) { mc_event_callback_t *cb = g_ptr_array_index (callbacks, array_index - 1); if (!(*cb->callback) (event_group_name, event_name, cb->init_data, event_data)) break; } return TRUE; }
void mc_event_del (const gchar * event_group_name, const gchar * event_name, mc_event_callback_func_t event_callback, gpointer event_init_data) { GTree *event_group; GPtrArray *callbacks; mc_event_callback_t *cb; if (mc_event_grouplist == NULL || event_group_name == NULL || event_name == NULL || event_callback == NULL) return; event_group = mc_event_get_event_group_by_name (event_group_name, FALSE, NULL); if (event_group == NULL) return; callbacks = mc_event_get_event_by_name (event_group, event_name, FALSE, NULL); if (callbacks == NULL) return; cb = mc_event_is_callback_in_array (callbacks, event_callback, event_init_data); if (cb == NULL) return; g_ptr_array_remove (callbacks, (gpointer) cb); g_free ((gpointer) cb); }
gboolean mc_event_present (const gchar * event_group_name, const gchar * event_name) { GTree *event_group; GPtrArray *callbacks; if (mc_event_grouplist == NULL || event_group_name == NULL || event_name == NULL) return FALSE; event_group = mc_event_get_event_group_by_name (event_group_name, FALSE, NULL); if (event_group == NULL) return FALSE; callbacks = mc_event_get_event_by_name (event_group, event_name, FALSE, NULL); if (callbacks == NULL) return FALSE; return TRUE; }
gboolean mc_event_add (const gchar * event_group_name, const gchar * event_name, mc_event_callback_func_t event_callback, gpointer event_init_data, GError ** mcerror) { GTree *event_group; GPtrArray *callbacks; mc_event_callback_t *cb; if (mc_event_grouplist == NULL || event_group_name == NULL || event_name == NULL || event_callback == NULL) { g_propagate_error (mcerror, g_error_new (MC_ERROR, 1, _("Check input data! Some of parameters are NULL!"))); return FALSE; } event_group = mc_event_get_event_group_by_name (event_group_name, TRUE, mcerror); if (event_group == NULL) return FALSE; callbacks = mc_event_get_event_by_name (event_group, event_name, TRUE, mcerror); if (callbacks == NULL) return FALSE; cb = mc_event_is_callback_in_array (callbacks, event_callback, event_init_data); if (cb == NULL) { cb = g_new0 (mc_event_callback_t, 1); cb->callback = event_callback; g_ptr_array_add (callbacks, (gpointer) cb); } cb->init_data = event_init_data; return TRUE; }