void _cogl_atlas_remove_reorganize_callback (CoglAtlas *atlas, GHookFunc pre_callback, GHookFunc post_callback, void *user_data) { if (pre_callback) { GHook *hook = g_hook_find_func_data (&atlas->pre_reorganize_callbacks, FALSE, pre_callback, user_data); if (hook) g_hook_destroy_link (&atlas->pre_reorganize_callbacks, hook); } if (post_callback) { GHook *hook = g_hook_find_func_data (&atlas->post_reorganize_callbacks, FALSE, post_callback, user_data); if (hook) g_hook_destroy_link (&atlas->post_reorganize_callbacks, hook); } }
void gnc_gconf_general_register_cb (const gchar *key, GncGconfGeneralCb func, gpointer user_data) { GHookList *hook_list; GHook *hook; g_once(&gcb_init_once, gcb_init, NULL); hook_list = g_hash_table_lookup(gcb_callback_hash, key); if (hook_list == NULL) { hook_list = g_malloc(sizeof(GHookList)); g_hook_list_init(hook_list, sizeof(GHook)); g_hash_table_insert(gcb_callback_hash, (gpointer)key, hook_list); } hook = g_hook_find_func_data(hook_list, TRUE, func, user_data); if (hook != NULL) { return; } hook = g_hook_alloc(hook_list); hook->func = func; hook->data = user_data; g_hook_append(hook_list, hook); }
void gnc_gconf_general_remove_any_cb (GncGconfGeneralAnyCb func, gpointer user_data) { GHook *hook; g_once(&gcb_init_once, gcb_init, NULL); hook = g_hook_find_func_data(gcb_final_hook_list, TRUE, func, user_data); if (hook == NULL) return; g_hook_unref(gcb_final_hook_list, hook); }
void _cogl_pango_glyph_cache_remove_reorganize_callback (CoglPangoGlyphCache *cache, GHookFunc func, void *user_data) { GHook *hook = g_hook_find_func_data (&cache->reorganize_callbacks, FALSE, func, user_data); if (hook) g_hook_destroy_link (&cache->reorganize_callbacks, hook); }
void gnc_gconf_general_register_any_cb (GncGconfGeneralAnyCb func, gpointer user_data) { GHook *hook; g_once(&gcb_init_once, gcb_init, NULL); hook = g_hook_find_func_data(gcb_final_hook_list, TRUE, func, user_data); if (hook != NULL) return; hook = g_hook_alloc(gcb_final_hook_list); hook->func = func; hook->data = user_data; g_hook_append(gcb_final_hook_list, hook); }
void gnc_gconf_general_remove_cb (const gchar *key, GncGconfGeneralCb func, gpointer user_data) { GHookList *hook_list; GHook *hook; g_once(&gcb_init_once, gcb_init, NULL); hook_list = g_hash_table_lookup(gcb_callback_hash, key); if (hook_list == NULL) return; hook = g_hook_find_func_data(hook_list, TRUE, func, user_data); if (hook == NULL) return; g_hook_destroy_link(hook_list, hook); if (hook_list->hooks == NULL) { g_hash_table_remove(gcb_callback_hash, key); g_free(hook_list); } }