// -*- tab-width: 4 -*- /* valac --Xcc="-Wl,--export-dynamic" --pkg gtk+-2.0 --pkg gmodule-2.0 test-gtkbuilder.vala */ using Gtk; public class GtkBuilderSample { private const string UI_FILE = "test-gtkbuilder.ui"; public void run () { try { var builder = new Builder (); builder.add_from_file (UI_FILE); var window = builder.get_object ("window1") as Window; window.show_all (); window.destroy += Gtk.main_quit; builder.connect_signals_full (connect_signals); } catch (Error e) { var msg = new MessageDialog (null, DialogFlags.MODAL, MessageType.ERROR, ButtonsType.CANCEL, "Failed to load UI\n%s", e.message); msg.run (); } } [CCode (instance_pos = -1)] public void on_button1_clicked (Widget widget) { stdout.printf ("button clicked\n"); } [CCode (instance_pos = -1)] private void connect_signals (Gtk.Builder builder, GLib.Object object, string signal_name, string handler_name, GLib.Object? connect_object, GLib.ConnectFlags flags) { var module = Module.open (null, ModuleFlags.BIND_LAZY); void* sym; if (!module.symbol (handler_name, out sym)) { stdout.printf ("Symbol not found! %s\n", handler_name); } else { Signal.connect (object, signal_name, (GLib.Callback) sym, this); } } public static int main (string[] args) { Gtk.init (ref args); var sample = new GtkBuilderSample (); sample.run (); Gtk.main (); return 0; } } // vim:tabstop=4: