]> Pileus Git - ~andy/gtk/commitdiff
added compile time switch to put the tree views into a hpaned for owen to
authorTim Janik <timj@gtk.org>
Sun, 3 Mar 2002 05:41:28 +0000 (05:41 +0000)
committerTim Janik <timj@src.gnome.org>
Sun, 3 Mar 2002 05:41:28 +0000 (05:41 +0000)
Sun Mar  3 06:39:19 2002  Tim Janik  <timj@gtk.org>

        * gtk/gtkfilesel.c: added compile time switch to put the tree views
        into a hpaned for owen to play with.

        * gtk/gtktreedatalist.c (_gtk_tree_data_list_header_free):
        * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_cell_data_func),
        (gtk_tree_view_column_finalize):
        * gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func),
        (gtk_tree_store_set_sort_func), (gtk_tree_store_finalize):
        * gtk/gtktreeselection.c (gtk_tree_selection_finalize):
        * gtk/gtktreemodelsort.c (gtk_tree_model_sort_reset_default_sort_func),
        (gtk_tree_model_sort_set_default_sort_func),
        (gtk_tree_model_sort_set_sort_func):
        * gtk/gtkliststore.c (gtk_list_store_set_default_sort_func),
        (gtk_list_store_set_default_sort_func),
        (gtk_list_store_set_sort_func), (gtk_list_store_finalize):
        add reentrancy protection around destroy() function invocation.

        * gtk/gtktreeselection.c (gtk_tree_selection_set_select_function): fix
        destroy function invocation (which was missing).

14 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkfilesel.c
gtk/gtkliststore.c
gtk/gtktreedatalist.c
gtk/gtktreemodelsort.c
gtk/gtktreeselection.c
gtk/gtktreestore.c
gtk/gtktreeviewcolumn.c

index c2ec102800bac88b7bd1690e45391bf2ce617b4f..3988bb2ed8992740c66a7361afb4520f36d9ee01 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+Sun Mar  3 06:39:19 2002  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkfilesel.c: added compile time switch to put the tree views
+       into a hpaned for owen to play with.
+
+       * gtk/gtktreedatalist.c (_gtk_tree_data_list_header_free): 
+       * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_cell_data_func),
+       (gtk_tree_view_column_finalize): 
+       * gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func),
+       (gtk_tree_store_set_sort_func), (gtk_tree_store_finalize): 
+       * gtk/gtktreeselection.c (gtk_tree_selection_finalize): 
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_reset_default_sort_func),
+       (gtk_tree_model_sort_set_default_sort_func),
+       (gtk_tree_model_sort_set_sort_func):
+       * gtk/gtkliststore.c (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_sort_func), (gtk_list_store_finalize): 
+       add reentrancy protection around destroy() function invocation.
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_set_select_function): fix
+       destroy function invocation (which was missing).
+
 Sat Mar  2 23:08:23 2002  Owen Taylor  <otaylor@redhat.com>
 
        Fixes for uninstalled operation with module suffixes
index c2ec102800bac88b7bd1690e45391bf2ce617b4f..3988bb2ed8992740c66a7361afb4520f36d9ee01 100644 (file)
@@ -1,3 +1,25 @@
+Sun Mar  3 06:39:19 2002  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkfilesel.c: added compile time switch to put the tree views
+       into a hpaned for owen to play with.
+
+       * gtk/gtktreedatalist.c (_gtk_tree_data_list_header_free): 
+       * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_cell_data_func),
+       (gtk_tree_view_column_finalize): 
+       * gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func),
+       (gtk_tree_store_set_sort_func), (gtk_tree_store_finalize): 
+       * gtk/gtktreeselection.c (gtk_tree_selection_finalize): 
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_reset_default_sort_func),
+       (gtk_tree_model_sort_set_default_sort_func),
+       (gtk_tree_model_sort_set_sort_func):
+       * gtk/gtkliststore.c (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_sort_func), (gtk_list_store_finalize): 
+       add reentrancy protection around destroy() function invocation.
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_set_select_function): fix
+       destroy function invocation (which was missing).
+
 Sat Mar  2 23:08:23 2002  Owen Taylor  <otaylor@redhat.com>
 
        Fixes for uninstalled operation with module suffixes
index c2ec102800bac88b7bd1690e45391bf2ce617b4f..3988bb2ed8992740c66a7361afb4520f36d9ee01 100644 (file)
@@ -1,3 +1,25 @@
+Sun Mar  3 06:39:19 2002  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkfilesel.c: added compile time switch to put the tree views
+       into a hpaned for owen to play with.
+
+       * gtk/gtktreedatalist.c (_gtk_tree_data_list_header_free): 
+       * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_cell_data_func),
+       (gtk_tree_view_column_finalize): 
+       * gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func),
+       (gtk_tree_store_set_sort_func), (gtk_tree_store_finalize): 
+       * gtk/gtktreeselection.c (gtk_tree_selection_finalize): 
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_reset_default_sort_func),
+       (gtk_tree_model_sort_set_default_sort_func),
+       (gtk_tree_model_sort_set_sort_func):
+       * gtk/gtkliststore.c (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_sort_func), (gtk_list_store_finalize): 
+       add reentrancy protection around destroy() function invocation.
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_set_select_function): fix
+       destroy function invocation (which was missing).
+
 Sat Mar  2 23:08:23 2002  Owen Taylor  <otaylor@redhat.com>
 
        Fixes for uninstalled operation with module suffixes
index c2ec102800bac88b7bd1690e45391bf2ce617b4f..3988bb2ed8992740c66a7361afb4520f36d9ee01 100644 (file)
@@ -1,3 +1,25 @@
+Sun Mar  3 06:39:19 2002  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkfilesel.c: added compile time switch to put the tree views
+       into a hpaned for owen to play with.
+
+       * gtk/gtktreedatalist.c (_gtk_tree_data_list_header_free): 
+       * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_cell_data_func),
+       (gtk_tree_view_column_finalize): 
+       * gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func),
+       (gtk_tree_store_set_sort_func), (gtk_tree_store_finalize): 
+       * gtk/gtktreeselection.c (gtk_tree_selection_finalize): 
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_reset_default_sort_func),
+       (gtk_tree_model_sort_set_default_sort_func),
+       (gtk_tree_model_sort_set_sort_func):
+       * gtk/gtkliststore.c (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_sort_func), (gtk_list_store_finalize): 
+       add reentrancy protection around destroy() function invocation.
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_set_select_function): fix
+       destroy function invocation (which was missing).
+
 Sat Mar  2 23:08:23 2002  Owen Taylor  <otaylor@redhat.com>
 
        Fixes for uninstalled operation with module suffixes
index c2ec102800bac88b7bd1690e45391bf2ce617b4f..3988bb2ed8992740c66a7361afb4520f36d9ee01 100644 (file)
@@ -1,3 +1,25 @@
+Sun Mar  3 06:39:19 2002  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkfilesel.c: added compile time switch to put the tree views
+       into a hpaned for owen to play with.
+
+       * gtk/gtktreedatalist.c (_gtk_tree_data_list_header_free): 
+       * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_cell_data_func),
+       (gtk_tree_view_column_finalize): 
+       * gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func),
+       (gtk_tree_store_set_sort_func), (gtk_tree_store_finalize): 
+       * gtk/gtktreeselection.c (gtk_tree_selection_finalize): 
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_reset_default_sort_func),
+       (gtk_tree_model_sort_set_default_sort_func),
+       (gtk_tree_model_sort_set_sort_func):
+       * gtk/gtkliststore.c (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_sort_func), (gtk_list_store_finalize): 
+       add reentrancy protection around destroy() function invocation.
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_set_select_function): fix
+       destroy function invocation (which was missing).
+
 Sat Mar  2 23:08:23 2002  Owen Taylor  <otaylor@redhat.com>
 
        Fixes for uninstalled operation with module suffixes
index c2ec102800bac88b7bd1690e45391bf2ce617b4f..3988bb2ed8992740c66a7361afb4520f36d9ee01 100644 (file)
@@ -1,3 +1,25 @@
+Sun Mar  3 06:39:19 2002  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkfilesel.c: added compile time switch to put the tree views
+       into a hpaned for owen to play with.
+
+       * gtk/gtktreedatalist.c (_gtk_tree_data_list_header_free): 
+       * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_cell_data_func),
+       (gtk_tree_view_column_finalize): 
+       * gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func),
+       (gtk_tree_store_set_sort_func), (gtk_tree_store_finalize): 
+       * gtk/gtktreeselection.c (gtk_tree_selection_finalize): 
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_reset_default_sort_func),
+       (gtk_tree_model_sort_set_default_sort_func),
+       (gtk_tree_model_sort_set_sort_func):
+       * gtk/gtkliststore.c (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_sort_func), (gtk_list_store_finalize): 
+       add reentrancy protection around destroy() function invocation.
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_set_select_function): fix
+       destroy function invocation (which was missing).
+
 Sat Mar  2 23:08:23 2002  Owen Taylor  <otaylor@redhat.com>
 
        Fixes for uninstalled operation with module suffixes
index c2ec102800bac88b7bd1690e45391bf2ce617b4f..3988bb2ed8992740c66a7361afb4520f36d9ee01 100644 (file)
@@ -1,3 +1,25 @@
+Sun Mar  3 06:39:19 2002  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkfilesel.c: added compile time switch to put the tree views
+       into a hpaned for owen to play with.
+
+       * gtk/gtktreedatalist.c (_gtk_tree_data_list_header_free): 
+       * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_cell_data_func),
+       (gtk_tree_view_column_finalize): 
+       * gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func),
+       (gtk_tree_store_set_sort_func), (gtk_tree_store_finalize): 
+       * gtk/gtktreeselection.c (gtk_tree_selection_finalize): 
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_reset_default_sort_func),
+       (gtk_tree_model_sort_set_default_sort_func),
+       (gtk_tree_model_sort_set_sort_func):
+       * gtk/gtkliststore.c (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_default_sort_func),
+       (gtk_list_store_set_sort_func), (gtk_list_store_finalize): 
+       add reentrancy protection around destroy() function invocation.
+
+       * gtk/gtktreeselection.c (gtk_tree_selection_set_select_function): fix
+       destroy function invocation (which was missing).
+
 Sat Mar  2 23:08:23 2002  Owen Taylor  <otaylor@redhat.com>
 
        Fixes for uninstalled operation with module suffixes
index c8c2df3707afd006a5aab0766c45174e1d19122d..06a952c6b2307d880a96f79066e19364080a8f3f 100644 (file)
@@ -82,6 +82,8 @@
 #include "gtkdnd.h"
 #include "gtkeventbox.h"
 
+#define WANT_HPANAED 1
+#include "gtkhpaned.h"
 
 #ifdef G_OS_WIN32
 #include <direct.h>
@@ -630,7 +632,7 @@ gtk_file_selection_init (GtkFileSelection *filesel)
 {
   GtkWidget *entry_vbox;
   GtkWidget *label;
-  GtkWidget *list_hbox;
+  GtkWidget *list_hbox, *list_container;
   GtkWidget *confirm_area;
   GtkWidget *pulldown_hbox;
   GtkWidget *scrolled_win;
@@ -675,6 +677,13 @@ gtk_file_selection_init (GtkFileSelection *filesel)
   list_hbox = gtk_hbox_new (FALSE, 5);
   gtk_box_pack_start (GTK_BOX (filesel->main_vbox), list_hbox, TRUE, TRUE, 0);
   gtk_widget_show (list_hbox);
+  if (WANT_HPANAED)
+    list_container = g_object_new (GTK_TYPE_HPANED,
+                                  "visible", TRUE,
+                                  "parent", list_hbox,
+                                  NULL);
+  else
+    list_container = list_hbox;
 
   /* The directories list */
 
@@ -705,7 +714,10 @@ gtk_file_selection_init (GtkFileSelection *filesel)
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
                                  GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
   gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
-  gtk_box_pack_start (GTK_BOX (list_hbox), scrolled_win, TRUE, TRUE, 0);
+  if (GTK_IS_PANED (list_container))
+    gtk_paned_pack1 (GTK_PANED (list_container), scrolled_win, TRUE, TRUE);
+  else
+    gtk_container_add (GTK_CONTAINER (list_container), scrolled_win);
   gtk_widget_show (filesel->dir_list);
   gtk_widget_show (scrolled_win);
 
@@ -739,7 +751,7 @@ gtk_file_selection_init (GtkFileSelection *filesel)
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
                                  GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
   gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 5);
-  gtk_box_pack_start (GTK_BOX (list_hbox), scrolled_win, TRUE, TRUE, 0);
+  gtk_container_add (GTK_CONTAINER (list_container), scrolled_win);
   gtk_widget_show (filesel->file_list);
   gtk_widget_show (scrolled_win);
 
index dfc00c49311c367ab942d7a530279e542e23741a..004abc5ce0054720daa90dd4adff92ba81959f38 100644 (file)
@@ -430,8 +430,10 @@ gtk_list_store_finalize (GObject *object)
   
   if (list_store->default_sort_destroy)
     {
-      (* list_store->default_sort_destroy) (list_store->default_sort_data);
+      GtkDestroyNotify d = list_store->default_sort_destroy;
+
       list_store->default_sort_destroy = NULL;
+      d (list_store->default_sort_data);
       list_store->default_sort_data = NULL;
     }
 
@@ -1918,7 +1920,12 @@ gtk_list_store_set_sort_func (GtkTreeSortable        *sortable,
     }
 
   if (header->destroy)
-    (* header->destroy) (header->data);
+    {
+      GtkDestroyNotify d = header->destroy;
+
+      header->destroy = NULL;
+      d (header->data);
+    }
 
   header->func = func;
   header->data = data;
@@ -1937,7 +1944,12 @@ gtk_list_store_set_default_sort_func (GtkTreeSortable        *sortable,
   g_return_if_fail (GTK_IS_LIST_STORE (sortable));
 
   if (list_store->default_sort_destroy)
-    (* list_store->default_sort_destroy) (list_store->default_sort_data);
+    {
+      GtkDestroyNotify d = list_store->default_sort_destroy;
+
+      list_store->default_sort_destroy = NULL;
+      d (list_store->default_sort_data);
+    }
 
   list_store->default_sort_func = func;
   list_store->default_sort_data = data;
index 403da218a640757149c1839395f72165b9535dc8..a1007c355ab962dd8dc53d3786c41acdd6cb2357 100644 (file)
@@ -409,7 +409,12 @@ _gtk_tree_data_list_header_free (GList *list)
       GtkTreeDataSortHeader *header = (GtkTreeDataSortHeader *) tmp->data;
 
       if (header->destroy)
-       (* header->destroy) (header->data);
+       {
+         GtkDestroyNotify d = header->destroy;
+
+         header->destroy = NULL;
+         d (header->data);
+       }
 
       g_free (header);
     }
index 91851e50e8c08a9eb5cda55d7cf5829c952fad4a..e2cbe2f96e6ab1211556995d0a5469b1aa20e134 100644 (file)
@@ -1287,7 +1287,12 @@ gtk_tree_model_sort_set_sort_func (GtkTreeSortable        *sortable,
     }
 
   if (header->destroy)
-    (* header->destroy) (header->data);
+    {
+      GtkDestroyNotify d = header->destroy;
+
+      header->destroy = NULL;
+      d (header->data);
+    }
 
   header->func = func;
   header->data = data;
@@ -1305,7 +1310,12 @@ gtk_tree_model_sort_set_default_sort_func (GtkTreeSortable        *sortable,
   g_return_if_fail (GTK_IS_TREE_MODEL_SORT (sortable));
 
   if (tree_model_sort->default_sort_destroy)
-    (* tree_model_sort->default_sort_destroy) (tree_model_sort->default_sort_data);
+    {
+      GtkDestroyNotify d = tree_model_sort->default_sort_destroy;
+
+      tree_model_sort->default_sort_destroy = NULL;
+      d (tree_model_sort->default_sort_data);
+    }
 
   tree_model_sort->default_sort_func = func;
   tree_model_sort->default_sort_data = data;
@@ -2187,7 +2197,12 @@ gtk_tree_model_sort_reset_default_sort_func (GtkTreeModelSort *tree_model_sort)
   g_return_if_fail (GTK_IS_TREE_MODEL_SORT (tree_model_sort));
 
   if (tree_model_sort->default_sort_destroy)
-    (* tree_model_sort->default_sort_destroy) (tree_model_sort->default_sort_data);
+    {
+      GtkDestroyNotify d = tree_model_sort->default_sort_destroy;
+
+      tree_model_sort->default_sort_destroy = NULL;
+      d (tree_model_sort->default_sort_data);
+    }
 
   tree_model_sort->default_sort_func = NO_SORT_FUNC;
   tree_model_sort->default_sort_data = NULL;
index 6b67452bc6df5b401e4d9d37582c032174113ee5..2c93cd43509f7b3f2b8cc2a061998b8b698f14db 100644 (file)
@@ -98,8 +98,15 @@ gtk_tree_selection_init (GtkTreeSelection *selection)
 static void
 gtk_tree_selection_finalize (GObject *object)
 {
-  if (GTK_TREE_SELECTION (object)->destroy)
-    (* GTK_TREE_SELECTION (object)->destroy) (GTK_TREE_SELECTION (object)->user_data);
+  GtkTreeSelection *selection = GTK_TREE_SELECTION (object);
+
+  if (selection->destroy)
+    {
+      GtkDestroyNotify d = selection->destroy;
+
+      selection->destroy = NULL;
+      d (selection->user_data);
+    }
 
   /* chain parent_class' handler */
   G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -276,6 +283,14 @@ gtk_tree_selection_set_select_function (GtkTreeSelection     *selection,
   g_return_if_fail (GTK_IS_TREE_SELECTION (selection));
   g_return_if_fail (func != NULL);
 
+  if (selection->destroy)
+    {
+      GtkDestroyNotify d = selection->destroy;
+
+      selection->destroy = NULL;
+      d (selection->user_data);
+    }
+
   selection->user_func = func;
   selection->user_data = data;
   selection->destroy = destroy;
index 65b37479cb0ebf102235fd78445107aa1d9e0529..38164bb5952ae752457b4e23c229b6f9f51b7360 100644 (file)
@@ -450,8 +450,10 @@ gtk_tree_store_finalize (GObject *object)
 
   if (tree_store->default_sort_destroy)
     {
-      (* tree_store->default_sort_destroy) (tree_store->default_sort_data);
+      GtkDestroyNotify d = tree_store->default_sort_destroy;
+
       tree_store->default_sort_destroy = NULL;
+      d (tree_store->default_sort_data);
       tree_store->default_sort_data = NULL;
     }
 
@@ -2195,12 +2197,16 @@ gtk_tree_store_set_sort_func (GtkTreeSortable        *sortable,
     }
 
   if (header->destroy)
-    (* header->destroy) (header->data);
+    {
+      GtkDestroyNotify d = header->destroy;
+
+      header->destroy = NULL;
+      d (header->data);
+    }
 
   header->func = func;
   header->data = data;
   header->destroy = destroy;
-
 }
 
 static void
@@ -2214,7 +2220,12 @@ gtk_tree_store_set_default_sort_func (GtkTreeSortable        *sortable,
   g_return_if_fail (GTK_IS_TREE_STORE (sortable));
 
   if (tree_store->default_sort_destroy)
-    (* tree_store->default_sort_destroy) (tree_store->default_sort_data);
+    {
+      GtkDestroyNotify d = tree_store->default_sort_destroy;
+
+      tree_store->default_sort_destroy = NULL;
+      d (tree_store->default_sort_data);
+    }
 
   tree_store->default_sort_func = func;
   tree_store->default_sort_data = data;
index fb6d453a98b58c6ee084ebccaed8123de25b4544..49cc8b9db5476e41913e795c7fe51e0452a60eb6 100644 (file)
@@ -329,8 +329,14 @@ gtk_tree_view_column_finalize (GObject *object)
   for (list = tree_column->cell_list; list; list = list->next)
     {
       GtkTreeViewColumnCellInfo *info = (GtkTreeViewColumnCellInfo *) list->data;
-      if (info->func_data && info->destroy)
-       (info->destroy) (info->func_data);
+
+      if (info->destroy)
+       {
+         GtkDestroyNotify d = info->destroy;
+
+         info->destroy = NULL;
+         d (info->func_data);
+       }
       gtk_tree_view_column_clear_attributes (tree_column, info->cell);
       g_object_unref (G_OBJECT (info->cell));
       g_free (info);
@@ -1333,13 +1339,13 @@ gtk_tree_view_column_set_cell_data_func (GtkTreeViewColumn   *tree_column,
 
   g_return_if_fail (info != NULL);
 
-  if (func == info->func &&
-      func_data == info->func_data &&
-      destroy == info->destroy)
-    return;
+  if (info->destroy)
+    {
+      GtkDestroyNotify d = info->destroy;
 
-  if (info->func_data && info->destroy)
-    (info->destroy) (info->func_data);
+      info->destroy = NULL;
+      d (info->func_data);
+    }
 
   info->func = func;
   info->func_data = func_data;