]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Do not use g_signal_connect_object if the target object is not a GObject,
authorJürg Billeter <j@bitron.ch>
Tue, 9 Dec 2008 20:34:11 +0000 (20:34 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Tue, 9 Dec 2008 20:34:11 +0000 (20:34 +0000)
2008-12-09  Jürg Billeter  <j@bitron.ch>

* gobject/valagsignalmodule.vala:

Do not use g_signal_connect_object if the target object is not a
GObject, fixes bug 539614

svn path=/trunk/; revision=2132

ChangeLog
gobject/valagsignalmodule.vala

index 23a1fae084da7c4881188e239930c356156f4010..313fd637167682cc10ef59c80ed234cc6c7493af 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-12-09  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valagsignalmodule.vala:
+
+       Do not use g_signal_connect_object if the target object is not a
+       GObject, fixes bug 539614
+
 2008-12-09  Thijs Vermeir  <thijsvermeir@gmail.com>
 
        * vapi/packages/gdk-pixbuf-2.0/gdk-pixbuf-2.0.metadata:
index 56ab561b1e649fe247aea789dae4dad085a80519..c4fc54b859bb7e1603039a070cf15dc54d9164e3 100644 (file)
@@ -435,6 +435,7 @@ public class Vala.GSignalModule : GObjectModule {
                var sig = (Signal) assignment.left.symbol_reference;
                
                var m = (Method) assignment.right.symbol_reference;
+               var target_type_symbol = m.parent_symbol as TypeSymbol;
 
                string connect_func;
                bool disconnect = false;
@@ -443,8 +444,13 @@ public class Vala.GSignalModule : GObjectModule {
                        if (sig is DynamicSignal) {
                                connect_func = head.get_dynamic_signal_connect_wrapper_name ((DynamicSignal) sig);
                        } else {
-                               connect_func = "g_signal_connect_object";
-                               if (m.binding != MemberBinding.INSTANCE) {
+                               if (m.binding == MemberBinding.INSTANCE) {
+                                       if (target_type_symbol != null && target_type_symbol.is_subtype_of (gobject_type)) {
+                                               connect_func = "g_signal_connect_object";
+                                       } else {
+                                               connect_func = "g_signal_connect";
+                                       }
+                               } else {
                                        connect_func = "g_signal_connect";
                                }
                        }
@@ -553,7 +559,8 @@ public class Vala.GSignalModule : GObjectModule {
                        } else if (assignment.right is LambdaExpression) {
                                ccall.add_argument (new CCodeIdentifier ("self"));
                        }
-                       if (!disconnect && !(sig is DynamicSignal)) {
+                       if (!disconnect && !(sig is DynamicSignal)
+                           && target_type_symbol != null && target_type_symbol.is_subtype_of (gobject_type)) {
                                // g_signal_connect_object
 
                                // fifth argument: connect_flags