g_warning("Invalid signal type %s\n", split_string[2]);
rc = add_listener (listener, split_string[1], split_string[2], event_type);
mai_util_add_global_event_listener(GSignalEmissionHook listener,                                   const gchar *event_type){    GType type;    guint signal_id;    gchar **split_string;    gint rc = 0;    split_string = g_strsplit(event_type, ":", 3);    type = g_type_from_name(split_string[1]);    if (type > 0) {        signal_id = g_signal_lookup(split_string[2], type);        if (signal_id > 0) {            MaiUtilListenerInfo *listener_info;            rc = listener_idx;            listener_info = (MaiUtilListenerInfo *)                g_malloc(sizeof(MaiUtilListenerInfo));            listener_info->key = listener_idx;            listener_info->hook_id =                g_signal_add_emission_hook(signal_id, 0, listener,                                           g_strdup(event_type),                                           (GDestroyNotify) g_free);            listener_info->signal_id = signal_id;            g_hash_table_insert(listener_list, &(listener_info->key),                                listener_info);            listener_idx++;        }        else {            g_warning("Invalid signal type %s\n", split_string[2]);        }    }    else {        g_warning("Invalid object type %s\n", split_string[1]);    }    if (split_string != NULL)        g_strfreev(split_string);    return rc;}