[vala/0.36] gsignal: Use guint to represent flags-enum in custom GMarshalFunc



commit 1e8b05ed9330dccb5b07976cc6c2cc4748ca65d0
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Sun Mar 10 18:14:09 2019 +0100

    gsignal: Use guint to represent flags-enum in custom GMarshalFunc

 codegen/valagsignalmodule.vala          |  7 ++++++-
 tests/Makefile.am                       |  1 +
 tests/objects/signals-enum-marshal.vala | 21 +++++++++++++++++++++
 3 files changed, 28 insertions(+), 1 deletion(-)
---
diff --git a/codegen/valagsignalmodule.vala b/codegen/valagsignalmodule.vala
index c60e16cab..5dbf08873 100644
--- a/codegen/valagsignalmodule.vala
+++ b/codegen/valagsignalmodule.vala
@@ -68,7 +68,12 @@ public class Vala.GSignalModule : GObjectModule {
                                return "gpointer";
                        }
                } else if (t.data_type is Enum) {
-                       return "gint";
+                       var en = (Enum) t.data_type;
+                       if (en.is_flags) {
+                               return "guint";
+                       } else {
+                               return "gint";
+                       }
                } else if (t is ArrayType) {
                        return "gpointer";
                } else if (t is ErrorType) {
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 51783c723..576e667f3 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -233,6 +233,7 @@ TESTS = \
        objects/property-static.vala \
        objects/regex.vala \
        objects/signals.vala \
+       objects/signals-enum-marshal.vala \
        objects/test-025.vala \
        objects/test-026.vala \
        objects/test-029.vala \
diff --git a/tests/objects/signals-enum-marshal.vala b/tests/objects/signals-enum-marshal.vala
new file mode 100644
index 000000000..412fa18b6
--- /dev/null
+++ b/tests/objects/signals-enum-marshal.vala
@@ -0,0 +1,21 @@
+enum Foo {
+       FOO
+}
+
+[Flags]
+enum Bar {
+       BAR
+}
+
+class Manam : Object {
+       public signal void foo (Foo f, string s);
+       public signal void bar (Bar b, string s);
+}
+
+void main () {
+       var manam = new Manam ();
+       manam.foo.connect (() => {});
+       manam.foo (Foo.FOO, "foo");
+       manam.bar.connect (() => {});
+       manam.bar (Bar.BAR, "bar");
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]