Dirty hack for 5.3 and Gobject::register_type

[email protected] (Elizabeth M Smith)
Newsgroups php.gtk.dev
Message-ID <[email protected]>
I've been working with php-gtk on 5.3, compiles fine and runs fine
except for one small issue.

In 5.3 a class in a namespace has colons in the full name - gobject's
register type does not allow colons in a name when you register the type

Attached is a small dirty hack to fix that - it copies the class's name,
replaces colons with underscores, and then uses the underscore version
to register the type.

This works fine - only caveat is you can't have a class in namespace
foo::bar::baz AND register a class named foo__bar__baz - I'm fairly
certain that won't be a common problem.

Unless someone has a better idea I'll commit this version.

Thanks,
Elizabeth
5.3-register_type.txt (text/plain, 1003 B)
Index: phpg_gobject.c
===================================================================
RCS file: /repository/php-gtk/main/phpg_gobject.c,v
retrieving revision 1.68
diff -u -r1.68 phpg_gobject.c
--- phpg_gobject.c	29 Feb 2008 19:05:53 -0000	1.68
+++ phpg_gobject.c	26 Jul 2008 02:08:36 -0000
@@ -1352,7 +1352,7 @@
     zend_class_entry *class = gobject_ce;
     GType parent_type, new_type;
     GTypeQuery query;
-    const char *type_name;
+    const char *type_name, *class_name_copy;
     zval **prop_decls, **signal_decls;
 
     GTypeInfo type_info = {
@@ -1379,7 +1379,10 @@
         return;
     }
 
-    type_name = class->name;
+	/* If this is a namespaced class we will have issues, since :: is not allowed, so copy and replace : */
+	class_name_copy = g_strdup(class->name);
+	type_name = g_strdelimit(class_name_copy, ":", '_');
+
     if (g_type_from_name(type_name) != 0) {
         php_error_docref(NULL TSRMLS_CC, E_WARNING, "type '%s' already exists?", type_name);
         return;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.