GtkSharp/gconf/GConf/NotifyWrapper.cs

42 lines
1 KiB
C#
Raw Normal View History

namespace GConf
{
using System;
using System.Collections;
internal delegate void NotifyFuncNative (IntPtr client_ptr, uint id, IntPtr entry_ptr, IntPtr user_data);
internal class NotifyWrapper
{
static ArrayList refs = new ArrayList ();
NotifyEventHandler notify;
NotifyFuncNative native;
void NotifyCB (IntPtr client_ptr, uint id, IntPtr entry_ptr, IntPtr user_data)
{
Client client = new Client (client_ptr);
_Entry entry = new _Entry (entry_ptr);
if (entry.ValuePtr == IntPtr.Zero) {
notify (client, new NotifyEventArgs (entry.Key, null));
return;
}
Value val = new Value (entry.ValuePtr);
val.Managed = false;
notify (client, new NotifyEventArgs (entry.Key, val.Get ()));
}
public NotifyWrapper (NotifyEventHandler notify)
{
this.notify = notify;
this.native = new NotifyFuncNative (this.NotifyCB);
}
public static NotifyFuncNative Wrap (NotifyEventHandler notify)
{
NotifyWrapper wrapper = new NotifyWrapper (notify);
refs.Add (wrapper);
return wrapper.native;
}
}
}