1 public delegate
string FooFunc (Foo foo
, string s
);
3 public class Foo
: Object
{
4 public signal string test (string s
);
6 public void add (FooFunc func
) {
10 public void add_owned (owned FooFunc func
) {
14 public void add_remove (FooFunc func
) {
16 test
.disconnect (func
);
19 public void add_remove_owned (owned FooFunc func
) {
21 test
.disconnect (func
);
24 public void invoke_test () {
25 assert (test ("bar") == "foo");
28 public void invoke_test_empty () {
29 assert (test ("bar") == null);
33 public class Bar
: Object
{
34 public signal string test (string s
);
38 public Bar (Foo foo
) {
40 foo
.add (instance_callback
);
43 public Bar
.owned (Foo foo
) {
45 foo
.add_owned (instance_callback
);
48 public Bar
.remove (Foo foo
) {
50 foo
.add_remove (instance_callback
);
53 public Bar
.remove_owned (Foo foo
) {
55 foo
.add_remove_owned (instance_callback
);
58 string instance_callback (Foo foo
, string s
) {
67 string callback_static (Foo foo
, string s
) {
78 foo
.add ((FooFunc
) callback_static
);
82 foo
.add_owned ((FooFunc
) callback_static
);
86 foo
.add_remove ((FooFunc
) callback_static
);
87 foo
.invoke_test_empty ();
90 foo
.add_remove_owned ((FooFunc
) callback_static
);
91 foo
.invoke_test_empty ();
98 bar
= new Bar
.owned (foo
);
102 bar
= new Bar
.remove (foo
);
103 foo
.invoke_test_empty ();
106 bar
= new Bar
.remove_owned (foo
);
107 foo
.invoke_test_empty ();