]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
D-Bus: Fix proxy creation in separate source file
authorJürg Billeter <j@bitron.ch>
Sat, 23 Aug 2014 18:55:49 +0000 (20:55 +0200)
committerJürg Billeter <j@bitron.ch>
Sat, 23 Aug 2014 18:55:49 +0000 (20:55 +0200)
codegen/valagdbusclientmodule.vala

index cbf7223160171fa2e7531a8ede789c05e94a84fe..59aa20ee3840330da015dcc34619de18393228d4 100644 (file)
@@ -259,7 +259,7 @@ public class Vala.GDBusClientModule : GDBusModule {
 
                CCodeExpression proxy_type;
                CCodeExpression dbus_iface_name;
-               CCodeExpression dbus_iface_info = null;
+               CCodeExpression dbus_iface_info;
 
                var object_type = type_arg as ObjectType;
                if (object_type != null) {
@@ -272,7 +272,6 @@ public class Vala.GDBusClientModule : GDBusModule {
 
                        proxy_type = new CCodeIdentifier ("%s_PROXY".printf (get_ccode_type_id (iface)));
                        dbus_iface_name = new CCodeConstant ("\"%s\"".printf (get_dbus_name (iface)));
-                       dbus_iface_info = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_interface_info (iface));
                } else {
                        // use runtime type information for generic methods
 
@@ -295,6 +294,15 @@ public class Vala.GDBusClientModule : GDBusModule {
                        dbus_iface_name = get_qdata;
                }
 
+               var quark = new CCodeFunctionCall (new CCodeIdentifier ("g_quark_from_static_string"));
+               quark.add_argument (new CCodeConstant ("\"vala-dbus-interface-info\""));
+
+               var get_qdata = new CCodeFunctionCall (new CCodeIdentifier ("g_type_get_qdata"));
+               get_qdata.add_argument (get_type_id_expression (type_arg));
+               get_qdata.add_argument (quark);
+
+               dbus_iface_info = get_qdata;
+
                if (bus_get_proxy_async || conn_get_proxy_async) {
                        if (ma.member_name == "end" && ma.inner.symbol_reference == ma.symbol_reference) {
                                // method can fail
@@ -1166,5 +1174,15 @@ public class Vala.GDBusClientModule : GDBusModule {
                set_qdata.add_argument (new CCodeConstant ("\"%s\"".printf (dbus_iface_name)));
 
                block.add_statement (new CCodeExpressionStatement (set_qdata));
+
+               quark = new CCodeFunctionCall (new CCodeIdentifier ("g_quark_from_static_string"));
+               quark.add_argument (new CCodeConstant ("\"vala-dbus-interface-info\""));
+
+               set_qdata = new CCodeFunctionCall (new CCodeIdentifier ("g_type_set_qdata"));
+               set_qdata.add_argument (new CCodeIdentifier ("%s_type_id".printf (get_ccode_lower_case_name (sym, null))));
+               set_qdata.add_argument (quark);
+               set_qdata.add_argument (new CCodeCastExpression (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_interface_info (sym)), "void*"));
+
+               block.add_statement (new CCodeExpressionStatement (set_qdata));
        }
 }