MODULE test_dialogs ; (* m2-GTK4 test - modern dialogs: GtkAlertDialog and GtkColorDialog property round-trips (dialogues are not shown). Requires a display. *) FROM Gio IMPORT g_application_run, g_application_quit; FROM GtkApplication IMPORT gtk_application_new; FROM GtkAlertDialog IMPORT gtk_alert_dialog_new, gtk_alert_dialog_set_message, gtk_alert_dialog_get_message, gtk_alert_dialog_set_detail, gtk_alert_dialog_get_detail, gtk_alert_dialog_set_buttons, gtk_alert_dialog_get_buttons, gtk_alert_dialog_set_cancel_button, gtk_alert_dialog_get_cancel_button, gtk_alert_dialog_set_default_button, gtk_alert_dialog_get_default_button, gtk_alert_dialog_set_modal, gtk_alert_dialog_get_modal; FROM GtkColorDialog IMPORT gtk_color_dialog_new, gtk_color_dialog_set_title, gtk_color_dialog_get_title, gtk_color_dialog_set_modal, gtk_color_dialog_set_with_alpha; FROM GtkUtils IMPORT Connect, CStrToM2, Unref; FROM SYSTEM IMPORT ADDRESS, ADR; FROM libc IMPORT printf; CONST AppId = "org.example.m2gtk4.TestDialogs"; VAR app: ADDRESS; passed: BOOLEAN; PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS); VAR alert, color: ADDRESS; buf: ARRAY [0..63] OF CHAR; s0, s1: ARRAY [0..7] OF CHAR; buttons: ARRAY [0..2] OF ADDRESS; ok: BOOLEAN; BEGIN ok := TRUE; (* --- GtkAlertDialog --- *) alert := gtk_alert_dialog_new("Heads up"); CStrToM2(gtk_alert_dialog_get_message(alert), buf); IF (buf[0] # 'H') OR (buf[8] # 0C) THEN printf("alert message wrong: [%s]\n", buf); ok := FALSE END; gtk_alert_dialog_set_message(alert, "Changed"); CStrToM2(gtk_alert_dialog_get_message(alert), buf); IF (buf[0] # 'C') OR (buf[7] # 0C) THEN ok := FALSE END; gtk_alert_dialog_set_detail(alert, "More info"); CStrToM2(gtk_alert_dialog_get_detail(alert), buf); IF (buf[0] # 'M') OR (buf[9] # 0C) THEN ok := FALSE END; s0 := "OK"; s1 := "Cancel"; buttons[0] := ADR(s0); buttons[1] := ADR(s1); buttons[2] := NIL; gtk_alert_dialog_set_buttons(alert, ADR(buttons)); IF gtk_alert_dialog_get_buttons(alert) = NIL THEN printf("alert buttons not set\n"); ok := FALSE END; gtk_alert_dialog_set_default_button(alert, 0); IF gtk_alert_dialog_get_default_button(alert) # 0 THEN ok := FALSE END; gtk_alert_dialog_set_cancel_button(alert, 1); IF gtk_alert_dialog_get_cancel_button(alert) # 1 THEN ok := FALSE END; gtk_alert_dialog_set_modal(alert, 1); IF gtk_alert_dialog_get_modal(alert) # 1 THEN ok := FALSE END; (* --- GtkColorDialog --- *) color := gtk_color_dialog_new(); gtk_color_dialog_set_title(color, "Pick a colour"); CStrToM2(gtk_color_dialog_get_title(color), buf); IF (buf[0] # 'P') OR (buf[13] # 0C) THEN printf("color title wrong: [%s]\n", buf); ok := FALSE END; gtk_color_dialog_set_modal(color, 1); gtk_color_dialog_set_with_alpha(color, 1); Unref(alert); Unref(color); 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_dialogs: 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_dialogs: PASS\n"); HALT(0) ELSE printf("test_dialogs: FAIL\n"); HALT(1) END END test_dialogs.