X-Git-Url: https://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/ada81cd69cc17de9e0f15214782c8067436c5354..refs/tags/v2.0.6:/src/main.c diff --git a/src/main.c b/src/main.c index f74f897..6f5bf2c 100644 --- a/src/main.c +++ b/src/main.c @@ -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);