com gtk/php-gtk: Implement GtkTreeModel::foreach(): TODO2 ext/gtk+/gtktreeview.overrides
[email protected] (David Soria Parra) Sat, 01 Oct 2005 21:29:28 +0000
| Newsgroups | php.gtk.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: 28dcb5bda4b38797e2c6dd1d9411546d87312dd3=0AAuthor: Andrei Zmi= evski <[email protected]> Sat, 1 Oct 2005 21:29:28 +0000=0AParents: = 4446e13c0bfc2649741ca43c1ae996c164c6451c=0ABranches: master=0A=0ALink: = http://git.php.net/?p=3Dgtk/php-gtk.git;a=3Dcommitdiff;h=3D28dcb5bda4b38= 797e2c6dd1d9411546d87312dd3=0A=0ALog:=0AImplement GtkTreeModel::foreach()= =0A=0AChanged paths:=0A M TODO2=0A M ext/gtk+/gtktreeview.overrides=0A= =0A=0ADiff:=0A28dcb5bda4b38797e2c6dd1d9411546d87312dd3=0Adiff --git a/TODO2= b/TODO2=0Aindex 61069c6..c41304e 100644=0A--- a/TODO2=0A+++ b/TODO2=0A@@ -= 26,7 +26,6 @@ Classes and Functions=0A =09implement property access (read/w= rite)=0A * GtkListStore=0A * GtkTreeModel=0A-=09* foreach()=0A * GtkTreeSto= re=0A =09Some iterator functions as get_iter() are expecting a GBoxed param= eter.=0A * GtkTreeView=0Adiff --git a/ext/gtk+/gtktreeview.overrides b/ext/= gtk+/gtktreeview.overrides=0Aindex c78fd79..4ac6914 100644=0A--- a/ext/gtk+= /gtktreeview.overrides=0A+++ b/ext/gtk+/gtktreeview.overrides=0A@@ -464,6 += 464,76 @@ PHP_METHOD=0A }=0A }=0A =0A+%%=0A+override gtk_tree_model_for= each=0A+=0A+gboolean phpg_tree_model_foreach_marshal(GtkTreeModel *model,= =0A+ GtkTreePath *path,=0A+ = GtkTreeIter *iter,=0A+ = gpointer data)=0A+{=0A+ phpg_cb_data_t *cbd = =3D (phpg_cb_data_t *) data;=0A+ zval *retval =3D NULL;=0A+ zval ***a= rgs =3D NULL;=0A+ int n_args =3D 0;=0A+ char *callback_name;=0A+ z= val *php_model =3D NULL, *php_path =3D NULL, *php_iter =3D NULL;=0A+ gbo= olean ret;=0A+ TSRMLS_FETCH();=0A+=0A+ if (!zend_is_callable(cbd->cal= lback, 0, &callback_name)) {=0A+ php_error(E_WARNING, "Unable to inv= oke callback '%s' specified in %s on line %ld", callback_name, cbd->src_fil= ename, cbd->src_lineno);=0A+ efree(callback_name);=0A+ return= TRUE;=0A+ }=0A+=0A+ phpg_gobject_new(&php_model, (GObject*)mod= el TSRMLS_CC);=0A+ phpg_tree_path_to_zval(path, &php_path TSRMLS_C= C);=0A+ phpg_gboxed_new(&php_iter, GTK_TYPE_TREE_ITER, iter, TRUE, TRUE = TSRMLS_CC);=0A+=0A+ args =3D php_gtk_hash_as_array_offset(cbd->user_args= , 3, &n_args);=0A+ args[0] =3D &php_model;=0A+ args[1] =3D &php_path;= =0A+ args[2] =3D &php_iter;=0A+=0A+ call_user_function_ex(EG(function= _table), NULL, cbd->callback, &retval, n_args, args, 0, NULL TSRMLS_CC);=0A= +=0A+ zval_ptr_dtor(&php_model);=0A+ zval_ptr_dtor(&php_path);=0A+ = zval_ptr_dtor(&php_iter);=0A+=0A+ if (retval) {=0A+ ret =3D zend= _is_true(retval);=0A+ zval_ptr_dtor(&retval);=0A+ } else {=0A+ = ret =3D TRUE;=0A+ }=0A+=0A+ efree(callback_name);=0A+ efree(a= rgs);=0A+=0A+ return ret;=0A+}=0A+=0A+PHP_METHOD=0A+{=0A+ zval *callb= ack, *extra;=0A+ phpg_cb_data_t *cb_data;=0A+=0A+ NOT_STATIC_METHOD()= ;=0A+=0A+ if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), 1, &extra, "V", &c= allback)) {=0A+ return;=0A+ }=0A+=0A+ zval_add_ref(&callback);= =0A+ cb_data =3D phpg_cb_data_new(callback, extra TSRMLS_CC);=0A+=0A+ = gtk_tree_model_foreach(GTK_TREE_MODEL(PHPG_GOBJECT(this_ptr)),=0A+ = phpg_tree_model_foreach_marshal, cb_data);=0A+ phpg_c= b_data_destroy(cb_data);=0A+}=0A+=0A %% }}}=0A =0A %% {{{ GtkTreeSelection= =0A