mirror of
https://github.com/Ryujinx/GtkSharp.git
synced 2025-01-11 06:45:38 +00:00
2007-09-11 Mike Kestner <mkestner@novell.com>
* gtk/Gtk.metadata: virtual_method rules for GInterface generation. * generator/ReturnValue.cs (ToNative): new method for the virtual method generation. * generator/Parameters.cs (FromNative): null guarding. * generator/ManagedCallString.cs: rework for interface method generation including callback and error param support. * generator/CallbackGen.cs: Invoker support. new class that deals with persistence of native and wrapper delegates in native to managed callback method signatures. * generator/VirtualMethod.cs: support for generation of interface methods, and all the funky parameters that come with that. * generator/InterfaceGen.cs: Fill out the adapter implementation. * generator/MethodBody.cs: Initialize overload. Extend ThrowsException to support GError outside the last parameter slot. * glib/GInterfaceAttribute.cs: New attribute to mark interfaces and obtain adapter type. * glib/Object.cs (AddInterfaces): interface registration method. * glib/GInterfaceAdapter.cs: New abstract class for interface adapter generation. * glib/Makefile.am: add new files. svn path=/trunk/gtk-sharp/; revision=85658
This commit is contained in:
parent
bf1bec4f41
commit
c93ecb7f88
23
ChangeLog
23
ChangeLog
|
@ -1,3 +1,26 @@
|
||||||
|
2007-09-11 Mike Kestner <mkestner@novell.com>
|
||||||
|
|
||||||
|
* gtk/Gtk.metadata: virtual_method rules for GInterface generation.
|
||||||
|
* generator/ReturnValue.cs (ToNative): new method for the virtual
|
||||||
|
method generation.
|
||||||
|
* generator/Parameters.cs (FromNative): null guarding.
|
||||||
|
* generator/ManagedCallString.cs: rework for interface method
|
||||||
|
generation including callback and error param support.
|
||||||
|
* generator/CallbackGen.cs: Invoker support. new class that deals
|
||||||
|
with persistence of native and wrapper delegates in native to managed
|
||||||
|
callback method signatures.
|
||||||
|
* generator/VirtualMethod.cs: support for generation of interface
|
||||||
|
methods, and all the funky parameters that come with that.
|
||||||
|
* generator/InterfaceGen.cs: Fill out the adapter implementation.
|
||||||
|
* generator/MethodBody.cs: Initialize overload. Extend ThrowsException
|
||||||
|
to support GError outside the last parameter slot.
|
||||||
|
* glib/GInterfaceAttribute.cs: New attribute to mark interfaces and
|
||||||
|
obtain adapter type.
|
||||||
|
* glib/Object.cs (AddInterfaces): interface registration method.
|
||||||
|
* glib/GInterfaceAdapter.cs: New abstract class for interface
|
||||||
|
adapter generation.
|
||||||
|
* glib/Makefile.am: add new files.
|
||||||
|
|
||||||
2007-09-11 Mike Kestner <mkestner@novell.com>
|
2007-09-11 Mike Kestner <mkestner@novell.com>
|
||||||
|
|
||||||
* gtk/Object.custom (Destroy): add a null check to avoid
|
* gtk/Object.custom (Destroy): add a null check to avoid
|
||||||
|
|
|
@ -60,6 +60,14 @@ namespace GtkSharp.Generation {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string InvokerName {
|
||||||
|
get {
|
||||||
|
if (!valid)
|
||||||
|
return String.Empty;
|
||||||
|
return NS + "Sharp." + Name + "Invoker";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override string MarshalType {
|
public override string MarshalType {
|
||||||
get {
|
get {
|
||||||
if (valid)
|
if (valid)
|
||||||
|
@ -86,6 +94,72 @@ namespace GtkSharp.Generation {
|
||||||
sw.WriteLine (indent + "}");
|
sw.WriteLine (indent + "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string CastFromInt (string type)
|
||||||
|
{
|
||||||
|
return type != "int" ? "(" + type + ") " : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
string InvokeString {
|
||||||
|
get {
|
||||||
|
if (parms.Count == 0)
|
||||||
|
return String.Empty;
|
||||||
|
|
||||||
|
string[] result = new string [parms.Count];
|
||||||
|
for (int i = 0; i < parms.Count; i++) {
|
||||||
|
Parameter p = parms [i];
|
||||||
|
IGeneratable igen = p.Generatable;
|
||||||
|
|
||||||
|
if (i > 0 && parms [i - 1].IsString && p.IsLength) {
|
||||||
|
string string_name = parms [i - 1].Name;
|
||||||
|
result[i] = igen.CallByName (CastFromInt (p.CSType) + "System.Text.Encoding.UTF8.GetByteCount (" + string_name + ")");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.CallName = p.Name;
|
||||||
|
result [i] = p.CallString;
|
||||||
|
if (p.IsUserData)
|
||||||
|
result [i] = "IntPtr.Zero";
|
||||||
|
}
|
||||||
|
|
||||||
|
return String.Join (", ", result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MethodBody body;
|
||||||
|
|
||||||
|
void GenInvoker (GenerationInfo gen_info, StreamWriter sw)
|
||||||
|
{
|
||||||
|
sw.WriteLine ("\tinternal class " + Name + "Invoker {");
|
||||||
|
sw.WriteLine ();
|
||||||
|
sw.WriteLine ("\t\t" + Name + "Native native_cb;");
|
||||||
|
sw.WriteLine ();
|
||||||
|
sw.WriteLine ("\t\tinternal " + Name + "Invoker (" + Name + "Native native_cb)");
|
||||||
|
sw.WriteLine ("\t\t{");
|
||||||
|
sw.WriteLine ("\t\t\tthis.native_cb = native_cb;");
|
||||||
|
sw.WriteLine ("\t\t}");
|
||||||
|
sw.WriteLine ();
|
||||||
|
sw.WriteLine ("\t\tinternal " + QualifiedName + " Handler {");
|
||||||
|
sw.WriteLine ("\t\t\tget {");
|
||||||
|
sw.WriteLine ("\t\t\t\treturn new " + QualifiedName + "(InvokeNative);");
|
||||||
|
sw.WriteLine ("\t\t\t}");
|
||||||
|
sw.WriteLine ("\t\t}");
|
||||||
|
sw.WriteLine ();
|
||||||
|
sw.WriteLine ("\t\t" + retval.CSType + " InvokeNative (" + sig + ")");
|
||||||
|
sw.WriteLine ("\t\t{");
|
||||||
|
body.Initialize (gen_info);
|
||||||
|
string call = "native_cb (" + InvokeString + ")";
|
||||||
|
if (retval.IsVoid)
|
||||||
|
sw.WriteLine ("\t\t\t" + call + ";");
|
||||||
|
else
|
||||||
|
sw.WriteLine ("\t\t\t" + retval.CSType + " result = " + retval.FromNative (call) + ";");
|
||||||
|
body.Finish (sw, String.Empty);
|
||||||
|
if (!retval.IsVoid)
|
||||||
|
sw.WriteLine ("\t\t\treturn result;");
|
||||||
|
sw.WriteLine ("\t\t}");
|
||||||
|
sw.WriteLine ("\t}");
|
||||||
|
sw.WriteLine ();
|
||||||
|
}
|
||||||
|
|
||||||
public string GenWrapper (GenerationInfo gen_info)
|
public string GenWrapper (GenerationInfo gen_info)
|
||||||
{
|
{
|
||||||
string wrapper = Name + "Native";
|
string wrapper = Name + "Native";
|
||||||
|
@ -94,7 +168,10 @@ namespace GtkSharp.Generation {
|
||||||
if (!Validate ())
|
if (!Validate ())
|
||||||
return String.Empty;
|
return String.Empty;
|
||||||
|
|
||||||
StreamWriter sw = gen_info.OpenStream (qualname);
|
body = new MethodBody (parms);
|
||||||
|
|
||||||
|
StreamWriter save_sw = gen_info.Writer;
|
||||||
|
StreamWriter sw = gen_info.Writer = gen_info.OpenStream (qualname);
|
||||||
|
|
||||||
sw.WriteLine ("namespace " + NS + "Sharp {");
|
sw.WriteLine ("namespace " + NS + "Sharp {");
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
|
@ -105,6 +182,7 @@ namespace GtkSharp.Generation {
|
||||||
sw.WriteLine ("\t[GLib.CDeclCallback]");
|
sw.WriteLine ("\t[GLib.CDeclCallback]");
|
||||||
sw.WriteLine ("\tinternal delegate " + retval.MarshalType + " " + wrapper + "(" + parms.ImportSignature + ");");
|
sw.WriteLine ("\tinternal delegate " + retval.MarshalType + " " + wrapper + "(" + parms.ImportSignature + ");");
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
|
GenInvoker (gen_info, sw);
|
||||||
sw.WriteLine ("\tinternal class " + Name + "Wrapper {");
|
sw.WriteLine ("\tinternal class " + Name + "Wrapper {");
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
sw.WriteLine ("\t\tpublic " + retval.MarshalType + " NativeCallback (" + parms.ImportSignature + ")");
|
sw.WriteLine ("\t\tpublic " + retval.MarshalType + " NativeCallback (" + parms.ImportSignature + ")");
|
||||||
|
@ -214,6 +292,7 @@ namespace GtkSharp.Generation {
|
||||||
sw.WriteLine ("#endregion");
|
sw.WriteLine ("#endregion");
|
||||||
sw.WriteLine ("}");
|
sw.WriteLine ("}");
|
||||||
sw.Close ();
|
sw.Close ();
|
||||||
|
gen_info.Writer = save_sw;
|
||||||
return NS + "Sharp." + Name + "Wrapper";
|
return NS + "Sharp." + Name + "Wrapper";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -81,14 +81,15 @@ namespace GtkSharp.Generation {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
foreach (VirtualMethod vm in vms) {
|
foreach (VirtualMethod vm in vms) {
|
||||||
sw.WriteLine ("\t\t" + vm.NativeDelegate);
|
if (vm.IsValid)
|
||||||
|
sw.WriteLine ("\t\t" + vm.NativeDelegate);
|
||||||
}
|
}
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenerateIfaceStruct (StreamWriter sw)
|
void GenerateIfaceStruct (StreamWriter sw)
|
||||||
{
|
{
|
||||||
sw.WriteLine ("\t\t" + IfaceName + " iface;");
|
sw.WriteLine ("\t\tstatic " + IfaceName + " iface;");
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
sw.WriteLine ("\t\tstruct " + IfaceName + " {");
|
sw.WriteLine ("\t\tstruct " + IfaceName + " {");
|
||||||
sw.WriteLine ("\t\t\tpublic IntPtr gtype;");
|
sw.WriteLine ("\t\t\tpublic IntPtr gtype;");
|
||||||
|
@ -100,7 +101,11 @@ namespace GtkSharp.Generation {
|
||||||
sw.WriteLine ("\t\t\tpublic IntPtr " + member + ";");
|
sw.WriteLine ("\t\t\tpublic IntPtr " + member + ";");
|
||||||
else if (member is VirtualMethod) {
|
else if (member is VirtualMethod) {
|
||||||
VirtualMethod vm = member as VirtualMethod;
|
VirtualMethod vm = member as VirtualMethod;
|
||||||
sw.WriteLine ("\t\t\tpublic " + vm.Name + "Delegate " + vm.CName + ";");
|
bool has_method = methods [vm.Name] != null;
|
||||||
|
if (!has_method)
|
||||||
|
Console.WriteLine ("Interface " + QualifiedName + " virtual method " + vm.Name + " has no matching method to invoke.");
|
||||||
|
string type = has_method && vm.IsValid ? vm.Name + "Delegate" : "IntPtr";
|
||||||
|
sw.WriteLine ("\t\t\tpublic " + type + " " + vm.CName + ";");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,49 +113,64 @@ namespace GtkSharp.Generation {
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenerateCtor (StreamWriter sw)
|
void GenerateStaticCtor (StreamWriter sw)
|
||||||
{
|
{
|
||||||
sw.WriteLine ("\t\tprivate " + Name + "Adapter ()");
|
sw.WriteLine ("\t\tstatic " + Name + "Adapter ()");
|
||||||
sw.WriteLine ("\t\t{");
|
sw.WriteLine ("\t\t{");
|
||||||
foreach (VirtualMethod vm in vms)
|
foreach (VirtualMethod vm in vms) {
|
||||||
sw.WriteLine ("\t\t\tiface.{0} = new {1}Delegate ({1}Callback);", vm.CName, vm.Name);
|
bool has_method = methods [vm.Name] != null;
|
||||||
sw.WriteLine ("\t\t}");
|
if (has_method && vm.IsValid)
|
||||||
sw.WriteLine ();
|
sw.WriteLine ("\t\t\tiface.{0} = new {1}Delegate ({1}Callback);", vm.CName, vm.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenerateAdapterProp (StreamWriter sw)
|
|
||||||
{
|
|
||||||
sw.WriteLine ("\t\tstatic " + Name + "Adapter singleton;");
|
|
||||||
sw.WriteLine ();
|
|
||||||
sw.WriteLine ("\t\tinternal " + Name + "Adapter Adapter {");
|
|
||||||
sw.WriteLine ("\t\t\tget {");
|
|
||||||
sw.WriteLine ("\t\t\t\tif (singleton == null)");
|
|
||||||
sw.WriteLine ("\t\t\t\t\tsingleton = new " + Name + "Adapter ();");
|
|
||||||
sw.WriteLine ("\t\t\t\treturn singleton;");
|
|
||||||
sw.WriteLine ("\t\t\t}");
|
|
||||||
sw.WriteLine ("\t\t}");
|
sw.WriteLine ("\t\t}");
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenerateInitialize (StreamWriter sw)
|
void GenerateInitialize (StreamWriter sw)
|
||||||
{
|
{
|
||||||
sw.WriteLine ("\t\tpublic void Initialize (IntPtr ifaceptr, IntPtr data)");
|
sw.WriteLine ("\t\tstatic void Initialize (IntPtr ifaceptr, IntPtr data)");
|
||||||
sw.WriteLine ("\t\t{");
|
sw.WriteLine ("\t\t{");
|
||||||
sw.WriteLine ("\t\t\t" + IfaceName + " iface = (" + IfaceName + ") Marshal.PtrToStructure (ifaceptr, typeof (" + IfaceName + "));");
|
sw.WriteLine ("\t\t\t" + IfaceName + " native_iface = (" + IfaceName + ") Marshal.PtrToStructure (ifaceptr, typeof (" + IfaceName + "));");
|
||||||
foreach (VirtualMethod vm in vms)
|
foreach (VirtualMethod vm in vms)
|
||||||
sw.WriteLine ("\t\t\tiface." + vm.CName + " = this.iface." + vm.CName + ";");
|
sw.WriteLine ("\t\t\tnative_iface." + vm.CName + " = iface." + vm.CName + ";");
|
||||||
sw.WriteLine ("\t\t\tMarshal.StructureToPtr (iface, ifaceptr, false);");
|
sw.WriteLine ("\t\t\tMarshal.StructureToPtr (native_iface, ifaceptr, false);");
|
||||||
|
sw.WriteLine ("\t\t\tGCHandle gch = (GCHandle) data;");
|
||||||
|
sw.WriteLine ("\t\t\tgch.Free ();");
|
||||||
sw.WriteLine ("\t\t}");
|
sw.WriteLine ("\t\t}");
|
||||||
|
sw.WriteLine ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenerateCallbacks (StreamWriter sw)
|
void GenerateCallbacks (StreamWriter sw)
|
||||||
{
|
{
|
||||||
foreach (VirtualMethod vm in vms) {
|
foreach (VirtualMethod vm in vms) {
|
||||||
|
if (methods [vm.Name] == null)
|
||||||
|
continue;
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
vm.GenerateCallback (sw);
|
vm.GenerateCallback (sw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GenerateCtor (StreamWriter sw)
|
||||||
|
{
|
||||||
|
sw.WriteLine ("\t\tpublic " + Name + "Adapter ()");
|
||||||
|
sw.WriteLine ("\t\t{");
|
||||||
|
sw.WriteLine ("\t\t\tInitHandler = new GLib.GInterfaceInitHandler (Initialize);");
|
||||||
|
sw.WriteLine ("\t\t}");
|
||||||
|
sw.WriteLine ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GenerateGType (StreamWriter sw)
|
||||||
|
{
|
||||||
|
Method m = GetMethod ("GetType");
|
||||||
|
m.GenerateImport (sw);
|
||||||
|
sw.WriteLine ("\t\tpublic override GLib.GType GType {");
|
||||||
|
sw.WriteLine ("\t\t\tget {");
|
||||||
|
sw.WriteLine ("\t\t\t\treturn new GLib.GType (" + m.CName + " ());");
|
||||||
|
sw.WriteLine ("\t\t\t}");
|
||||||
|
sw.WriteLine ("\t\t}");
|
||||||
|
sw.WriteLine ();
|
||||||
|
}
|
||||||
|
|
||||||
void GenerateAdapter (GenerationInfo gen_info)
|
void GenerateAdapter (GenerationInfo gen_info)
|
||||||
{
|
{
|
||||||
StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name + "Adapter");
|
StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name + "Adapter");
|
||||||
|
@ -166,10 +186,11 @@ namespace GtkSharp.Generation {
|
||||||
|
|
||||||
GenerateDelegates (sw);
|
GenerateDelegates (sw);
|
||||||
GenerateIfaceStruct (sw);
|
GenerateIfaceStruct (sw);
|
||||||
GenerateCtor (sw);
|
GenerateStaticCtor (sw);
|
||||||
GenerateAdapterProp (sw);
|
|
||||||
GenerateInitialize (sw);
|
|
||||||
GenerateCallbacks (sw);
|
GenerateCallbacks (sw);
|
||||||
|
GenerateInitialize (sw);
|
||||||
|
GenerateCtor (sw);
|
||||||
|
GenerateGType (sw);
|
||||||
|
|
||||||
sw.WriteLine ("\t}");
|
sw.WriteLine ("\t}");
|
||||||
sw.WriteLine ("#endregion");
|
sw.WriteLine ("#endregion");
|
||||||
|
@ -253,11 +274,12 @@ namespace GtkSharp.Generation {
|
||||||
Statistics.IFaceCount++;
|
Statistics.IFaceCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if false
|
||||||
public void GenerateNotQuiteReadyYet (GenerationInfo gen_info)
|
public void GenerateNotQuiteReadyYet (GenerationInfo gen_info)
|
||||||
{
|
{
|
||||||
ArrayList tmp = new ArrayList ();
|
ArrayList tmp = new ArrayList ();
|
||||||
foreach (VirtualMethod vm in vms) {
|
foreach (VirtualMethod vm in vms) {
|
||||||
if (vm.Validate())
|
if (vm.IsValid)
|
||||||
tmp.Add (vm);
|
tmp.Add (vm);
|
||||||
else {
|
else {
|
||||||
members.Remove (vm);
|
members.Remove (vm);
|
||||||
|
@ -268,9 +290,11 @@ namespace GtkSharp.Generation {
|
||||||
GenerateAdapter (gen_info);
|
GenerateAdapter (gen_info);
|
||||||
GenerateInterface (gen_info);
|
GenerateInterface (gen_info);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
public override void Generate (GenerationInfo gen_info)
|
public override void Generate (GenerationInfo gen_info)
|
||||||
{
|
{
|
||||||
|
GenerateAdapter (gen_info);
|
||||||
StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
|
StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
|
||||||
|
|
||||||
sw.WriteLine ("namespace " + NS + " {");
|
sw.WriteLine ("namespace " + NS + " {");
|
||||||
|
@ -278,6 +302,7 @@ namespace GtkSharp.Generation {
|
||||||
sw.WriteLine ("\tusing System;");
|
sw.WriteLine ("\tusing System;");
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
sw.WriteLine ("#region Autogenerated code");
|
sw.WriteLine ("#region Autogenerated code");
|
||||||
|
sw.WriteLine ("\t[GLib.GInterface (typeof (" + Name + "Adapter))]");
|
||||||
sw.WriteLine ("\tpublic interface " + Name + " : GLib.IWrapper {");
|
sw.WriteLine ("\tpublic interface " + Name + " : GLib.IWrapper {");
|
||||||
sw.WriteLine ();
|
sw.WriteLine ();
|
||||||
|
|
||||||
|
|
|
@ -29,18 +29,26 @@ namespace GtkSharp.Generation {
|
||||||
|
|
||||||
ArrayList parms = new ArrayList ();
|
ArrayList parms = new ArrayList ();
|
||||||
ArrayList special = new ArrayList ();
|
ArrayList special = new ArrayList ();
|
||||||
|
bool has_error;
|
||||||
|
|
||||||
public ManagedCallString (Parameters parms)
|
public ManagedCallString (Parameters parms)
|
||||||
{
|
{
|
||||||
for (int i = 1; i < parms.Count; i ++) {
|
for (int i = 1; i < parms.Count; i ++) {
|
||||||
Parameter p = parms [i];
|
Parameter p = parms [i];
|
||||||
if (p.IsLength && parms [i-1].IsString)
|
if (p.IsLength && parms [i-1].IsString)
|
||||||
continue;
|
continue;
|
||||||
|
else if (p.Scope == "notified")
|
||||||
|
i += 2;
|
||||||
|
|
||||||
|
else if (p is ErrorParameter) {
|
||||||
|
has_error = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
this.parms.Add (p);
|
this.parms.Add (p);
|
||||||
|
|
||||||
IGeneratable igen = p.Generatable;
|
if (p.PassAs != String.Empty && (p.Name != p.FromNative (p.Name)))
|
||||||
if ((igen is StructGen || p.PassAs != "") &&
|
this.special.Add (true);
|
||||||
(p.Name != p.FromNative (p.Name)))
|
else if (p.Generatable is CallbackGen)
|
||||||
this.special.Add (true);
|
this.special.Add (true);
|
||||||
else
|
else
|
||||||
this.special.Add (false);
|
this.special.Add (false);
|
||||||
|
@ -51,6 +59,9 @@ namespace GtkSharp.Generation {
|
||||||
{
|
{
|
||||||
string ret = "";
|
string ret = "";
|
||||||
|
|
||||||
|
if (has_error)
|
||||||
|
ret = indent + "error = IntPtr.Zero;\n";
|
||||||
|
|
||||||
for (int i = 0; i < parms.Count; i ++) {
|
for (int i = 0; i < parms.Count; i ++) {
|
||||||
if ((bool)special[i] == false)
|
if ((bool)special[i] == false)
|
||||||
continue;
|
continue;
|
||||||
|
@ -58,10 +69,14 @@ namespace GtkSharp.Generation {
|
||||||
Parameter p = parms [i] as Parameter;
|
Parameter p = parms [i] as Parameter;
|
||||||
IGeneratable igen = p.Generatable;
|
IGeneratable igen = p.Generatable;
|
||||||
|
|
||||||
ret += indent + igen.QualifiedName + " my" + p.Name;
|
if (igen is CallbackGen) {
|
||||||
if (igen is StructGen || p.PassAs == "ref")
|
ret += indent + String.Format ("{0} {1}_invoker = new {0} ({1});\n", (igen as CallbackGen).InvokerName, p.Name);
|
||||||
ret += " = " + p.FromNative (p.Name);
|
} else {
|
||||||
ret += ";\n";
|
ret += indent + igen.QualifiedName + " my" + p.Name;
|
||||||
|
if (p.PassAs == "ref")
|
||||||
|
ret += " = " + p.FromNative (p.Name);
|
||||||
|
ret += ";\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -77,7 +92,10 @@ namespace GtkSharp.Generation {
|
||||||
for (int i = 0; i < parms.Count; i ++) {
|
for (int i = 0; i < parms.Count; i ++) {
|
||||||
Parameter p = parms [i] as Parameter;
|
Parameter p = parms [i] as Parameter;
|
||||||
result [i] = p.PassAs == "" ? "" : p.PassAs + " ";
|
result [i] = p.PassAs == "" ? "" : p.PassAs + " ";
|
||||||
result [i] += ((bool)special[i]) ? "my" + p.Name : p.FromNative (p.Name);
|
if (p.Generatable is CallbackGen)
|
||||||
|
result [i] += p.Name + "_invoker.Handler";
|
||||||
|
else
|
||||||
|
result [i] += ((bool)special[i]) ? "my" + p.Name : p.FromNative (p.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
return String.Join (", ", result);
|
return String.Join (", ", result);
|
||||||
|
@ -94,7 +112,9 @@ namespace GtkSharp.Generation {
|
||||||
Parameter p = parms [i] as Parameter;
|
Parameter p = parms [i] as Parameter;
|
||||||
IGeneratable igen = p.Generatable;
|
IGeneratable igen = p.Generatable;
|
||||||
|
|
||||||
if (igen is StructBase)
|
if (igen is CallbackGen)
|
||||||
|
continue;
|
||||||
|
else if (igen is StructBase || igen is ByRefGen)
|
||||||
ret += indent + String.Format ("if ({0} != IntPtr.Zero) System.Runtime.InteropServices.Marshal.StructureToPtr (my{0}, {0}, false);\n", p.Name);
|
ret += indent + String.Format ("if ({0} != IntPtr.Zero) System.Runtime.InteropServices.Marshal.StructureToPtr (my{0}, {0}, false);\n", p.Name);
|
||||||
else
|
else
|
||||||
ret += indent + p.Name + " = " + igen.ToNativeReturn ("my" + p.Name) + ";\n";
|
ret += indent + p.Name + " = " + igen.ToNativeReturn ("my" + p.Name) + ";\n";
|
||||||
|
|
|
@ -75,6 +75,11 @@ namespace GtkSharp.Generation {
|
||||||
return String.Join (", ", result);
|
return String.Join (", ", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Initialize (GenerationInfo gen_info)
|
||||||
|
{
|
||||||
|
Initialize (gen_info, false, false, String.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
public void Initialize (GenerationInfo gen_info, bool is_get, bool is_set, string indent)
|
public void Initialize (GenerationInfo gen_info, bool is_get, bool is_set, string indent)
|
||||||
{
|
{
|
||||||
if (parameters.Count == 0)
|
if (parameters.Count == 0)
|
||||||
|
@ -124,7 +129,6 @@ namespace GtkSharp.Generation {
|
||||||
sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
|
sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,10 +162,17 @@ namespace GtkSharp.Generation {
|
||||||
|
|
||||||
public bool ThrowsException {
|
public bool ThrowsException {
|
||||||
get {
|
get {
|
||||||
if (parameters.Count < 1)
|
int idx = parameters.Count - 1;
|
||||||
return false;
|
|
||||||
|
|
||||||
return parameters [parameters.Count - 1].CType == "GError**";
|
while (idx >= 0) {
|
||||||
|
if (parameters [idx].IsUserData)
|
||||||
|
idx--;
|
||||||
|
else if (parameters [idx].CType == "GError**")
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -285,7 +285,9 @@ namespace GtkSharp.Generation {
|
||||||
|
|
||||||
public string FromNative (string var)
|
public string FromNative (string var)
|
||||||
{
|
{
|
||||||
if (Generatable is HandleBase)
|
if (Generatable == null)
|
||||||
|
return String.Empty;
|
||||||
|
else if (Generatable is HandleBase)
|
||||||
return ((HandleBase)Generatable).FromNative (var, Owned);
|
return ((HandleBase)Generatable).FromNative (var, Owned);
|
||||||
else
|
else
|
||||||
return Generatable.FromNative (var);
|
return Generatable.FromNative (var);
|
||||||
|
|
|
@ -137,6 +137,22 @@ namespace GtkSharp.Generation {
|
||||||
return IGen.FromNativeReturn (var);
|
return IGen.FromNativeReturn (var);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string ToNative (string var)
|
||||||
|
{
|
||||||
|
if (IGen == null)
|
||||||
|
return String.Empty;
|
||||||
|
|
||||||
|
if (ElementType.Length > 0) {
|
||||||
|
string args = ", typeof (" + ElementType + "), " + (Owned ? "true" : "false") + ", " + (ElementsOwned ? "true" : "false");
|
||||||
|
var = "new " + IGen.QualifiedName + "(" + var + args + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IGen is IManualMarshaler)
|
||||||
|
return (IGen as IManualMarshaler).AllocNative (var);
|
||||||
|
else
|
||||||
|
return IGen.ToNativeReturn (var);
|
||||||
|
}
|
||||||
|
|
||||||
public bool Validate ()
|
public bool Validate ()
|
||||||
{
|
{
|
||||||
if (MarshalType == "" || CSType == "") {
|
if (MarshalType == "" || CSType == "") {
|
||||||
|
|
|
@ -53,6 +53,24 @@ namespace GtkSharp.Generation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsGetter {
|
||||||
|
get {
|
||||||
|
return (Name.StartsWith ("Get") || Name.StartsWith ("Has")) && ((!retval.IsVoid && parms.Count == 1) || (retval.IsVoid && parms.Count == 2 && parms [1].PassAs == "out"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsSetter {
|
||||||
|
get {
|
||||||
|
if (!Name.StartsWith ("Set") || !retval.IsVoid)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (parms.Count == 2 || (parms.Count == 4 && parms [1].Scope == "notified"))
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public string MarshalReturnType {
|
public string MarshalReturnType {
|
||||||
get {
|
get {
|
||||||
return SymbolTable.Table.GetToNativeReturnType (elem["return-type"].GetAttribute("type"));
|
return SymbolTable.Table.GetToNativeReturnType (elem["return-type"].GetAttribute("type"));
|
||||||
|
@ -73,39 +91,64 @@ namespace GtkSharp.Generation {
|
||||||
|
|
||||||
public void GenerateCallback (StreamWriter sw)
|
public void GenerateCallback (StreamWriter sw)
|
||||||
{
|
{
|
||||||
|
if (!Validate ())
|
||||||
|
return;
|
||||||
|
|
||||||
ManagedCallString call = new ManagedCallString (parms);
|
ManagedCallString call = new ManagedCallString (parms);
|
||||||
string type = parms [0].CSType;
|
string type = parms [0].CSType;
|
||||||
string name = parms [0].Name;
|
string name = parms [0].Name;
|
||||||
string call_string = "__obj." + Name + " (" + call + ")";
|
string call_string = "__obj." + Name + " (" + call + ")";
|
||||||
|
if (IsGetter)
|
||||||
|
call_string = "__obj." + (Name.StartsWith ("Get") ? Name.Substring (3) : Name);
|
||||||
|
else if (IsSetter)
|
||||||
|
call_string = "__obj." + Name.Substring (3) + " = " + call;
|
||||||
sw.WriteLine ("\t\tstatic " + MarshalReturnType + " " + Name + "Callback (" + parms.ImportSignature + ")");
|
sw.WriteLine ("\t\tstatic " + MarshalReturnType + " " + Name + "Callback (" + parms.ImportSignature + ")");
|
||||||
sw.WriteLine ("\t\t{");
|
sw.WriteLine ("\t\t{");
|
||||||
sw.WriteLine ("\t\t\t" + type + " __obj = GLib.Object.GetObject (" + name + ", false) as " + type + ";");
|
sw.WriteLine ("\t\t\t" + type + " __obj = GLib.Object.GetObject (" + name + ", false) as " + type + ";");
|
||||||
sw.Write (call.Setup ("\t\t\t"));
|
sw.Write (call.Setup ("\t\t\t"));
|
||||||
if (retval.CSType == "void")
|
if (retval.IsVoid) {
|
||||||
sw.WriteLine ("\t\t\t" + call_string + ";");
|
if (IsGetter) {
|
||||||
else {
|
Parameter p = parms [1];
|
||||||
sw.WriteLine ("\t\t\treturn " + SymbolTable.Table.ToNativeReturn (retval.CType, call_string) + ";");
|
string out_name = p.Name;
|
||||||
}
|
if (p.MarshalType != p.CSType)
|
||||||
|
out_name = "my" + out_name;
|
||||||
|
sw.WriteLine ("\t\t\t" + out_name + " = " + call_string + ";");
|
||||||
|
} else
|
||||||
|
sw.WriteLine ("\t\t\t" + call_string + ";");
|
||||||
|
} else
|
||||||
|
sw.WriteLine ("\t\t\t" + retval.ToNativeType + " result = " + retval.ToNative (call_string) + ";");
|
||||||
sw.Write (call.Finish ("\t\t\t"));
|
sw.Write (call.Finish ("\t\t\t"));
|
||||||
|
if (!retval.IsVoid)
|
||||||
|
sw.WriteLine ("\t\t\treturn result;");
|
||||||
sw.WriteLine ("\t\t}");
|
sw.WriteLine ("\t\t}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Validate ()
|
enum ValidState {
|
||||||
|
Unvalidated,
|
||||||
|
Invalid,
|
||||||
|
Valid
|
||||||
|
}
|
||||||
|
|
||||||
|
ValidState vstate = ValidState.Unvalidated;
|
||||||
|
|
||||||
|
public bool IsValid {
|
||||||
|
get {
|
||||||
|
if (vstate == ValidState.Unvalidated)
|
||||||
|
return Validate ();
|
||||||
|
else
|
||||||
|
return vstate == ValidState.Valid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Validate ()
|
||||||
{
|
{
|
||||||
if (!parms.Validate () || !retval.Validate ()) {
|
if (!parms.Validate () || !retval.Validate ()) {
|
||||||
Console.Write ("in virtual method " + Name + " ");
|
Console.Write ("in virtual method " + Name + " ");
|
||||||
|
vstate = ValidState.Invalid;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < parms.Count; i++) {
|
vstate = ValidState.Valid;
|
||||||
Parameter p = parms [i];
|
|
||||||
if (p.Generatable is CallbackGen) {
|
|
||||||
Console.Write("Callback: " + p.CSType + " in virtual method " + Name + " ");
|
|
||||||
Statistics.ThrottledCount++;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
67
glib/GInterfaceAdapter.cs
Normal file
67
glib/GInterfaceAdapter.cs
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
// GInterfaceAdapter.cs
|
||||||
|
//
|
||||||
|
// Author: Mike Kestner <mkestner@novell.com>
|
||||||
|
//
|
||||||
|
// Copyright (c) 2007 Novell, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of version 2 of the Lesser GNU General
|
||||||
|
// Public License as published by the Free Software Foundation.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// Lesser General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser General Public
|
||||||
|
// License along with this program; if not, write to the
|
||||||
|
// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
// Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
|
||||||
|
namespace GLib {
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
public delegate void GInterfaceInitHandler (IntPtr iface_ptr, IntPtr data);
|
||||||
|
|
||||||
|
internal delegate void GInterfaceFinalizeHandler (IntPtr iface_ptr, IntPtr data);
|
||||||
|
|
||||||
|
internal struct GInterfaceInfo {
|
||||||
|
internal GInterfaceInitHandler InitHandler;
|
||||||
|
internal GInterfaceFinalizeHandler FinalizeHandler;
|
||||||
|
internal IntPtr Data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract class GInterfaceAdapter {
|
||||||
|
|
||||||
|
GInterfaceInfo info;
|
||||||
|
|
||||||
|
protected GInterfaceAdapter ()
|
||||||
|
{
|
||||||
|
info.FinalizeHandler = new GInterfaceFinalizeHandler (Finalize);
|
||||||
|
info.Data = (IntPtr) GCHandle.Alloc (this);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected GInterfaceInitHandler InitHandler {
|
||||||
|
set {
|
||||||
|
info.InitHandler = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract GType GType { get; }
|
||||||
|
|
||||||
|
internal GInterfaceInfo Info {
|
||||||
|
get {
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Finalize (IntPtr iface_ptr, IntPtr data)
|
||||||
|
{
|
||||||
|
GCHandle gch = (GCHandle) data;
|
||||||
|
gch.Free ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
42
glib/GInterfaceAttribute.cs
Normal file
42
glib/GInterfaceAttribute.cs
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// GInterfaceAttribute.cs
|
||||||
|
//
|
||||||
|
// Copyright (c) 2007 Novell, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of version 2 of the Lesser GNU General
|
||||||
|
// Public License as published by the Free Software Foundation.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// Lesser General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser General Public
|
||||||
|
// License along with this program; if not, write to the
|
||||||
|
// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
// Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
|
||||||
|
namespace GLib {
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
[AttributeUsage (AttributeTargets.Interface)]
|
||||||
|
public sealed class GInterfaceAttribute : Attribute {
|
||||||
|
Type adapter_type;
|
||||||
|
|
||||||
|
public GInterfaceAttribute (Type adapter_type)
|
||||||
|
{
|
||||||
|
this.adapter_type = adapter_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Type AdapterType {
|
||||||
|
get {
|
||||||
|
return adapter_type;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
adapter_type = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,6 +28,8 @@ sources = \
|
||||||
ExceptionManager.cs \
|
ExceptionManager.cs \
|
||||||
FileUtils.cs \
|
FileUtils.cs \
|
||||||
GException.cs \
|
GException.cs \
|
||||||
|
GInterfaceAdapter.cs \
|
||||||
|
GInterfaceAttribute.cs \
|
||||||
GString.cs \
|
GString.cs \
|
||||||
GType.cs \
|
GType.cs \
|
||||||
GTypeAttribute.cs \
|
GTypeAttribute.cs \
|
||||||
|
|
|
@ -183,6 +183,24 @@ namespace GLib {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DllImport("libgobject-2.0-0.dll")]
|
||||||
|
static extern void g_type_add_interface_static (IntPtr gtype, IntPtr iface_type, ref GInterfaceInfo info);
|
||||||
|
|
||||||
|
static void AddInterfaces (GType gtype, Type t)
|
||||||
|
{
|
||||||
|
foreach (Type iface in t.GetInterfaces ()) {
|
||||||
|
if (!iface.IsDefined (typeof (GInterfaceAttribute), true) || iface.IsAssignableFrom (t.BaseType))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
GInterfaceAttribute attr = iface.GetCustomAttributes (typeof (GInterfaceAttribute), false) [0] as GInterfaceAttribute;
|
||||||
|
GInterfaceAdapter adapter = Activator.CreateInstance (attr.AdapterType, null) as GInterfaceAdapter;
|
||||||
|
|
||||||
|
GInterfaceInfo info = adapter.Info;
|
||||||
|
g_type_add_interface_static (gtype.Val, adapter.GType.Val, ref info);
|
||||||
|
Console.WriteLine (adapter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[DllImport("glibsharpglue-2")]
|
[DllImport("glibsharpglue-2")]
|
||||||
static extern IntPtr gtksharp_register_type (IntPtr name, IntPtr parent_type);
|
static extern IntPtr gtksharp_register_type (IntPtr name, IntPtr parent_type);
|
||||||
|
|
||||||
|
@ -221,6 +239,7 @@ namespace GLib {
|
||||||
GLib.GType.Register (gtype, t);
|
GLib.GType.Register (gtype, t);
|
||||||
ConnectDefaultHandlers (gtype, t);
|
ConnectDefaultHandlers (gtype, t);
|
||||||
InvokeClassInitializers (gtype, t);
|
InvokeClassInitializers (gtype, t);
|
||||||
|
AddInterfaces (gtype, t);
|
||||||
g_types[t] = gtype;
|
g_types[t] = gtype;
|
||||||
return gtype;
|
return gtype;
|
||||||
}
|
}
|
||||||
|
|
|
@ -128,6 +128,10 @@
|
||||||
<attr path="/api/namespace/interface[@cname='GtkEditable']/signal[@name='DeleteText']" name="name">TextDeleted</attr>
|
<attr path="/api/namespace/interface[@cname='GtkEditable']/signal[@name='DeleteText']" name="name">TextDeleted</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkEditable']/signal[@name='InsertText']/*/*[@name='position']" name="pass_as">ref</attr>
|
<attr path="/api/namespace/interface[@cname='GtkEditable']/signal[@name='InsertText']/*/*[@name='position']" name="pass_as">ref</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkEditable']/signal[@name='InsertText']" name="name">TextInserted</attr>
|
<attr path="/api/namespace/interface[@cname='GtkEditable']/signal[@name='InsertText']" name="name">TextInserted</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkEditable']/virtual_method[@name='DoDeleteText']" name="name">DeleteText</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkEditable']/virtual_method[@name='DoInsertText']" name="name">InsertText</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkEditable']/virtual_method[@cname='do_insert_text']/*/*[@name='position']" name="pass_as">ref</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkEditable']/virtual_method[@name='SetSelectionBounds']" name="name">SelectRegion</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/property[@name='Action']" name="new_flag">1</attr>
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/property[@name='Action']" name="new_flag">1</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/method[@name='GetCurrentFolder']/return-type" name="type">gfilename*</attr>
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/method[@name='GetCurrentFolder']/return-type" name="type">gfilename*</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/method[@name='GetFilename']/return-type" name="type">gfilename*</attr>
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/method[@name='GetFilename']/return-type" name="type">gfilename*</attr>
|
||||||
|
@ -146,17 +150,30 @@
|
||||||
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/method[@cname='gtk_file_chooser_list_shortcut_folder_uris']/return-type" name="element_type">gchar*</attr>
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/method[@cname='gtk_file_chooser_list_shortcut_folder_uris']/return-type" name="element_type">gchar*</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/method[@cname='gtk_file_chooser_list_shortcut_folder_uris']/return-type" name="elements_owned">true</attr>
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/method[@cname='gtk_file_chooser_list_shortcut_folder_uris']/return-type" name="elements_owned">true</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/method[@cname='gtk_file_chooser_list_shortcut_folder_uris']/return-type" name="owned">true</attr>
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/method[@cname='gtk_file_chooser_list_shortcut_folder_uris']/return-type" name="owned">true</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/virtual_method[@name='GetPaths']" name="name">GetFilenames</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/virtual_method[@cname='get_paths']/return-type" name="element_type">gfilename*</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/virtual_method[@cname='get_paths']/return-type" name="elements_owned">true</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/virtual_method[@cname='get_paths']/return-type" name="owned">true</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/virtual_method[@name='ListFilters']" name="name">GetFilters</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/virtual_method[@cname='list_filters']/return-type" name="element_type">gchar*</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/virtual_method[@cname='list_filters']/return-type" name="elements_owned">true</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/virtual_method[@cname='list_filters']/return-type" name="owned">true</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/virtual_method[@name='ListShortcutFolders']" name="name">GetShortcutFolders</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/virtual_method[@cname='list_shortcut_folders']/return-type" name="element_type">gchar*</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/virtual_method[@cname='list_shortcut_folders']/return-type" name="elements_owned">true</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkFileChooser']/virtual_method[@cname='list_shortcut_folders']/return-type" name="owned">true</attr>
|
||||||
|
<attr path="/api/namespace/interface[@cname='GtkRecentChooser']/virtual_method[@name='GetRecentManager']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='Foreach']/*/*[@name='func']" name="scope">call</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='Foreach']/*/*[@name='func']" name="scope">call</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='GetIterFirst']/*/*[@name='iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/*[@name='GetIterFirst']/*/*[@name='iter']" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='Get']" name="hidden">1</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='Get']" name="hidden">1</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='GetIterFromString']/*/*[@name='iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/*[@name='GetIterFromString']/*/*[@name='iter']" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='GetIter']/*/*[@name='iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/*[@name='GetIter']/*/*[@name='iter']" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='GetPath']/return-type" name="owned">true</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/*[@name='GetPath']/return-type" name="owned">true</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='GetValue']/*/*[@name='value']" name="pass_as">ref</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/*[@name='GetValue']/*/*[@name='value']" name="pass_as">ref</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='IterChildren']/*/*[@name='iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/*[@name='IterChildren']/*/*[@name='iter']" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='IterNext']/*/*[@name='iter']" name="pass_as">ref</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/*[@name='IterNext']/*/*[@name='iter']" name="pass_as">ref</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='IterNthChild']/*/*[@name='iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/*[@name='IterNthChild']/*/*[@name='iter']" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='IterParent']/*/*[@name='iter']" name="pass_as">out</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/*[@name='IterParent']/*/*[@name='iter']" name="pass_as">out</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='RowChanged']" name="name">EmitRowChanged</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='RowChanged']" name="name">EmitRowChanged</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='RowDeleted']" name="name">EmitRowDeleted</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='RowDeleted']" name="name">EmitRowDeleted</attr>
|
||||||
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='RowHasChildToggled']" name="name">EmitRowHasChildToggled</attr>
|
<attr path="/api/namespace/interface[@cname='GtkTreeModel']/method[@name='RowHasChildToggled']" name="name">EmitRowHasChildToggled</attr>
|
||||||
|
|
Loading…
Reference in a new issue