let marshal f argv =
        match Closure.get_args argv with
        | _ :: [`POINTER(Some p)] ->
            let ev = GdkEvent.unsafe_copy p in
            Closure.set_result argv (`BOOL(f ev))
        | _ -> invalid_arg "GtkBase.Widget.Event.marshal"