2002-06-24 Rachel Hestilow <hestilow@ximian.com>

* glib/UnwrappedObject.cs: New class which holds an IntPtr.
	This is used in Value so that we can retrieve the IntPtr itself
	for an object property.

	* glib/Value.cs: Add UnwrappedObject cast operator.

	* glib/Property.cs: If the retrieved value is an object,
	and there is no wrapper object, create a new one.

svn path=/trunk/gtk-sharp/; revision=5440
This commit is contained in:
Rachel Hestilow 2002-06-24 23:38:51 +00:00
parent 594457e5ec
commit 414a14d93e
7 changed files with 73 additions and 6 deletions

View File

@ -1,3 +1,14 @@
2002-06-24 Rachel Hestilow <hestilow@ximian.com>
* glib/UnwrappedObject.cs: New class which holds an IntPtr.
This is used in Value so that we can retrieve the IntPtr itself
for an object property.
* glib/Value.cs: Add UnwrappedObject cast operator.
* glib/Property.cs: If the retrieved value is an object,
and there is no wrapper object, create a new one.
2002-06-24 Rachel Hestilow <hestilow@ximian.com>
* gtk/FileSelection.custom: Remove random cruft that was

View File

@ -81,6 +81,7 @@ pango/Makefile
atk/Makefile
gdk/Makefile
gtk/Makefile
gnome/Makefile
sample/Makefile
])

View File

@ -81,11 +81,22 @@ namespace GtkSharp.Generation {
sw.WriteLine("\t\t\tget {");
sw.WriteLine("\t\t\t\tGLib.Value val = new GLib.Value (Handle, " + cname + ");");
sw.WriteLine("\t\t\t\tGetProperty(" + cname + ", val);");
sw.Write("\t\t\t\treturn (" + cs_type + ") ");
if (v_type != "") {
sw.Write(v_type + " ");
if (SymbolTable.IsObject (c_type))
{
sw.WriteLine("\t\t\t\tSystem.IntPtr raw_ret = (System.IntPtr) (GLib.UnwrappedObject) val;");
sw.WriteLine("\t\t\t\t" + cs_type + " ret = " + SymbolTable.FromNative(c_type, "raw_ret") + ";");
sw.WriteLine("\t\t\t\tif (ret == null) ret = new " + cs_type + "(raw_ret);");
}
sw.WriteLine("val;");
else {
sw.Write("\t\t\t\t" + cs_type + " ret = ");
sw.Write ("(" + cs_type + ") ");
if (v_type != "") {
sw.Write(v_type + " ");
}
sw.WriteLine("val;");
}
sw.WriteLine("\t\t\t\treturn ret;");
sw.WriteLine("\t\t\t}");
}

26
glib/UnwrappedObject.cs Normal file
View File

@ -0,0 +1,26 @@
// UnwrappedObject.cs - Class which holds an IntPtr without resolving it:
//
// Author: Rachel Hestilow <hestilow@ximian.com>
//
// (c) 2002 Rachel Hestilow
namespace GLib {
using System;
using System.Runtime.InteropServices;
// <summary> Unwrapped object class </summary>
// <remarks> </remarks>
public class UnwrappedObject {
IntPtr obj;
public UnwrappedObject (IntPtr obj) {
this.obj = obj;
}
public static explicit operator System.IntPtr (UnwrappedObject obj) {
return obj.obj;
}
}
}

View File

@ -357,6 +357,24 @@ namespace GLib {
return GLib.Object.GetObject(g_value_get_object (val._val));
}
/// <summary>
/// Value to Unresolved Object Conversion
/// </summary>
///
/// <remarks>
/// Extracts an object from a Value without looking up its wrapping
/// class.
/// Note, this method will produce an exception if the Value does
/// not hold a object value.
/// </remarks>
public static explicit operator GLib.UnwrappedObject (Value val)
{
// FIXME: Insert an appropriate exception here if
// _val.type indicates an error.
return new UnwrappedObject(g_value_get_object (val._val));
}
[DllImport("gobject-2.0")]
static extern IntPtr g_value_get_pointer (IntPtr val);

View File

@ -1,4 +1,4 @@
DIRS=generator glib pango atk gdk gtk sample
DIRS=generator glib pango atk gdk gtk gnome sample
ROOT=/cygdrive/$(subst \,/,$(subst :\,/,$(SYSTEMROOT)))
CSC=$(ROOT)/microsoft.net/framework/v1.0.3705/csc.exe
MCS=mcs

View File

@ -1,4 +1,4 @@
DIRS=generator glib pango atk gdk gtk sample
DIRS=generator glib pango atk gdk gtk gnome sample
ROOT=/cygdrive/$(subst \,/,$(subst :\,/,$(SYSTEMROOT)))
CSC=$(ROOT)/microsoft.net/framework/v1.0.3705/csc.exe