// Glib.Signals.Simple.cs - Glib Simple Signal implementation // // Author: Bob Smith // // (c) 2001 Bob Smith namespace Glib.Signals { using System; using System.Runtime.InteropServices; using Glib; public delegate void SimpleDelegate(IntPtr obj, IntPtr data); public class Simple { public Simple(){} private static void SimpleCallback(IntPtr obj, IntPtr data) { Glib.Object o = Glib.Object.GetObject(obj); EventHandler eh = o.Events[(int)data]; if (eh != null) { eh(o, EventArgs.Empty); } } private static int _simpleRefCount = 0; private static SimpleDelegate _simpleDelegate; private static GCHandle _simpleGCHandle; public static SimpleDelegate Delegate { get { if (Simple._simpleDelegate == null) { Simple._simpleDelegate = new SimpleDelegate(SimpleCallback); Simple._simpleGCHandle = GCHandle.Alloc (Simple._simpleDelegate, GCHandleType.Pinned); } Simple._simpleRefCount++; return Simple._simpleDelegate; } } public static void Unref() { Simple._simpleRefCount--; if (Simple._simpleRefCount < 1) { Simple._simpleRefCount = 0; Simple._simpleGCHandle.free(); Simple._simpleDelegate = null; } } } }