public static void Disconnect(GLib.Object o, string name, DynamicSignalHandler handler) { Key k = new Key (o, name); if (SignalHandlers[k] != null) { SignalInfo si = (SignalInfo)SignalHandlers[k]; Delegate newHandler = Delegate.Remove (si.RegisteredHandler, handler); if (newHandler == null || handler == null) { g_signal_handler_disconnect (o.Handle, si.HandlerId); SignalHandlers.Remove (k); } else si.RegisteredHandler = newHandler; } }
static void OnMarshal(IntPtr closure, ref GLib.Value retval, uint argc, IntPtr argsPtr, IntPtr ihint, IntPtr data) { object [] args = new object[argc - 1]; object o = ((GLib.Value)Marshal.PtrToStructure(argsPtr, typeof(GLib.Value))).Val; for (int i = 1; i < argc; i++) { IntPtr struct_ptr = (IntPtr)((long)argsPtr + (i * gvalue_struct_size)); Type detectedType = GLib.GType.LookupType(Marshal.ReadIntPtr(struct_ptr)); if (detectedType.IsSubclassOf(typeof(Opaque))) { args[i - 1] = (Opaque)Opaque.GetOpaque(g_value_peek_pointer(struct_ptr), detectedType, false); } else { GLib.Value argument = (GLib.Value)Marshal.PtrToStructure(struct_ptr, typeof(GLib.Value)); args[i - 1] = argument.Val; } } if (data == IntPtr.Zero) { Console.Error.WriteLine("No available data"); } Key k = (Key)((GCHandle)data).Target; if (k != null) { SignalArgs arg = new SignalArgs(); arg.Args = args; SignalInfo si = (SignalInfo)SignalHandlers[k]; DynamicSignalHandler handler = (DynamicSignalHandler)si.RegisteredHandler; handler(o, arg); if (arg.RetVal != null) { retval.Val = arg.RetVal; } } }
public static void Connect(GLib.Object o, string name, bool after, DynamicSignalHandler handler) { Delegate newHandler; Key k = new Key(o, name); if (SignalHandlers[k] != null) { SignalInfo si = (SignalInfo)SignalHandlers[k]; newHandler = Delegate.Combine(si.RegisteredHandler, handler); si.RegisteredHandler = newHandler; } else { IntPtr closure = g_closure_new_simple(_closureSize, IntPtr.Zero); g_closure_set_meta_marshal(closure, (IntPtr)GCHandle.Alloc(k), marshalHandler); uint signalId = g_signal_connect_closure(o.Handle, name, closure, after); SignalHandlers.Add(k, new SignalInfo(signalId, closure, handler)); } }
public static void Disconnect(GLib.Object o, string name, DynamicSignalHandler handler) { Key k = new Key(o, name); if (SignalHandlers[k] != null) { SignalInfo si = (SignalInfo)SignalHandlers[k]; Delegate newHandler = Delegate.Remove(si.RegisteredHandler, handler); if (newHandler == null || handler == null) { g_signal_handler_disconnect(o.Handle, si.HandlerId); SignalHandlers.Remove(k); } else { si.RegisteredHandler = newHandler; } } }
public static void Connect(GLib.Object o, string name, bool after, DynamicSignalHandler handler) { Delegate newHandler; Key k = new Key (o, name); if (SignalHandlers[k] != null) { SignalInfo si = (SignalInfo) SignalHandlers[k]; newHandler = Delegate.Combine (si.RegisteredHandler, handler); si.RegisteredHandler = newHandler; } else { IntPtr closure = g_closure_new_simple (_closureSize, IntPtr.Zero); g_closure_set_meta_marshal (closure, (IntPtr)GCHandle.Alloc (k), marshalHandler); uint signalId = g_signal_connect_closure (o.Handle, name, closure, after); SignalHandlers.Add (k, new SignalInfo (signalId, closure, handler)); } }
public static void Connect(GLib.Object o, string name, DynamicSignalHandler handler) { Connect(o, name, false, handler); }
public static void Connect(GLib.Object o, string name, DynamicSignalHandler handler) { Connect (o, name, false, handler); }