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'",