MODULE test_shortcuts ; (* m2-GTK4 test - shortcuts: trigger/action parsing, GtkShortcut and GtkShortcutController. Requires a display. *) 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_child, gtk_window_present; FROM GtkLabel IMPORT gtk_label_new; FROM GtkWidget IMPORT gtk_widget_add_controller; FROM GtkShortcut IMPORT gtk_shortcut_new, gtk_shortcut_get_trigger, gtk_shortcut_get_action, gtk_shortcut_trigger_parse_string, gtk_named_action_new; FROM GtkShortcutController IMPORT gtk_shortcut_controller_new, gtk_shortcut_controller_add_shortcut, gtk_shortcut_controller_remove_shortcut, gtk_shortcut_controller_set_scope, GtkShortcutScopeLocal; FROM GtkUtils IMPORT Connect; FROM SYSTEM IMPORT ADDRESS, ADR; FROM libc IMPORT printf; CONST AppId = "org.example.m2gtk4.TestShortcuts"; VAR app: ADDRESS; passed: BOOLEAN; PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS); VAR window, label, controller, trigger, action, shortcut: ADDRESS; ok: BOOLEAN; BEGIN ok := TRUE; controller := gtk_shortcut_controller_new(); IF controller = NIL THEN printf("controller NIL\n"); ok := FALSE END; gtk_shortcut_controller_set_scope(controller, GtkShortcutScopeLocal); trigger := gtk_shortcut_trigger_parse_string("q"); IF trigger = NIL THEN printf("trigger NIL\n"); ok := FALSE END; action := gtk_named_action_new("app.quit"); IF action = NIL THEN printf("action NIL\n"); ok := FALSE END; shortcut := gtk_shortcut_new(trigger, action); IF shortcut = NIL THEN printf("shortcut NIL\n"); ok := FALSE END; IF gtk_shortcut_get_trigger(shortcut) # trigger THEN printf("shortcut trigger wrong\n"); ok := FALSE END; IF gtk_shortcut_get_action(shortcut) # action THEN printf("shortcut action wrong\n"); ok := FALSE END; gtk_shortcut_controller_add_shortcut(controller, shortcut); gtk_shortcut_controller_remove_shortcut(controller, shortcut); label := gtk_label_new("press Ctrl+Q"); gtk_widget_add_controller(label, controller); window := gtk_application_window_new(application); gtk_window_set_child(window, label); gtk_window_present(window); passed := ok; g_application_quit(application) END OnActivate; VAR rc: INTEGER; BEGIN passed := FALSE; app := gtk_application_new(AppId, 0); IF app = NIL THEN printf("test_shortcuts: FAIL (no app)\n"); HALT(1) END; Connect(app, "activate", ADR(OnActivate), NIL); rc := g_application_run(app, 0, NIL); IF passed THEN printf("test_shortcuts: PASS\n"); HALT(0) ELSE printf("test_shortcuts: FAIL\n"); HALT(1) END END test_shortcuts.