static int unreftors = 0; /* number of variable unreffing destructors */
static int destructors = 0; /* number of variable non-unreffing destructors */
static int initializers = 0; /* number of variable initializers */
+static int glade_widgets = 0; /* number of glade widgets */
static gboolean overrode_get_type = FALSE; /* provided your won _get_type */
static gboolean made_aliases = FALSE; /* if we made any shorthand aliases
gboolean no_lines = FALSE;
gboolean no_self_alias = FALSE;
gboolean always_private_struct = FALSE;
+gint prealloc = 0;
gboolean use_m4 = FALSE; /* preprocess sources with m4 */
gboolean use_m4_clean = FALSE; /* preprocess sources with m4, no m4 flags */
"\t\t\t(GClassFinalizeFunc) NULL,\n"
"\t\t\tNULL /* class_data */,\n"
"\t\t\tsizeof (%s),\n"
- "\t\t\t0 /* n_preallocs */,\n"
+ "\t\t\t%d /* n_preallocs */,\n"
"\t\t\t(GInstanceInitFunc) %s_init,\n"
"\t\t\tNULL\n"
"\t\t};\n\n",
- funcbase, typebase, funcbase, typebase, funcbase);
+ funcbase, typebase, funcbase, typebase, prealloc, funcbase);
add_interface_infos ();
char *argflags[] = {
"CONSTRUCT",
"CONSTRUCT_ONLY",
- "CHILD_ARG",
- "MASK",
+ "LAX_VALIDATION",
+ "PRIVATE",
NULL
};
if(strcmp(argflags[i], flag)==0)
break;
}
- /* if we haven't found it in our list */
- if( ! argflags[i]) {
- error_printf(GOB_WARN, a->line_no,
- "Unknown flag '%s' used, "
- "perhaps it was misspelled", flag);
- }
- g_string_sprintfa(flags, " | G_PARAM_%s", flag);
+ g_string_sprintfa(flags, " | %s%s", argflags[i] ? "G_PARAM_" : "", flag);
}
g_string_append (flags, ")");
char *argflags[] = {
"CONSTRUCT",
"CONSTRUCT_ONLY",
- "CHILD_ARG",
- "MASK",
+ "LAX_VALIDATION",
+ "PRIVATE",
NULL
};
if(strcmp(argflags[i], flag)==0)
break;
}
- /* if we haven't found it in our list */
- if( ! argflags[i]) {
- error_printf(GOB_WARN, p->line_no,
- "Unknown flag '%s' used, "
- "perhaps it was misspelled", flag);
- }
- g_string_sprintfa(flags, " | G_PARAM_%s", flag);
+ g_string_sprintfa(flags, " | %s%s", argflags[i] ? "G_PARAM_" : "", flag);
}
g_string_append (flags, ")");
if(v->initializer_line > 0)
out_addline_infile(out, v->initializer_line);
- out_printf(out, "\t%s->%s = %s;\n",
+ if (v->initializer_simple)
+ out_printf(out, "\t%s->%s = %s;\n",
root, v->id, v->initializer);
+ else
+ out_printf(out,v->initializer);
if(v->initializer_line > 0)
out_addline_outfile(out);
g_free(root);
}
+static void
+print_glade_widget(Method *m, Variable *v)
+{
+ char *root;
+ char *cast;
+
+ if(!v->glade_widget)
+ return;
+
+ if(v->scope == PRIVATE_SCOPE)
+ root = g_strconcat(((FuncArg *)m->args->data)->name,
+ "->_priv", NULL);
+ else
+ root = g_strdup(((FuncArg *)m->args->data)->name);
+
+ cast = get_type(v->vtype, FALSE);
+ out_printf(out, "\t%s->%s = (%s)glade_xml_get_widget(%s->_glade_xml, \"%s\");\n",
+ root, v->id, cast, root, v->id);
+
+ g_free(root);
+}
+
static void
print_destructor (Variable *v)
{
c->otype);
if (privates > 0) {
out_printf(out, "\t%s->_priv = "
- "G_TYPE_INSTANCE_GET_PRIVATE(%s,TYPE_SELF,%sPrivate);\n",
+ "G_TYPE_INSTANCE_GET_PRIVATE(%s,%s,%sPrivate);\n",
((FuncArg *)m->args->data)->name,
((FuncArg *)m->args->data)->name,
+ macrotype,
typebase);
} else if(always_private_struct) {
out_printf(out, "\t%s->_priv = NULL;\n",
print_initializer(m, v);
}
}
+ if(glade_widgets > 0) {
+ GList *li;
+ for(li = ((Class *)class)->nodes;
+ li != NULL;
+ li = li->next) {
+ Node *n = li->data;
+ Variable *v = (Variable *)n;
+ if(n->type != VARIABLE_NODE ||
+ v->scope == CLASS_SCOPE)
+ continue;
+ print_glade_widget(m, v);
+ }
+ }
} else if(m->method == CLASS_INIT_METHOD) {
gboolean did_base_obj = FALSE;
char *s;
gboolean printed_private = FALSE;
+ if (c->glade_xml)
+ {
+ out_printf(outph ? outph : outh, "#include <gtk/gtk.h>\n");
+ out_printf(outph ? outph : outh, "#include <glade/glade-xml.h>\n\n");
+ }
+
if(any_special) {
out_printf(out, "/* utility types we may need */\n");
if(special_array[SPECIAL_2POINTER])
out_printf (outfp, "struct _%sPrivate {\n",
typebase);
- for(li=c->nodes; li; li=li->next) {
- Node *n = li->data;
- Variable *v = (Variable *)n;
- if(n->type == VARIABLE_NODE &&
- v->scope == PRIVATE_SCOPE) {
- out_addline_infile(outfp, v->line_no);
- put_variable(v, outfp);
+ if (privates > 0)
+ {
+ for(li=c->nodes; li; li=li->next) {
+ Node *n = li->data;
+ Variable *v = (Variable *)n;
+ if(n->type == VARIABLE_NODE &&
+ v->scope == PRIVATE_SCOPE) {
+ out_addline_infile(outfp, v->line_no);
+ put_variable(v, outfp);
+ }
}
+ out_addline_outfile(outfp);
}
- out_addline_outfile(outfp);
out_printf(outfp, "};\n");
}
no_gnu ? "" : " G_GNUC_UNUSED",
typebase, typebase, typebase, funcbase);
+ if (c->glade_xml)
+ {
+ out_printf (out, "/* a function to connect glade callback */\n");
+ out_printf (out,"static void\n"
+ "___glade_xml_connect_foreach(const gchar *handler_name,\n"
+ "GObject *object,\n"
+ "const gchar *signal_name,\n"
+ "const gchar *signal_data,\n"
+ "GObject *connect_object,\n"
+ "gboolean after,\n"
+ "gpointer user_data)\n"
+ "{\n"
+ "\tstatic GModule * allsymbols = NULL;\n"
+ " \n"
+ "\tif (!allsymbols) allsymbols = g_module_open(NULL, 0);\n"
+ "\tif (allsymbols) {\n"
+ "\t\tgchar * func_name = g_strdup_printf(\"%s_%%s\", handler_name);\n"
+ "\t\tGCallback func;\n"
+ "\n"
+ "\t\tif (!g_module_symbol(allsymbols, func_name, (gpointer)&func)){\n"
+ "\t\t\tif (!g_module_symbol(allsymbols, handler_name, (gpointer)&func)) {\n"
+ "\t\t\t\tg_warning(\"could not find signal handler '%%s'.\", func_name);\n"
+ "\t\t\t\tg_free(func_name);\n"
+ "\t\t\t\treturn;\n"
+ "\t\t\t}\n"
+ "\t\t}\n"
+ "\t\tif (after)\n"
+ "\t\t\tg_signal_connect_data(object, signal_name, func, user_data, NULL, G_CONNECT_AFTER | G_CONNECT_SWAPPED);\n"
+ "\t\telse\n"
+ "\t\t\tg_signal_connect_data(object, signal_name, func, user_data, NULL, G_CONNECT_SWAPPED);\n"
+ "\t\tg_free(func_name);\n"
+ "\t}\n"
+ "}\n"
+ "\n",
+ funcbase);
+ }
+
if (need_dispose)
add_dispose (c);
unreftors = count_unreftors ((Class *)class);
destructors = count_destructors ((Class *)class);
initializers = count_initializers ((Class *)class);
+ glade_widgets = count_glade_widgets ((Class *)class);
overrode_get_type = find_get_type ((Class *)class);
make_bases ();