test_application.mod 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. MODULE test_application ;
  2. (*
  3. m2-GTK4 test - a GtkApplication runs, its "activate" handler builds
  4. a window, and a timeout quits the loop. Requires a display; the
  5. runner skips it when DISPLAY/WAYLAND_DISPLAY are both unset.
  6. *)
  7. FROM Gio IMPORT g_application_run, g_application_quit;
  8. FROM GtkApplication IMPORT gtk_application_new;
  9. FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title,
  10. gtk_window_set_default_size, gtk_window_set_child, gtk_window_present;
  11. FROM GtkLabel IMPORT gtk_label_new;
  12. FROM GtkUtils IMPORT Connect;
  13. FROM GLib IMPORT g_timeout_add, GSourceRemove;
  14. FROM SYSTEM IMPORT ADDRESS, ADR;
  15. FROM libc IMPORT printf;
  16. CONST
  17. AppId = "org.example.m2gtk4.TestApp";
  18. VAR
  19. app: ADDRESS;
  20. activated: BOOLEAN;
  21. PROCEDURE QuitCb (data: ADDRESS) : INTEGER;
  22. BEGIN
  23. g_application_quit(app);
  24. RETURN GSourceRemove
  25. END QuitCb;
  26. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  27. VAR
  28. window, label: ADDRESS;
  29. BEGIN
  30. activated := TRUE;
  31. window := gtk_application_window_new(application);
  32. gtk_window_set_title(window, "test_application");
  33. gtk_window_set_default_size(window, 200, 80);
  34. label := gtk_label_new("ok");
  35. gtk_window_set_child(window, label);
  36. gtk_window_present(window);
  37. g_timeout_add(300, QuitCb, NIL)
  38. END OnActivate;
  39. VAR
  40. rc: INTEGER;
  41. BEGIN
  42. activated := FALSE;
  43. app := gtk_application_new(AppId, 0);
  44. IF app = NIL THEN
  45. printf("test_application: FAIL (gtk_application_new)\n");
  46. HALT(1)
  47. END;
  48. Connect(app, "activate", ADR(OnActivate), NIL);
  49. rc := g_application_run(app, 0, NIL);
  50. IF activated THEN
  51. printf("test_application: PASS\n");
  52. HALT(0)
  53. ELSE
  54. printf("test_application: FAIL (activate never ran)\n");
  55. HALT(1)
  56. END
  57. END test_application.