DEFINITION MODULE FOR "C" GtkCustomFilter ; (* m2-GTK4 - GtkCustomFilter: a GtkFilter whose match test is a callback. Mapped onto . The match function has the C shape gboolean match(gpointer item, gpointer user_data); Pass a top-level Modula-2 PROCEDURE (item, user: ADDRESS) : INTEGER as its address: filter := gtk_custom_filter_new(ADR(Match), NIL, NIL); Call gtk_custom_filter_changed-equivalent by re-setting the filter function (or use gtk_filter_changed from GtkFilter) to re-run it. *) FROM SYSTEM IMPORT ADDRESS; EXPORT UNQUALIFIED GtkCustomFilter, GtkCustomFilterFunc, gtk_custom_filter_new, gtk_custom_filter_set_filter_func; TYPE GtkCustomFilter = ADDRESS; (* gboolean func(gpointer item, gpointer user_data) *) GtkCustomFilterFunc = ADDRESS; (* GtkCustomFilter *gtk_custom_filter_new(GtkCustomFilterFunc match_func, gpointer user_data, GDestroyNotify user_destroy) *) PROCEDURE gtk_custom_filter_new (match_func: GtkCustomFilterFunc; user_data: ADDRESS; user_destroy: ADDRESS) : GtkCustomFilter; (* void gtk_custom_filter_set_filter_func(GtkCustomFilter *self, GtkCustomFilterFunc match_func, gpointer user_data, GDestroyNotify user_destroy) *) PROCEDURE gtk_custom_filter_set_filter_func (self: GtkCustomFilter; match_func: GtkCustomFilterFunc; user_data: ADDRESS; user_destroy: ADDRESS); END GtkCustomFilter.