]> git.draconx.ca Git - gob-dx.git/blobdiff - src/main.c
Release 2.0.5
[gob-dx.git] / src / main.c
index f74f89775a288a562e9010673149822c16b7e069..6f5bf2cb5e2368b43726f4f7edcbcd50d704df95 100644 (file)
@@ -2607,6 +2607,25 @@ put_signal_args (Method *m)
        }
 }
 
+static void
+clear_signal_args (Method *m)
+{
+       GList *li;
+       int i;
+
+       out_printf (out, "\n\tg_value_unset (&___param_values[0]);\n");
+
+       if (m->args->next == NULL)
+               return;
+
+       for (li = m->args->next, i = 1;
+            li != NULL;
+            li = li->next, i++) {
+               out_printf (out,
+                           "\tg_value_unset (&___param_values[%d]);\n", i);
+       }
+}
+
 static char *
 get_arg_names_for_macro (Method *m)
 {
@@ -2729,22 +2748,39 @@ put_method(Method *m)
 
                g_free (s);
 
+               clear_signal_args (m);
+
                if (strcmp (m->gtktypes->data, "NONE") != 0) {
                        char *cast = g_strdup (get_cast (m->gtktypes->data, FALSE));
                        char *getfunc;
+                       /* Hack because glib is very very braindead */
+                       gboolean do_dup = 
+                               (strcmp ((char *)m->gtktypes->data, "STRING") == 0 ||
+                                strcmp ((char *)m->gtktypes->data, "BOXED") == 0 ||
+                                strcmp ((char *)m->gtktypes->data, "OBJECT") == 0 ||
+                                strcmp ((char *)m->gtktypes->data, "PARAM") == 0);
 
                        if (strcmp (m->gtktypes->data, "UNICHAR") == 0)
                                /* hack because glib is braindamaged */
                                getfunc = g_strdup ("g_value_get_uint");
                        else
-                               getfunc = g_strdup_printf ("g_value_get_%s",
+                               getfunc = g_strdup_printf ("g_value_%s_%s",
+                                                          do_dup ? "dup" : "get",
                                                           (char *)m->gtktypes->data);
                        g_strdown (getfunc);
 
                        if (cast == NULL)
                                cast = get_type (m->mtype, TRUE);
 
-                       out_printf (out, "\n\treturn (%s) %s (&___return_val);\n",
+                       out_printf (out,
+                                   "\n\t{\n"
+                                   "\t\t");
+                       print_type (out, m->mtype, TRUE);
+                       out_printf (out,
+                                   " ___ret = (%s) %s (&___return_val);\n"
+                                   "\t\tg_value_unset (&___return_val);\n"
+                                   "\t\treturn ___ret;\n"
+                                   "\t}\n",
                                    cast, getfunc);
 
                        g_free (cast);