vala r1496 - in trunk: . gobject
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r1496 - in trunk: . gobject
- Date: Fri, 30 May 2008 14:29:39 +0000 (UTC)
Author: juergbi
Date: Fri May 30 14:29:39 2008
New Revision: 1496
URL: http://svn.gnome.org/viewvc/vala?rev=1496&view=rev
Log:
2008-05-30 Juerg Billeter <j bitron ch>
* gobject/valaccodedynamicsignalbinding.vala:
Add support for dynamic signals of GObjects
Modified:
trunk/ChangeLog
trunk/gobject/valaccodedynamicsignalbinding.vala
Modified: trunk/gobject/valaccodedynamicsignalbinding.vala
==============================================================================
--- trunk/gobject/valaccodedynamicsignalbinding.vala (original)
+++ trunk/gobject/valaccodedynamicsignalbinding.vala Fri May 30 14:29:39 2008
@@ -59,7 +59,9 @@
func.add_parameter (new CCodeFormalParameter ("handler", "GCallback"));
func.add_parameter (new CCodeFormalParameter ("data", "gpointer"));
var block = new CCodeBlock ();
- if (dynamic_signal.dynamic_type.data_type == codegen.dbus_object_type) {
+ if (dynamic_signal.dynamic_type.data_type == codegen.gobject_type) {
+ generate_gobject_connect_wrapper (block);
+ } else if (dynamic_signal.dynamic_type.data_type == codegen.dbus_object_type) {
generate_dbus_connect_wrapper (block);
} else {
Report.error (node.source_reference, "dynamic signals are not supported for `%s'".printf (dynamic_signal.dynamic_type.to_string ()));
@@ -102,6 +104,31 @@
return disconnect_wrapper_name;
}
+ void generate_gobject_connect_wrapper (CCodeBlock block) {
+ var dynamic_signal = (DynamicSignal) node;
+
+ var m = (Method) dynamic_signal.handler.symbol_reference;
+
+ node.accept (codegen);
+
+ string connect_func = "g_signal_connect_object";
+ if (m.binding != MemberBinding.INSTANCE) {
+ connect_func = "g_signal_connect";
+ }
+
+ var call = new CCodeFunctionCall (new CCodeIdentifier (connect_func));
+ call.add_argument (new CCodeIdentifier ("obj"));
+ call.add_argument (new CCodeIdentifier ("signal_name"));
+ call.add_argument (new CCodeIdentifier ("handler"));
+ call.add_argument (new CCodeIdentifier ("data"));
+
+ if (m.binding == MemberBinding.INSTANCE) {
+ call.add_argument (new CCodeConstant ("0"));
+ }
+
+ block.add_statement (new CCodeExpressionStatement (call));
+ }
+
void generate_dbus_connect_wrapper (CCodeBlock block) {
var dynamic_signal = (DynamicSignal) node;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]