test_shortcuts.mod 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. MODULE test_shortcuts ;
  2. (*
  3. m2-GTK4 test - shortcuts: trigger/action parsing, GtkShortcut and
  4. GtkShortcutController. Requires a display.
  5. *)
  6. FROM Gio IMPORT g_application_run, g_application_quit;
  7. FROM GtkApplication IMPORT gtk_application_new;
  8. FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_child,
  9. gtk_window_present;
  10. FROM GtkLabel IMPORT gtk_label_new;
  11. FROM GtkWidget IMPORT gtk_widget_add_controller;
  12. FROM GtkShortcut IMPORT gtk_shortcut_new, gtk_shortcut_get_trigger,
  13. gtk_shortcut_get_action, gtk_shortcut_trigger_parse_string,
  14. gtk_named_action_new;
  15. FROM GtkShortcutController IMPORT gtk_shortcut_controller_new,
  16. gtk_shortcut_controller_add_shortcut,
  17. gtk_shortcut_controller_remove_shortcut,
  18. gtk_shortcut_controller_set_scope, GtkShortcutScopeLocal;
  19. FROM GtkUtils IMPORT Connect;
  20. FROM SYSTEM IMPORT ADDRESS, ADR;
  21. FROM libc IMPORT printf;
  22. CONST
  23. AppId = "org.example.m2gtk4.TestShortcuts";
  24. VAR
  25. app: ADDRESS;
  26. passed: BOOLEAN;
  27. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  28. VAR
  29. window, label, controller, trigger, action, shortcut: ADDRESS;
  30. ok: BOOLEAN;
  31. BEGIN
  32. ok := TRUE;
  33. controller := gtk_shortcut_controller_new();
  34. IF controller = NIL THEN printf("controller NIL\n"); ok := FALSE END;
  35. gtk_shortcut_controller_set_scope(controller, GtkShortcutScopeLocal);
  36. trigger := gtk_shortcut_trigger_parse_string("<Control>q");
  37. IF trigger = NIL THEN printf("trigger NIL\n"); ok := FALSE END;
  38. action := gtk_named_action_new("app.quit");
  39. IF action = NIL THEN printf("action NIL\n"); ok := FALSE END;
  40. shortcut := gtk_shortcut_new(trigger, action);
  41. IF shortcut = NIL THEN printf("shortcut NIL\n"); ok := FALSE END;
  42. IF gtk_shortcut_get_trigger(shortcut) # trigger THEN
  43. printf("shortcut trigger wrong\n"); ok := FALSE
  44. END;
  45. IF gtk_shortcut_get_action(shortcut) # action THEN
  46. printf("shortcut action wrong\n"); ok := FALSE
  47. END;
  48. gtk_shortcut_controller_add_shortcut(controller, shortcut);
  49. gtk_shortcut_controller_remove_shortcut(controller, shortcut);
  50. label := gtk_label_new("press Ctrl+Q");
  51. gtk_widget_add_controller(label, controller);
  52. window := gtk_application_window_new(application);
  53. gtk_window_set_child(window, label);
  54. gtk_window_present(window);
  55. passed := ok;
  56. g_application_quit(application)
  57. END OnActivate;
  58. VAR
  59. rc: INTEGER;
  60. BEGIN
  61. passed := FALSE;
  62. app := gtk_application_new(AppId, 0);
  63. IF app = NIL THEN
  64. printf("test_shortcuts: FAIL (no app)\n");
  65. HALT(1)
  66. END;
  67. Connect(app, "activate", ADR(OnActivate), NIL);
  68. rc := g_application_run(app, 0, NIL);
  69. IF passed THEN
  70. printf("test_shortcuts: PASS\n");
  71. HALT(0)
  72. ELSE
  73. printf("test_shortcuts: FAIL\n");
  74. HALT(1)
  75. END
  76. END test_shortcuts.