com gtk/php-gtk: Implement gtk::idle_add() and gt k::idle_add_priority().: ext/gtk+/gtk.overr ides
[email protected] (David Soria Parra) Sat, 10 Dec 2005 21:20:57 +0000
| Newsgroups | php.gtk.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: 2bfb01bd89ee1203617e7abb629cc9caaab8ad19 Author: Andrei Zmievski <[email protected]> Sat, 10 Dec 2005 21:20:57 +0000 Parents: 625ce47341ba4799b764257c8bc2947503e0e9e2 Branches: master Link: http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=2bfb01bd89ee1203617e7abb629cc9caaab8ad19 Log: Implement gtk::idle_add() and gtk::idle_add_priority(). Changed paths: M ext/gtk+/gtk.overrides Diff: 2bfb01bd89ee1203617e7abb629cc9caaab8ad19 diff --git a/ext/gtk+/gtk.overrides b/ext/gtk+/gtk.overrides index 867588e..aa91314 100644 --- a/ext/gtk+/gtk.overrides +++ b/ext/gtk+/gtk.overrides @@ -287,6 +287,55 @@ PHP_METHOD } %% +override gtk_idle_add + +static void phpg_gtk_idle_add_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool with_priority) +{ + gint priority = G_PRIORITY_DEFAULT; + zval *callback = NULL; + zval *extra = NULL; + zval *data = NULL; + char *callback_filename; + uint callback_lineno; + guint handler_id; + int req_args = with_priority ? 2 : 1; + + if (ZEND_NUM_ARGS() < req_args) { + php_error(E_WARNING, "%s::%s() requires at least %d arguments, %d given", + get_active_class_name(NULL TSRMLS_CC), + get_active_function_name(TSRMLS_C), req_args, ZEND_NUM_ARGS()); + return; + } + + if (with_priority) { + if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), req_args, &extra, "iV", &priority, &callback)) + return; + } else { + if (!php_gtk_parse_varargs(ZEND_NUM_ARGS(), req_args, &extra, "V", &callback)) + return; + } + + callback_filename = zend_get_executed_filename(TSRMLS_C); + callback_lineno = zend_get_executed_lineno(TSRMLS_C); + php_gtk_build_value(&data, "(VNsi)", callback, extra, callback_filename, callback_lineno); + + handler_id = g_idle_add_full(priority, phpg_handler_marshal, data, phpg_destroy_notify); + RETURN_LONG(handler_id); +} + +PHP_METHOD +{ + phpg_gtk_idle_add_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); +} + +%% +override gtk_idle_add_priority +PHP_METHOD +{ + phpg_gtk_idle_add_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); +} + +%% add Gtk get_version PHP_METHOD {