return "";
}
- public virtual string get_dynamic_signal_connect_wrapper_name (DynamicSignal node) {
- return "";
- }
-
- public virtual string get_dynamic_signal_connect_after_wrapper_name (DynamicSignal node) {
- return "";
- }
-
- public virtual string get_dynamic_signal_disconnect_wrapper_name (DynamicSignal node) {
- return "";
- }
-
public virtual string get_array_length_cname (string array_cname, int dim) {
return "";
}
return "dynamic_%s%d_".printf (node.name, signal_wrapper_id++);
}
- public override string get_dynamic_signal_connect_wrapper_name (DynamicSignal sig) {
- if (sig.dynamic_type.type_symbol == null
- || !sig.dynamic_type.type_symbol.is_subtype_of (gobject_type)) {
- return base.get_dynamic_signal_connect_wrapper_name (sig);
- }
-
- string connect_wrapper_name = "_%sconnect".printf (get_dynamic_signal_cname (sig));
- var func = new CCodeFunction (connect_wrapper_name, "gulong");
- func.add_parameter (new CCodeParameter ("obj", "gpointer"));
- func.add_parameter (new CCodeParameter ("signal_name", "const char *"));
- func.add_parameter (new CCodeParameter ("handler", "GCallback"));
- func.add_parameter (new CCodeParameter ("data", "gpointer"));
- push_function (func);
- generate_gobject_connect_wrapper (sig, false);
- pop_function ();
-
- // append to C source file
- cfile.add_function_declaration (func);
- cfile.add_function (func);
-
- return connect_wrapper_name;
- }
-
- public override string get_dynamic_signal_connect_after_wrapper_name (DynamicSignal sig) {
- if (sig.dynamic_type.type_symbol == null
- || !sig.dynamic_type.type_symbol.is_subtype_of (gobject_type)) {
- return base.get_dynamic_signal_connect_wrapper_name (sig);
- }
-
- string connect_wrapper_name = "_%sconnect_after".printf (get_dynamic_signal_cname (sig));
- var func = new CCodeFunction (connect_wrapper_name, "gulong");
- func.add_parameter (new CCodeParameter ("obj", "gpointer"));
- func.add_parameter (new CCodeParameter ("signal_name", "const char *"));
- func.add_parameter (new CCodeParameter ("handler", "GCallback"));
- func.add_parameter (new CCodeParameter ("data", "gpointer"));
- push_function (func);
- generate_gobject_connect_wrapper (sig, true);
- pop_function ();
-
- // append to C source file
- cfile.add_function_declaration (func);
- cfile.add_function (func);
-
- return connect_wrapper_name;
- }
-
- void generate_gobject_connect_wrapper (DynamicSignal sig, bool after) {
- var m = (Method) sig.handler.symbol_reference;
-
- sig.accept (this);
-
- string connect_func = "g_signal_connect_object";
- if (m.binding != MemberBinding.INSTANCE) {
- if (!after)
- connect_func = "g_signal_connect";
- else
- connect_func = "g_signal_connect_after";
- }
-
- 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) {
- if (!after) {
- call.add_argument (new CCodeConstant ("0"));
- } else {
- call.add_argument (new CCodeConstant ("G_CONNECT_AFTER"));
- }
- }
-
- ccode.add_return (call);
- }
-
public override void visit_property (Property prop) {
base.visit_property (prop);
if (!disconnect) {
// connect
- if (sig is DynamicSignal) {
- if (!after)
- connect_func = get_dynamic_signal_connect_wrapper_name ((DynamicSignal) sig);
- else
- connect_func = get_dynamic_signal_connect_after_wrapper_name ((DynamicSignal) sig);
+ if (!(sig is DynamicSignal) && ((m != null && m.closure) || (dt != null && dt.value_owned))) {
+ connect_func = "g_signal_connect_data";
+ } else if (m != null && in_gobject_instance (m)) {
+ connect_func = "g_signal_connect_object";
+ } else if (!after) {
+ connect_func = "g_signal_connect";
} else {
- if ((m != null && m.closure) || (dt != null && dt.value_owned)) {
- connect_func = "g_signal_connect_data";
- } else if (m != null && in_gobject_instance (m)) {
- connect_func = "g_signal_connect_object";
- } else if (!after) {
- connect_func = "g_signal_connect";
- } else
- connect_func = "g_signal_connect_after";
+ connect_func = "g_signal_connect_after";
}
} else {
// disconnect
if (sig is DynamicSignal) {
- connect_func = get_dynamic_signal_disconnect_wrapper_name ((DynamicSignal) sig);
+ connect_func = "VALA_UNSUPPORTED";
} else {
connect_func = "g_signal_handlers_disconnect_matched";
}
} else if (handler is LambdaExpression) {
ccall.add_argument (get_this_cexpression ());
}
- if (!disconnect && !(sig is DynamicSignal)
- && in_gobject_instance (m)) {
+ if (!disconnect && in_gobject_instance (m)) {
// g_signal_connect_object
// fifth argument: connect_flags
static inline gchar* _dynamic_get_prop1 (GObject* obj);
static void _sig_after_cb_dynamic_sig0_ (GObject* _sender,
gpointer self);
-gulong _dynamic_sig1_connect_after (gpointer obj,
- const char * signal_name,
- GCallback handler,
- gpointer data);
-static void _sig_cb_dynamic_sig2_ (GObject* _sender,
+static void _sig_cb_dynamic_sig1_ (GObject* _sender,
gpointer self);
-gulong _dynamic_sig3_connect (gpointer obj,
- const char * signal_name,
- GCallback handler,
- gpointer data);
-static void _bar_sig_after_cb_dynamic_sig4_ (GObject* _sender,
+static void _bar_sig_after_cb_dynamic_sig2_ (GObject* _sender,
gpointer self);
-gulong _dynamic_sig5_connect_after (gpointer obj,
- const char * signal_name,
- GCallback handler,
- gpointer data);
-static void _bar_sig_cb_dynamic_sig6_ (GObject* _sender,
+static void _bar_sig_cb_dynamic_sig3_ (GObject* _sender,
gpointer self);
-gulong _dynamic_sig7_connect (gpointer obj,
- const char * signal_name,
- GCallback handler,
- gpointer data);
static inline gpointer
foo_get_instance_private (Foo* self)
sig_after_cb ();
}
-gulong
-_dynamic_sig1_connect_after (gpointer obj,
- const char * signal_name,
- GCallback handler,
- gpointer data)
-{
- return g_signal_connect_after (obj, signal_name, handler, data);
-}
-
static void
-_sig_cb_dynamic_sig2_ (GObject* _sender,
+_sig_cb_dynamic_sig1_ (GObject* _sender,
gpointer self)
{
sig_cb ();
}
-gulong
-_dynamic_sig3_connect (gpointer obj,
- const char * signal_name,
- GCallback handler,
- gpointer data)
-{
- return g_signal_connect (obj, signal_name, handler, data);
-}
-
static void
-_bar_sig_after_cb_dynamic_sig4_ (GObject* _sender,
+_bar_sig_after_cb_dynamic_sig2_ (GObject* _sender,
gpointer self)
{
bar_sig_after_cb ((Bar*) self);
}
-gulong
-_dynamic_sig5_connect_after (gpointer obj,
- const char * signal_name,
- GCallback handler,
- gpointer data)
-{
- return g_signal_connect_object (obj, signal_name, handler, data, G_CONNECT_AFTER);
-}
-
static void
-_bar_sig_cb_dynamic_sig6_ (GObject* _sender,
+_bar_sig_cb_dynamic_sig3_ (GObject* _sender,
gpointer self)
{
bar_sig_cb ((Bar*) self);
}
-gulong
-_dynamic_sig7_connect (gpointer obj,
- const char * signal_name,
- GCallback handler,
- gpointer data)
-{
- return g_signal_connect_object (obj, signal_name, handler, data, 0);
-}
-
static void
_vala_main (void)
{
s = _tmp3_;
_vala_assert (g_strcmp0 (s, "foo") == 0, "s == \"foo\"");
success = FALSE;
- _tmp4_ = _dynamic_sig1_connect_after (foo, "sig", (GCallback) _sig_after_cb_dynamic_sig0_, NULL);
+ _tmp4_ = g_signal_connect_after (foo, "sig", (GCallback) _sig_after_cb_dynamic_sig0_, NULL);
id1 = _tmp4_;
- _tmp5_ = _dynamic_sig3_connect (foo, "sig", (GCallback) _sig_cb_dynamic_sig2_, NULL);
+ _tmp5_ = g_signal_connect (foo, "sig", (GCallback) _sig_cb_dynamic_sig1_, NULL);
id2 = _tmp5_;
g_signal_emit (real, foo_signals[FOO_SIG_SIGNAL], 0);
_vala_assert (success, "success");
_tmp8_ = bar_new ();
bar = _tmp8_;
bar->success = FALSE;
- _tmp9_ = _dynamic_sig5_connect_after (foo, "sig", (GCallback) _bar_sig_after_cb_dynamic_sig4_, bar);
+ _tmp9_ = g_signal_connect_object (foo, "sig", (GCallback) _bar_sig_after_cb_dynamic_sig2_, bar, G_CONNECT_AFTER);
id1 = _tmp9_;
- _tmp10_ = _dynamic_sig7_connect (foo, "sig", (GCallback) _bar_sig_cb_dynamic_sig6_, bar);
+ _tmp10_ = g_signal_connect_object (foo, "sig", (GCallback) _bar_sig_cb_dynamic_sig3_, bar, 0);
id2 = _tmp10_;
g_signal_emit (real, foo_signals[FOO_SIG_SIGNAL], 0);
_vala_assert (bar->success, "bar.success");