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
 {