MODULE test_css ; (* m2-GTK4 test - CSS styling: GtkCssProvider + provider-for-display + per-widget CSS classes. 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; FROM GtkWidget IMPORT gtk_widget_add_css_class, gtk_widget_remove_css_class, gtk_widget_has_css_class; FROM GtkLabel IMPORT gtk_label_new; FROM GtkCssProvider IMPORT gtk_css_provider_new, gtk_css_provider_load_from_string; FROM GtkStyleContext IMPORT gtk_style_context_add_provider_for_display, gtk_style_context_remove_provider_for_display, GtkStyleProviderPriorityApplication; FROM Gdk IMPORT gdk_display_get_default; FROM GtkUtils IMPORT Connect, Unref; FROM SYSTEM IMPORT ADDRESS, ADR; FROM libc IMPORT printf; CONST AppId = "org.example.m2gtk4.TestCss"; VAR app: ADDRESS; passed: BOOLEAN; PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS); VAR window, label, provider, display: ADDRESS; ok: BOOLEAN; BEGIN ok := TRUE; provider := gtk_css_provider_new(); gtk_css_provider_load_from_string (provider, ".m2card { color: red; }"); display := gdk_display_get_default(); gtk_style_context_add_provider_for_display (display, provider, GtkStyleProviderPriorityApplication); label := gtk_label_new("styled"); gtk_widget_add_css_class(label, "m2card"); IF gtk_widget_has_css_class(label, "m2card") = 0 THEN printf("css class not applied\n"); ok := FALSE END; gtk_widget_remove_css_class(label, "m2card"); IF gtk_widget_has_css_class(label, "m2card") # 0 THEN printf("css class not removed\n"); ok := FALSE END; gtk_style_context_remove_provider_for_display (display, provider); Unref(provider); window := gtk_application_window_new(application); gtk_window_set_child(window, label); 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_css: 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_css: PASS\n"); HALT(0) ELSE printf("test_css: FAIL\n"); HALT(1) END END test_css.