summaryrefslogtreecommitdiff
path: root/test cases/vala
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2023-09-21 11:21:11 -0700
committerEli Schwartz <eschwartz93@gmail.com>2023-10-09 17:33:48 -0400
commitcbca1919481902efbd5dadda3cc80db84fd75f0c (patch)
tree706d343996e1f76481171e7457ed28752552616c /test cases/vala
parent8490eaa29dd9b5a7fd36bf9c2f871008139ede7a (diff)
downloadmeson-cbca1919481902efbd5dadda3cc80db84fd75f0c.tar.gz
interpreter: Handle BuildTarget.vala_args as Files in the interpreter
Way back in Meson 0.25, support was added to `vala_args` for Files. Strangely, this was never added to any other language, though it's been discussed before. For type safety, it makes more sense to handle this in the interpreter level, and pass only strings into the build IR. This is accomplished by adding a `depend_files` field to the `BuildTarget` class (which is not exposed to the user), and adding the depend files into that field, while converting the arguments to relative string paths. This ensures both the proper build dependencies happen, as well as that the arguments are always strings.
Diffstat (limited to 'test cases/vala')
-rw-r--r--test cases/vala/27 file as command line argument/meson.build21
-rw-r--r--test cases/vala/27 file as command line argument/my-resources.xml6
-rw-r--r--test cases/vala/27 file as command line argument/mywidget.ui70
-rw-r--r--test cases/vala/27 file as command line argument/mywidget.vala41
4 files changed, 138 insertions, 0 deletions
diff --git a/test cases/vala/27 file as command line argument/meson.build b/test cases/vala/27 file as command line argument/meson.build
new file mode 100644
index 000000000..579ca5198
--- /dev/null
+++ b/test cases/vala/27 file as command line argument/meson.build
@@ -0,0 +1,21 @@
+project('composite', 'vala', 'c')
+gnome = import('gnome')
+deps = [
+ dependency('glib-2.0', version : '>=2.38'),
+ dependency('gobject-2.0'),
+ dependency('gtk+-3.0'),
+]
+res = files('my-resources.xml')
+gres = gnome.compile_resources(
+ 'my', res,
+ source_dir : '.',
+)
+executable(
+ 'demo',
+ sources : [
+ 'mywidget.vala',
+ gres,
+ ],
+ dependencies : deps,
+ vala_args : ['--gresources', res],
+)
diff --git a/test cases/vala/27 file as command line argument/my-resources.xml b/test cases/vala/27 file as command line argument/my-resources.xml
new file mode 100644
index 000000000..b5743c193
--- /dev/null
+++ b/test cases/vala/27 file as command line argument/my-resources.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/org/foo/my">
+ <file compressed="true" preprocess="xml-stripblanks">mywidget.ui</file>
+ </gresource>
+</gresources>
diff --git a/test cases/vala/27 file as command line argument/mywidget.ui b/test cases/vala/27 file as command line argument/mywidget.ui
new file mode 100644
index 000000000..2d6286ca2
--- /dev/null
+++ b/test cases/vala/27 file as command line argument/mywidget.ui
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.8 -->
+ <template class="MyWidget" parent="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">This widget is defined with composite GtkBuilder script</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <signal name="changed" handler="on_entry_changed" object="MyWidget" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Press the button to fetch the internal entry text</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button">
+ <property name="label" translatable="yes">The Button</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">end</property>
+ <signal name="clicked" handler="on_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </template>
+</interface>
diff --git a/test cases/vala/27 file as command line argument/mywidget.vala b/test cases/vala/27 file as command line argument/mywidget.vala
new file mode 100644
index 000000000..68eaecc27
--- /dev/null
+++ b/test cases/vala/27 file as command line argument/mywidget.vala
@@ -0,0 +1,41 @@
+using Gtk;
+
+[GtkTemplate (ui = "/org/foo/my/mywidget.ui")]
+public class MyWidget : Box {
+ public string text {
+ get { return entry.text; }
+ set { entry.text = value; }
+ }
+
+ [GtkChild]
+ private Entry entry;
+
+ public MyWidget (string text) {
+ this.text = text;
+ }
+
+ [GtkCallback]
+ private void on_button_clicked (Button button) {
+ print ("The button was clicked with entry text: %s\n", entry.text);
+ }
+
+ [GtkCallback]
+ private void on_entry_changed (Editable editable) {
+ print ("The entry text changed: %s\n", entry.text);
+
+ notify_property ("text");
+ }
+}
+
+void main(string[] args) {
+ Gtk.init (ref args);
+ var win = new Window();
+ win.destroy.connect (Gtk.main_quit);
+
+ var widget = new MyWidget ("The entry text!");
+
+ win.add (widget);
+ win.show_all ();
+
+ Gtk.main ();
+}