MODULE test_application ; (* m2-GTK4 test - a GtkApplication runs, its "activate" handler builds a window, and a timeout quits the loop. Requires a display; the runner skips it when DISPLAY/WAYLAND_DISPLAY are both unset. *) FROM Gio IMPORT g_application_run, g_application_quit; FROM GtkApplication IMPORT gtk_application_new; FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title, gtk_window_set_default_size, gtk_window_set_child, gtk_window_present; FROM GtkLabel IMPORT gtk_label_new; FROM GtkUtils IMPORT Connect; FROM GLib IMPORT g_timeout_add, GSourceRemove; FROM SYSTEM IMPORT ADDRESS, ADR; FROM libc IMPORT printf; CONST AppId = "org.example.m2gtk4.TestApp"; VAR app: ADDRESS; activated: BOOLEAN; PROCEDURE QuitCb (data: ADDRESS) : INTEGER; BEGIN g_application_quit(app); RETURN GSourceRemove END QuitCb; PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS); VAR window, label: ADDRESS; BEGIN activated := TRUE; window := gtk_application_window_new(application); gtk_window_set_title(window, "test_application"); gtk_window_set_default_size(window, 200, 80); label := gtk_label_new("ok"); gtk_window_set_child(window, label); gtk_window_present(window); g_timeout_add(300, QuitCb, NIL) END OnActivate; VAR rc: INTEGER; BEGIN activated := FALSE; app := gtk_application_new(AppId, 0); IF app = NIL THEN printf("test_application: FAIL (gtk_application_new)\n"); HALT(1) END; Connect(app, "activate", ADR(OnActivate), NIL); rc := g_application_run(app, 0, NIL); IF activated THEN printf("test_application: PASS\n"); HALT(0) ELSE printf("test_application: FAIL (activate never ran)\n"); HALT(1) END END test_application.