gi: support SourceFunc callback