Exemple #1
0
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);
    }
}