com gtk/php-gtk: - Implement connect_simple() - Depre cate connect_object(): main/php_gtk.h main/ph pg_closure.c main/phpg_gobject.c

[email protected] (David Soria Parra) Fri, 14 Oct 2005 04:10:41 +0000
Newsgroups php.gtk.cvs
Message-ID <[email protected]>
Commit:    a5cd6b483c028bd304fb0715fdd2915daa12313f
Author:    Andrei Zmievski <[email protected]>         Fri, 14 Oct 2005 04:10:41 +0000
Parents:   a127cddd7f8279ac37b465440c7c58b366c21c1d
Branches:  master

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

Log:
- Implement connect_simple()
- Deprecate connect_object()

Changed paths:
  M  main/php_gtk.h
  M  main/phpg_closure.c
  M  main/phpg_gobject.c


Diff:
a5cd6b483c028bd304fb0715fdd2915daa12313f
diff --git a/main/php_gtk.h b/main/php_gtk.h
index a6bbce2..5447bc3 100644
--- a/main/php_gtk.h
+++ b/main/php_gtk.h
@@ -134,6 +134,12 @@ typedef struct {
 /* Private structure */
 typedef struct _phpg_closure_t phpg_closure_t;
 
+enum {
+    PHPG_CONNECT_NORMAL,
+    PHPG_CONNECT_SIMPLE,
+    PHPG_CONNECT_OBJECT,
+};
+
 #define PHPG_GET(zobj) \
 	zend_object_store_get_object((zobj) TSRMLS_CC)
 
@@ -451,7 +457,7 @@ void phpg_gpointer_register_self(TSRMLS_D);
 PHP_GTK_API void phpg_gpointer_new(zval **zobj, GType gtype, gpointer pointer TSRMLS_DC);
 
 /* Closures */
-PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, zend_bool use_signal_object TSRMLS_DC);
+PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, int connect_type TSRMLS_DC);
 PHP_GTK_API void phpg_watch_closure(zval *obj, GClosure *closure TSRMLS_DC);
 
 PHP_GTK_API extern PHP_GTK_EXPORT_CE(gtype_ce);
diff --git a/main/phpg_closure.c b/main/phpg_closure.c
index 7f12218..d82b1ef 100644
--- a/main/phpg_closure.c
+++ b/main/phpg_closure.c
@@ -30,7 +30,7 @@ struct _phpg_closure_t {
 	GClosure closure;
 	zval *callback;
 	zval *user_args;
-	zend_bool use_signal_object;
+	int connect_type;
 	char *src_filename;
 	uint src_lineno;
 };
@@ -47,7 +47,7 @@ static void phpg_closure_invalidate(gpointer data, GClosure *closure)
 
     phpg_closure->callback = NULL;
     phpg_closure->user_args = NULL;
-    phpg_closure->use_signal_object = 0;
+    phpg_closure->connect_type = PHPG_CONNECT_NORMAL;
     phpg_closure->src_filename = NULL;
     phpg_closure->src_lineno = 0;
 }
@@ -77,12 +77,17 @@ static void phpg_closure_marshal(GClosure *closure,
 		return;
 	}
 
-	if (!phpg_closure->use_signal_object) {
-        /* skip first parameter */
-        n_param_values--;
-        param_values++;
+    if (phpg_closure->connect_type == PHPG_CONNECT_SIMPLE) {
+        /* we don't use any signal params for simple connections */
+        n_param_values = 0;
+    } else {
+        if (phpg_closure->connect_type == PHPG_CONNECT_OBJECT) {
+            /* skip first parameter */
+            n_param_values--;
+            param_values++;
+        }
+        n_params = n_param_values;
     }
-    n_params = n_param_values;
     
     if (phpg_closure->user_args) {
         n_params += zend_hash_num_elements(Z_ARRVAL_P(phpg_closure->user_args));
@@ -127,7 +132,7 @@ err_marshal:
     efree(params);
 }
 
-PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, zend_bool use_signal_object TSRMLS_DC)
+PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, int connect_type TSRMLS_DC)
 {
     GClosure *closure;
     phpg_closure_t *phpg_closure;
@@ -153,7 +158,7 @@ PHP_GTK_API GClosure* phpg_closure_new(zval *callback, zval *user_args, zend_boo
         phpg_closure->user_args = NULL;
     }
 
-    phpg_closure->use_signal_object = use_signal_object;
+    phpg_closure->connect_type = connect_type;
 
     return closure;
 }
diff --git a/main/phpg_gobject.c b/main/phpg_gobject.c
index e607a79..fd3ab41 100644
--- a/main/phpg_gobject.c
+++ b/main/phpg_gobject.c
@@ -315,7 +315,7 @@ static PHP_METHOD(GObject, __tostring)
 /* }}} */
 
 /* {{{ static phpg_signal_connect_impl() */
-static void phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool use_signal_object, zend_bool after)
+static void phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAMETERS, int connect_type, zend_bool after)
 {
     char *signal = NULL;
     zval *callback;
@@ -337,8 +337,7 @@ static void phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool use
         return;
     }
 
-    //extra = php_gtk_func_args_as_hash(ZEND_NUM_ARGS(), 2, ZEND_NUM_ARGS());
-    closure = phpg_closure_new(callback, extra, use_signal_object TSRMLS_CC);
+    closure = phpg_closure_new(callback, extra, connect_type TSRMLS_CC);
     if (extra) {
         zval_ptr_dtor(&extra);
     }
@@ -350,25 +349,39 @@ static void phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool use
 /* {{{ GObject::connect */
 static PHP_METHOD(GObject, connect)
 {
-	phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, TRUE, FALSE);
+	phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHPG_CONNECT_NORMAL, FALSE);
 }
 /* }}} */
 /* {{{ GObject::connect_after */
 static PHP_METHOD(GObject, connect_after)
 {
-	phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, TRUE, TRUE);
+	phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHPG_CONNECT_NORMAL, TRUE);
+}
+/* }}} */
+/* {{{ GObject::connect_simple */
+static PHP_METHOD(GObject, connect_simple)
+{
+	phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHPG_CONNECT_SIMPLE, FALSE);
+}
+/* }}} */
+/* {{{ GObject::connect_simple_after */
+static PHP_METHOD(GObject, connect_simple_after)
+{
+	phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHPG_CONNECT_SIMPLE, TRUE);
 }
 /* }}} */
 /* {{{ GObject::connect_object */
 static PHP_METHOD(GObject, connect_object)
 {
-	phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, FALSE, FALSE);
+    phpg_warn_deprecated("use connect() or connect_simple()" TSRMLS_CC);
+	phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHPG_CONNECT_OBJECT, FALSE);
 }
 /* }}} */
 /* {{{ GObject::connect_object_after */
 static PHP_METHOD(GObject, connect_object_after)
 {
-	phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, FALSE, TRUE);
+    phpg_warn_deprecated("use connect_after() or connect_simple_after()" TSRMLS_CC);
+	phpg_signal_connect_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHPG_CONNECT_OBJECT, TRUE);
 }
 /* }}} */
 
@@ -683,6 +696,20 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_gobject_connect_after, 0, 0, 2)
 ZEND_END_ARG_INFO();
 
 static
+ZEND_BEGIN_ARG_INFO_EX(arginfo_gobject_connect_simple, 0, 0, 2)
+    ZEND_ARG_INFO(0, signal)
+    ZEND_ARG_INFO(0, callback)
+    ZEND_ARG_INFO(0, userparam)
+ZEND_END_ARG_INFO();
+
+static
+ZEND_BEGIN_ARG_INFO_EX(arginfo_gobject_connect_simple_after, 0, 0, 2)
+    ZEND_ARG_INFO(0, signal)
+    ZEND_ARG_INFO(0, callback)
+    ZEND_ARG_INFO(0, userparam)
+ZEND_END_ARG_INFO();
+
+static
 ZEND_BEGIN_ARG_INFO_EX(arginfo_gobject_connect_object, 0, 0, 2)
     ZEND_ARG_INFO(0, signal)
     ZEND_ARG_INFO(0, callback)
@@ -743,6 +770,8 @@ static zend_function_entry gobject_methods[] = {
     PHP_ME(GObject, connect_after,        arginfo_gobject_connect_after         , ZEND_ACC_PUBLIC)
     PHP_ME(GObject, connect_object,       arginfo_gobject_connect_object        , ZEND_ACC_PUBLIC)
     PHP_ME(GObject, connect_object_after, arginfo_gobject_connect_object_after  , ZEND_ACC_PUBLIC)
+    PHP_ME(GObject, connect_simple,       arginfo_gobject_connect_simple        , ZEND_ACC_PUBLIC)
+    PHP_ME(GObject, connect_simple_after, arginfo_gobject_connect_simple_after  , ZEND_ACC_PUBLIC)
     PHP_ME(GObject, get_property,         arginfo_gobject_get_property          , ZEND_ACC_PUBLIC)
     PHP_ME(GObject, set_property,         arginfo_gobject_set_property          , ZEND_ACC_PUBLIC)
     PHP_ME(GObject, get_data,             arginfo_gobject_get_data              , ZEND_ACC_PUBLIC)