Пример #1
0
        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)));
        }
Пример #2
0
        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);
        }
Пример #3
0
    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));
    }
Пример #4
0
		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);
		}