summaryrefslogtreecommitdiff
path: root/vala/valasignaltype.vala
diff options
context:
space:
mode:
authorLorenz Wildberg <lorenz@wild-fisch.de>2021-12-04 19:05:42 +0000
committerRico Tzschichholz <ricotz@ubuntu.com>2022-01-04 14:51:37 +0100
commitd74400bfaae61a1e2c246382e627b0a9adf8c304 (patch)
treeca0ae596870df270819adcfbcac35b9d83585280 /vala/valasignaltype.vala
parentde1682099945edfd8d23958cf45186aecbd0015e (diff)
downloadvala-d74400bfaae61a1e2c246382e627b0a9adf8c304.tar.gz
Support "emit" for explicit signal emission
If "foo" is a signal then "foo.emit (...);" is allowed now additionally to "foo (...);". This is required to emit dynamic signals.
Diffstat (limited to 'vala/valasignaltype.vala')
-rw-r--r--vala/valasignaltype.vala13
1 files changed, 13 insertions, 0 deletions
diff --git a/vala/valasignaltype.vala b/vala/valasignaltype.vala
index ca90186fc..93867ac54 100644
--- a/vala/valasignaltype.vala
+++ b/vala/valasignaltype.vala
@@ -35,6 +35,7 @@ public class Vala.SignalType : CallableType {
Method? connect_method;
Method? connect_after_method;
Method? disconnect_method;
+ Method? emit_method;
public SignalType (Signal signal_symbol, SourceReference? source_reference = null) {
base (signal_symbol, source_reference);
@@ -104,6 +105,16 @@ public class Vala.SignalType : CallableType {
return disconnect_method;
}
+ unowned Method get_emit_method () {
+ if (emit_method == null) {
+ emit_method = new Method ("emit", signal_symbol.return_type, source_reference);
+ emit_method.access = SymbolAccessibility.PUBLIC;
+ emit_method.external = true;
+ emit_method.owner = signal_symbol.scope;
+ }
+ return emit_method;
+ }
+
public override Symbol? get_member (string member_name) {
if (member_name == "connect") {
return get_connect_method ();
@@ -111,6 +122,8 @@ public class Vala.SignalType : CallableType {
return get_connect_after_method ();
} else if (member_name == "disconnect") {
return get_disconnect_method ();
+ } else if (member_name == "emit") {
+ return get_emit_method ();
}
return null;
}