com gtk/php-gtk: GtkTextTagTable::foreach: ext/gtk+/gtktextview.overrides

[email protected] (David Soria Parra)
Newsgroups php.gtk.cvs
Message-ID <[email protected]>
Commit:    6acb210458c6fbc2ca3b1b47b4ab5679ba6a20de
Author:    Christian Weiske <[email protected]>         Wed, 14 Jun 2006 05:04:05 +0000
Parents:   5090ee49e3d078ea079bdf70b3c4a3436df1b472
Branches:  master

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

Log:
GtkTextTagTable::foreach

Changed paths:
  M  ext/gtk+/gtktextview.overrides


Diff:
6acb210458c6fbc2ca3b1b47b4ab5679ba6a20de
diff --git a/ext/gtk+/gtktextview.overrides b/ext/gtk+/gtktextview.overrides
index e3c3391..d86b5b2 100644
--- a/ext/gtk+/gtktextview.overrides
+++ b/ext/gtk+/gtktextview.overrides
@@ -1,5 +1,10 @@
 /* vim: set ft=cpp fdm=marker et: */
 
+%%
+headers
+
+static void phpg_text_tag_table_foreach_func_marshal (GtkTextTagTable *table, gpointer data);
+
 %% {{{ ignores
 %%
 ignore
@@ -309,6 +314,75 @@ PHP_METHOD
 
 %% }}}
 
+%% {{{ GtkTextTagTable
+
+%%
+add-arginfo GtkTextTagTable foreach
+static
+ZEND_BEGIN_ARG_INFO(ARGINFO_NAME, 0)
+    ZEND_ARG_INFO(0, callback)
+ZEND_END_ARG_INFO();
+
+%%
+override gtk_text_tag_table_foreach
+static void phpg_text_tag_table_foreach_func_marshal(GtkTextTagTable *table, gpointer data)
+{
+    phpg_cb_data_t *cbd = (phpg_cb_data_t *) data;
+    zval *retval = NULL;
+    zval ***args = NULL;
+    int n_args = 0;
+    char *callback_name;
+    zval *php_table = NULL;
+
+    TSRMLS_FETCH();
+
+    if (!zend_is_callable(cbd->callback, 0, &callback_name)) {
+        php_error(E_WARNING, "Unable to invoke callback '%s' specified in %s on line %ld", callback_name, cbd->src_filename, cbd->src_lineno);
+        efree(callback_name);
+        return;
+    }
+
+    phpg_gobject_new(&php_table,       (GObject*)table       TSRMLS_CC);
+
+    args = php_gtk_hash_as_array_offset(cbd->user_args, 1, &n_args);
+    args[0] = &php_table;
+
+    call_user_function_ex(EG(function_table), NULL, cbd->callback, &retval, n_args, args, 0, NULL TSRMLS_CC);
+
+    zval_ptr_dtor(&php_table);
+
+    if (retval) {
+        zval_ptr_dtor(&retval);
+    }
+
+    phpg_handle_marshaller_exception(TSRMLS_C);
+
+    efree(callback_name);
+    efree(args);
+}
+
+PHP_METHOD
+{
+    zval *php_callback, *extra;
+    phpg_cb_data_t *cb_data;
+    GtkTextTagTableForeach callback;
+
+    NOT_STATIC_METHOD();
+
+    if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), 1, &extra, "V", &php_callback))
+        return;
+
+    zval_add_ref(&php_callback);
+    cb_data  = phpg_cb_data_new(php_callback, extra TSRMLS_CC);
+    callback = (GtkTextTagTableForeach)phpg_text_tag_table_foreach_func_marshal;
+
+    gtk_text_tag_table_foreach(GTK_TEXT_TAG_TABLE(PHPG_GOBJECT(this_ptr)), callback, cb_data);
+    phpg_cb_data_destroy(cb_data);
+}
+
+
+%% }}}
+
 %% {{{ GtkTextView
 
 %%
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.