static gboolean special_array[SPECIAL_LAST] = {0};
static gboolean any_special = FALSE;
-static gboolean need_shutdown = FALSE;
-static Method * shutdown_handler = NULL;
+static gboolean need_dispose = FALSE;
+static Method * dispose_handler = NULL;
static gboolean need_finalize = FALSE;
static Method * finalize_handler = NULL;
ptypebase = remove_sep (((Class *)class)->ptype);
}
-static char *
-get_type (const Type *t, gboolean postfix_to_stars)
-{
- char *s;
- int i;
- int extra;
- GString *gs;
-
- s = remove_sep(t->name);
- gs = g_string_new(s);
- g_free(s);
-
- extra = 0;
- if (postfix_to_stars) {
- const char *p;
- /*XXX: this is ugly perhaps we can do this whole postfix thing
- in a nicer way, we just count the number of '[' s and from
- that we deduce the number of dimensions, so that we can print
- that many stars */
- for (p = t->postfix; p && *p; p++)
- if(*p == '[') extra++;
- }
- g_string_append_c(gs, ' ');
-
- if (t->pointer != NULL) {
- g_string_append (gs, t->pointer);
- for (i=0; i < extra; i++)
- g_string_append_c (gs, '*');
- g_string_append_c (gs, ' ');
- }
-
- s = gs->str;
- g_string_free (gs, FALSE);
- return s;
-}
-
static char *
get_gtk_doc (const char *id)
{
}
static void
-find_shutdown(Class *cl)
+find_dispose(Class *cl)
{
GList *li;
- shutdown_handler = NULL;
+ dispose_handler = NULL;
for(li=cl->nodes;li;li=g_list_next(li)) {
Node *n = li->data;
if(n->type == METHOD_NODE) {
Method *m = (Method *)n;
if(m->method == OVERRIDE_METHOD &&
- strcmp(m->id, "shutdown")==0) {
+ strcmp(m->id, "dispose")==0) {
if(strcmp(m->otype, "G:Object") != 0) {
error_print(GOB_ERROR, m->line_no,
- "shutdown method override "
+ "dispose method override "
"of class other then "
"G:Object");
}
if(g_list_length(m->args) != 1) {
error_print(GOB_ERROR, m->line_no,
- "shutdown method override "
+ "dispose method override "
"with more then one "
"parameter");
}
- shutdown_handler = m;
+ dispose_handler = m;
break;
}
}
s = replace_sep (m->otype, '_');
g_strdown (s);
- if (need_shutdown &&
- shutdown_handler != NULL &&
- strcmp (m->id, "shutdown") == 0)
- out_printf (out, "\tg_object_class->shutdown "
- "= ___shutdown;\n");
+ if (need_dispose &&
+ dispose_handler != NULL &&
+ strcmp (m->id, "dispose") == 0)
+ out_printf (out, "\tg_object_class->dispose "
+ "= ___dispose;\n");
else if (need_finalize &&
finalize_handler &&
strcmp(m->id, "finalize") == 0)
#define value_for_print(str, alt) (str != NULL ? str : alt)
+static char *
+make_me_type (const char *type, const char *alt)
+{
+ if (type == NULL)
+ return g_strdup (alt);
+ /* HACK! just in case someone made this
+ * work with 2.0.0 by using the TYPE
+ * macro directly */
+ if ((strstr (type, "_TYPE_") != NULL ||
+ strstr (type, "TYPE_") == type) &&
+ strchr (type, ':') == NULL)
+ return g_strdup (type);
+ return make_pre_macro (type, "TYPE");
+}
+
static void
make_property (Property *p)
{
g_string_append (flags, ")");
- if (strcmp (p->gtktype, "CHAR") == 0)
+ if (strcmp (p->gtktype, "CHAR") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_char\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->maximum, "127"),
value_for_print (p->default_value, "0"),
flags->str);
- else if (strcmp (p->gtktype, "UCHAR") == 0)
+ } else if (strcmp (p->gtktype, "UCHAR") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_uchar\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->maximum, "0xFF"),
value_for_print (p->default_value, "0"),
flags->str);
- else if (strcmp (p->gtktype, "BOOLEAN") == 0)
+ } else if (strcmp (p->gtktype, "BOOLEAN") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_boolean\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->blurb, "NULL"),
value_for_print (p->default_value, "FALSE"),
flags->str);
- else if (strcmp (p->gtktype, "INT") == 0)
+ } else if (strcmp (p->gtktype, "INT") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_int\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->maximum, "G_MAXINT"),
value_for_print (p->default_value, "0"),
flags->str);
- else if (strcmp (p->gtktype, "UINT") == 0)
+ } else if (strcmp (p->gtktype, "UINT") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_uint\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->maximum, "G_MAXUINT"),
value_for_print (p->default_value, "0"),
flags->str);
- else if (strcmp (p->gtktype, "LONG") == 0)
+ } else if (strcmp (p->gtktype, "LONG") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_long\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->maximum, "G_MAXLONG"),
value_for_print (p->default_value, "0"),
flags->str);
- else if (strcmp (p->gtktype, "ULONG") == 0)
+ } else if (strcmp (p->gtktype, "ULONG") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_ulong\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->maximum, "G_MAXULONG"),
value_for_print (p->default_value, "0"),
flags->str);
- else if (strcmp (p->gtktype, "UNICHAR") == 0)
+ } else if (strcmp (p->gtktype, "UNICHAR") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_unichar\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->blurb, "NULL"),
value_for_print (p->default_value, "0"),
flags->str);
- else if (strcmp (p->gtktype, "ENUM") == 0)
+ } else if (strcmp (p->gtktype, "ENUM") == 0) {
+ char *type = make_me_type (p->extra_gtktype,
+ "G_TYPE_ENUM");
out_printf (out, "\tparam_spec = g_param_spec_enum\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
p->name,
value_for_print (p->nick, "NULL"),
value_for_print (p->blurb, "NULL"),
- value_for_print (p->extra_gtktype, "G_TYPE_ENUM"),
+ type,
value_for_print (p->default_value, "0"),
flags->str);
- else if (strcmp (p->gtktype, "FLAGS") == 0)
+ g_free (type);
+ } else if (strcmp (p->gtktype, "FLAGS") == 0) {
+ char *type = make_me_type (p->extra_gtktype,
+ "G_TYPE_FLAGS");
out_printf (out, "\tparam_spec = g_param_spec_flags\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
p->name,
value_for_print (p->nick, "NULL"),
value_for_print (p->blurb, "NULL"),
- value_for_print (p->extra_gtktype, "G_TYPE_FLAGS"),
+ type,
value_for_print (p->default_value, "0"),
flags->str);
- else if (strcmp (p->gtktype, "FLOAT") == 0)
+ g_free (type);
+ } else if (strcmp (p->gtktype, "FLOAT") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_float\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->maximum, "G_MAXFLOAT"),
value_for_print (p->default_value, "0.0"),
flags->str);
- else if (strcmp (p->gtktype, "DOUBLE") == 0)
+ } else if (strcmp (p->gtktype, "DOUBLE") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_double\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->maximum, "G_MAXDOUBLE"),
value_for_print (p->default_value, "0.0"),
flags->str);
- else if (strcmp (p->gtktype, "STRING") == 0)
+ } else if (strcmp (p->gtktype, "STRING") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_string\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->blurb, "NULL"),
value_for_print (p->default_value, "NULL"),
flags->str);
- else if (strcmp (p->gtktype, "PARAM") == 0)
+ } else if (strcmp (p->gtktype, "PARAM") == 0) {
+ char *type = make_me_type (p->extra_gtktype,
+ "G_TYPE_PARAM");
out_printf (out, "\tparam_spec = g_param_spec_param\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
p->name,
value_for_print (p->nick, "NULL"),
value_for_print (p->blurb, "NULL"),
- value_for_print (p->extra_gtktype, "G_TYPE_PARAM"),
+ type,
flags->str);
- else if (strcmp (p->gtktype, "BOXED") == 0)
+ g_free (type);
+ } else if (strcmp (p->gtktype, "BOXED") == 0) {
+ char *type = make_me_type (p->extra_gtktype,
+ "G_TYPE_BOXED");
out_printf (out, "\tparam_spec = g_param_spec_boxed\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
p->name,
value_for_print (p->nick, "NULL"),
value_for_print (p->blurb, "NULL"),
- value_for_print (p->extra_gtktype, "G_TYPE_BOXED"),
+ type,
flags->str);
- else if (strcmp (p->gtktype, "POINTER") == 0)
+ g_free (type);
+ } else if (strcmp (p->gtktype, "POINTER") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_pointer\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->blurb, "NULL"),
flags->str);
/* FIXME: VALUE_ARRAY */
- else if (strcmp (p->gtktype, "CLOSURE") == 0)
+ } else if (strcmp (p->gtktype, "CLOSURE") == 0) {
out_printf (out, "\tparam_spec = g_param_spec_pointer\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
value_for_print (p->nick, "NULL"),
value_for_print (p->blurb, "NULL"),
flags->str);
- else if (strcmp (p->gtktype, "OBJECT") == 0)
+ } else if (strcmp (p->gtktype, "OBJECT") == 0) {
+ char *type = make_me_type (p->extra_gtktype,
+ "G_TYPE_BOXED");
out_printf (out, "\tparam_spec = g_param_spec_object\n"
"\t\t(\"%s\" /* name */,\n"
"\t\t %s /* nick */,\n"
p->name,
value_for_print (p->nick, "NULL"),
value_for_print (p->blurb, "NULL"),
- value_for_print (p->extra_gtktype, "G_TYPE_OBJECT"),
+ type,
flags->str);
- else
+ g_free (type);
+ } else {
error_printf (GOB_ERROR, p->line_no,
"%s type is not supported by properties",
p->gtktype);
+ }
s = g_strdup (p->name);
g_strup (s);
}
static void
-add_shutdown (Class *c)
+add_dispose (Class *c)
{
out_printf(out, "\nstatic void\n"
- "___shutdown (GObject *obj_self)\n"
+ "___dispose (GObject *obj_self)\n"
"{\n");
out_printf(out,
- "#define __GOB_FUNCTION__ \"%s::shutdown\"\n",
+ "#define __GOB_FUNCTION__ \"%s::dispose\"\n",
c->otype);
if (unreftors > 0) {
typebase, macrobase);
}
- if (shutdown_handler != NULL) {
+ if (dispose_handler != NULL) {
/* so we get possible bad argument warning */
- if (shutdown_handler->line_no > 0)
- out_addline_infile (out, shutdown_handler->line_no);
- out_printf (out, "\t___%x_%s_shutdown(obj_self);\n",
- (guint)shutdown_handler->unique_id, funcbase);
- if (shutdown_handler->line_no > 0)
+ if (dispose_handler->line_no > 0)
+ out_addline_infile (out, dispose_handler->line_no);
+ out_printf (out, "\t___%x_%s_dispose(obj_self);\n",
+ (guint)dispose_handler->unique_id, funcbase);
+ if (dispose_handler->line_no > 0)
out_addline_outfile (out);
} else {
out_printf (out,
- "\tif (G_OBJECT_CLASS (parent_class)->shutdown) \\\n"
- "\t\t(* G_OBJECT_CLASS (parent_class)->shutdown) (obj_self);\n");
+ "\tif (G_OBJECT_CLASS (parent_class)->dispose) \\\n"
+ "\t\t(* G_OBJECT_CLASS (parent_class)->dispose) (obj_self);\n");
}
if (unreftors > 0) {
if (set_properties > 0 ||
get_properties > 0 ||
signals > 0 ||
- need_shutdown ||
+ need_dispose ||
need_finalize) {
out_printf(out,
"\tGObjectClass *"
/* if there are no handlers for these things, we
* need to set them up here */
- if(need_shutdown && !shutdown_handler)
- out_printf(out, "\tg_object_class->shutdown "
- "= ___shutdown;\n");
+ if(need_dispose && !dispose_handler)
+ out_printf(out, "\tg_object_class->dispose "
+ "= ___dispose;\n");
if(need_finalize && !finalize_handler)
out_printf(out, "\tg_object_class->finalize = "
"___finalize;\n");
no_gnu ? "" : " G_GNUC_UNUSED",
typebase, typebase, typebase, funcbase);
- if (need_shutdown)
- add_shutdown (c);
+ if (need_dispose)
+ add_dispose (c);
if (need_finalize)
add_finalize (c);
make_bases ();
make_inits ((Class *)class);
if(unreftors > 0) {
- need_shutdown = TRUE;
- find_shutdown ((Class *)class);
+ need_dispose = TRUE;
+ find_dispose ((Class *)class);
}
if (destructors > 0 ||
privates > 0) {