public Package[] Query(params QueryPart[] queryParts) { // FIXME: Set owned and items owned correctly GLib.SList query = new GLib.SList(IntPtr.Zero, typeof(IntPtr)); foreach (QueryPart part in queryParts) { IntPtr key_as_native = GLib.Marshaller.StringToPtrGStrdup(part.Key); IntPtr query_str_as_native = GLib.Marshaller.StringToPtrGStrdup(part.QueryStr); IntPtr rawPart = rc_query_part_new(key_as_native, (int)part.Type, query_str_as_native); GLib.Marshaller.Free(key_as_native); GLib.Marshaller.Free(query_str_as_native); query.Append(rawPart); } IntPtr raw_ret = rc_query_packages(Handle, query.Handle); foreach (IntPtr p in query) { rc_query_part_free(p); } query.Dispose(); return((RC.Package[])GLib.Marshaller.ListToArray(new GLib.SList(raw_ret, typeof(RC.Package), false, false), typeof(RC.Package))); }
static void ClassInit(GLib.GType gtype, Type t) { object[] attrs = t.GetCustomAttributes(typeof(BindingAttribute), true); if (attrs.Length == 0) { return; } string signame = t.Name.Replace(".", "_") + "_bindings"; IntPtr native_signame = GLib.Marshaller.StringToPtrGStrdup(signame); GLib.Object.RegisterSignal(signame, gtype, GLib.Signal.Flags.RunLast | GLib.Signal.Flags.Action, GLib.GType.None, new GLib.GType[] { GLib.GType.Long }, BindingDelegate); if (binding_invokers == null) { binding_invokers = new List <BindingInvoker> (); } foreach (BindingAttribute attr in attrs) { System.Reflection.MethodInfo mi = t.GetMethod(attr.Handler, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public); if (mi == null) { throw new Exception("Instance method " + attr.Handler + " not found in " + t); } GtkBindingArg arg = new GtkBindingArg(); arg.arg_type = GLib.GType.Long.Val; var bi = new BindingInvoker(mi, attr.Parms); binding_invokers.Add(bi); int binding_invoker_idx = binding_invokers.IndexOf(bi); #if WIN64LONGS arg.data.long_data = binding_invoker_idx; #else arg.data.long_data = new IntPtr(binding_invoker_idx); #endif GLib.SList binding_args = new GLib.SList(new object[] { arg }, typeof(GtkBindingArg), false, false); gtk_binding_entry_add_signall(gtk_binding_set_by_class(gtype.GetClassPtr()), (uint)attr.Key, attr.Mod, native_signame, binding_args.Handle); binding_args.Dispose(); } GLib.Marshaller.Free(native_signame); }
public Package[] Query (params QueryPart[] queryParts) { // FIXME: Set owned and items owned correctly GLib.SList query = new GLib.SList (IntPtr.Zero, typeof (IntPtr)); foreach (QueryPart part in queryParts) { IntPtr key_as_native = GLib.Marshaller.StringToPtrGStrdup (part.Key); IntPtr query_str_as_native = GLib.Marshaller.StringToPtrGStrdup (part.QueryStr); IntPtr rawPart = rc_query_part_new (key_as_native, (int) part.Type, query_str_as_native); GLib.Marshaller.Free (key_as_native); GLib.Marshaller.Free (query_str_as_native); query.Append (rawPart); } IntPtr raw_ret = rc_query_packages (Handle, query.Handle); foreach (IntPtr p in query) rc_query_part_free (p); query.Dispose (); return (RC.Package[]) GLib.Marshaller.ListToArray (new GLib.SList (raw_ret, typeof (RC.Package), false, false), typeof (RC.Package)); }
static void ClassInit (GLib.GType gtype, Type t) { object[] attrs = t.GetCustomAttributes (typeof (BindingAttribute), true); if (attrs.Length == 0) return; string signame = t.Name.Replace (".", "_") + "_bindings"; IntPtr native_signame = GLib.Marshaller.StringToPtrGStrdup (signame); RegisterSignal (signame, gtype, GLib.Signal.Flags.RunLast | GLib.Signal.Flags.Action, GLib.GType.None, new GLib.GType[] {GLib.GType.Long}, BindingDelegate); if (binding_invokers == null) binding_invokers = new List<BindingInvoker> (); foreach (BindingAttribute attr in attrs) { System.Reflection.MethodInfo mi = t.GetMethod (attr.Handler, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public); if (mi == null) throw new Exception ("Instance method " + attr.Handler + " not found in " + t); GtkBindingArg arg = new GtkBindingArg (); arg.arg_type = GLib.GType.Long.Val; var bi = new BindingInvoker (mi, attr.Parms); binding_invokers.Add (bi); int binding_invoker_idx = binding_invokers.IndexOf (bi); #if WIN64LONGS arg.data.long_data = binding_invoker_idx; #else arg.data.long_data = new IntPtr (binding_invoker_idx); #endif GLib.SList binding_args = new GLib.SList (new object[] {arg}, typeof (GtkBindingArg), false, false); gtk_binding_entry_add_signall (gtk_binding_set_by_class (gtype.GetClassPtr ()), (uint) attr.Key, attr.Mod, native_signame, binding_args.Handle); binding_args.Dispose (); } GLib.Marshaller.Free (native_signame); }