--- src/main.c.orig	Thu Dec  1 16:47:20 2005
+++ src/main.c	Thu Dec  1 16:54:41 2005
@@ -1081,8 +1081,8 @@
 	add_interface_infos ();
 
 	out_printf (out,
-		    "\t\ttype = g_type_register_static (%s, \"%s\", &info, (GTypeFlags)0);\n",
-		    pmacrotype, typebase);
+		    "\t\ttype = g_type_register_static (%s, \"%s\", &info, (GTypeFlags)%s);\n",
+		    pmacrotype, typebase, ((Class *)class)->abstract ? "G_TYPE_FLAG_ABSTRACT" : "0");
 
 	add_interfaces ();
 
--- src/parse.y.orig	Thu Dec  1 16:43:23 2005
+++ src/parse.y	Thu Dec  1 16:45:49 2005
@@ -44,6 +44,7 @@
 static GList *flag_vals = NULL;
 static GList *error_vals = NULL;
 
+static gboolean abstract = FALSE;
 static char *chunk_size = NULL;
 static char *bonobo_object_class = NULL;
 static int glade_xml = FALSE;
@@ -778,6 +779,7 @@
 					  "glade_xml", glade_xml,
 					  "interfaces:steal", interfaces,
 					  "chunk_size:steal", chunk_size,
+					  "abstract", abstract,
 					  NULL);
 			bonobo_object_class = NULL;
 			glade_xml = FALSE;
@@ -787,6 +789,14 @@
 	;
 
 classflags:
+	| '(' TOKEN ')' classflags {
+			if(strcmp($<id>2,"abstract") == 0) {
+				abstract = TRUE;
+			} else {
+				yyerror(_("parse error"));
+				YYERROR;
+			}
+		}
 	| '(' TOKEN TOKEN ')' classflags {
 			if(strcmp($<id>2,"chunks") == 0) {
 				g_free (chunk_size);
--- src/treefuncs.def.orig	Thu Dec  1 16:46:14 2005
+++ src/treefuncs.def	Thu Dec  1 16:47:08 2005
@@ -56,6 +56,7 @@
   STRING	chunk_size # if the object should be allocated with mem_chunks
   STRINGLIST	interfaces # GObject interfaces this class exports
   NODELIST	nodes
+  BOOL		abstract # if G_TYPE_FLAG_ABSTRACT should be used
 ENDCLASS
 
 CLASS Type

