}
}
+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)
{
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);