don't mangle D-Bus signal names, fixes bug 528774
authorJuerg Billeter <j@bitron.ch>
Sat, 19 Apr 2008 14:46:00 +0000 (14:46 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sat, 19 Apr 2008 14:46:00 +0000 (14:46 +0000)
2008-04-19  Juerg Billeter  <j@bitron.ch>

* vala/valasemanticanalyzer.vala, vala/valasignal.vala,
  gobject/valaccodeassignmentbinding.vala: don't mangle D-Bus
  signal names, fixes bug 528774

svn path=/trunk/; revision=1268

ChangeLog
gobject/valaccodeassignmentbinding.vala
vala/valasemanticanalyzer.vala
vala/valasignal.vala

index 4f78569..937d842 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2008-04-19  Jürg Billeter  <j@bitron.ch>
 
+       * vala/valasemanticanalyzer.vala, vala/valasignal.vala,
+         gobject/valaccodeassignmentbinding.vala: don't mangle D-Bus
+         signal names, fixes bug 528774
+
+2008-04-19  Jürg Billeter  <j@bitron.ch>
+
        * vala/valasemanticanalyzer.vala, gobject/valaccodegenerator.vala:
          fix crash when trying to iterate over pointer types,
          fixes bug 528765
index ffa3e69..0a4e756 100644 (file)
@@ -136,9 +136,13 @@ public class Vala.CCodeAssignmentBinding : CCodeExpressionBinding {
                        ccall.add_argument (new CCodeIdentifier ("self"));
                }
 
-               if (!disconnect || sig is DBusSignal) {
+               if (sig is DBusSignal) {
+                       // dbus_g_proxy_connect_signal or dbus_g_proxy_disconnect_signal
+
+                       // second argument: signal name
+                       ccall.add_argument (new CCodeConstant ("\"%s\"".printf (sig.name)));
+               } else if (!disconnect) {
                        // g_signal_connect_object or g_signal_connect
-                       // or dbus_g_proxy_connect_signal or dbus_g_proxy_disconnect_signal
 
                        // second argument: signal name
                        ccall.add_argument (sig.get_canonical_cconstant ());
@@ -246,7 +250,7 @@ public class Vala.CCodeAssignmentBinding : CCodeExpressionBinding {
                        } else {
                                add_call.add_argument (new CCodeIdentifier ("self"));
                        }
-                       add_call.add_argument (sig.get_canonical_cconstant ());
+                       add_call.add_argument (new CCodeConstant ("\"%s\"".printf (sig.name)));
 
                        first = true;
                        foreach (FormalParameter param in m.get_parameters ()) {
index 67d2289..be46ddb 100644 (file)
@@ -2934,8 +2934,10 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
 
                        if (ma.symbol_reference is Signal) {
                                var sig = (Signal) ma.symbol_reference;
-
-                               a.right.expected_type = new DelegateType (sig.get_delegate ());
+                               var deleg = sig.get_delegate ();
+                               if (deleg != null) {
+                                       a.right.expected_type = new DelegateType (deleg);
+                               }
                        } else {
                                a.right.expected_type = ma.static_type;
                        }
index de8d8f7..f97b06e 100644 (file)
@@ -90,8 +90,9 @@ public class Vala.Signal : Member, Lockable {
         *
         * @return delegate
         */
-       public Delegate get_delegate () {
-               if (generated_delegate == null) {
+       public Delegate? get_delegate () {
+               // parent_symbol is null for D-Bus signals
+               if (generated_delegate == null && parent_symbol != null) {
                        generated_delegate = new Delegate (null, return_type);
                        generated_delegate.instance = true;