com gtk/php-gtk: Support signal_autoconnect() call fr om within a PHP class: ext/libglade/libglade.over rides

[email protected] (David Soria Parra) Tue, 25 Oct 2005 01:03:10 +0000
Newsgroups php.gtk.cvs
Message-ID <[email protected]>
Commit:    0bdd12e964a45b6c4090caa6559d197ea764faa7
Author:    Steph Fox <[email protected]>         Tue, 25 Oct 2005 01:03:10 +0000
Parents:   0c67a9b9d975d7270f9c43373936087c3f8c26fc
Branches:  master

Link:       http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=0bdd12e964a45b6c4090caa6559d197ea764faa7

Log:
Support signal_autoconnect() call from within a PHP class

Changed paths:
  M  ext/libglade/libglade.overrides


Diff:
0bdd12e964a45b6c4090caa6559d197ea764faa7
diff --git a/ext/libglade/libglade.overrides b/ext/libglade/libglade.overrides
index 6164260..4f37a7d 100644
--- a/ext/libglade/libglade.overrides
+++ b/ext/libglade/libglade.overrides
@@ -36,6 +36,7 @@ PHP_METHOD
     }
 
     wrapped_obj = (GObject *) glade_xml_new(fname, (const char *)root, (const char *)domain);
+
     if (free_fname) g_free(fname);
     if (free_root) g_free(root);
     if (free_domain) g_free(domain);
@@ -43,6 +44,7 @@ PHP_METHOD
     if (!wrapped_obj) {
         PHPG_THROW_CONSTRUCT_EXCEPTION(GladeXML);
     }
+
     phpg_gobject_set_wrapper(this_ptr, wrapped_obj TSRMLS_CC);
 }
 
@@ -144,11 +146,22 @@ static void glade_auto_signal_marshal(const gchar *handler_name, GObject *object
     zval *callback = NULL, *hash = NULL, ***args = NULL;
     zval *php_object = NULL, *php_connect_object = NULL;
     GClosure *closure = NULL;
-    int handler_id, n_args = 0;
+    int handler_id, n_args = 0, len = 0;
+    char *php_class = NULL, *php_method = NULL;
     TSRMLS_FETCH();
 
     MAKE_STD_ZVAL(callback);
-    ZVAL_STRING(callback, (char *)handler_name, 1);
+    if (strstr(handler_name, "::")) {
+        len = strcspn(handler_name, ":");
+        php_class = safe_estrndup(handler_name, len);
+        php_method = strstr(handler_name, "::") + 2;
+        array_init(callback);
+        add_next_index_string(callback, php_class, 1);
+        add_next_index_string(callback, php_method, 1);
+        efree(php_class);
+    } else {
+        ZVAL_STRING(callback, (char *)handler_name, 1);
+    }
 
     if (!zend_is_callable(callback, 0, NULL)) {
         php_error(E_WARNING, "%s() is unable to autoconnect callback for handler '%s'",