Commit graph

10 commits

Author SHA1 Message Date
Dan Winship
eb4fdee774 Automatic memory management for opaque types [#49565]
* glib/Opaque.cs (Owned): new property saying whether or not gtk#
	owns the memory.
	(Opaque): Set Owned to true in the void ctor and false in the
	IntPtr one.
	(GetOpaque): add a new overload that can also create opaques, a la
	GLib.Object.GetObject.
	(Ref, Unref, Free): empty virtual methods to be overridden by
	subclasses.
	(set_Raw): Unref() and possibly Free() the old value, Ref() the
	new one.
	(~Opaque, Dispose): set Raw to IntPtr.Zero (triggering Free/Unref
	if needed)

	* parser/gapi2xml.pl (addReturnElem): if the method is named Copy
	and returns a pointer, set the "owned" attribute on the
	return-type.

	* */*-api.raw: Regen
	
	* generator/HandleBase.cs (FromNative): Add new
	FromNative/FromNativeReturn overloads that takes a "bool owned"
	param. Implement the 1-arg FromNative and FromNativeReturn in
	terms of that.

	* generator/ObjectBase.cs (FromNative): Implement HandleBase's new
	overload. Use the two-arg version of GLib.Object.GetObject when
	"owned" is true.

	* generator/OpaqueGen.cs (Generate): Pull out Ref, Unref, and
	Free/Destroy/Dispose methods and handle them specially by
	overriding Opaque.Ref, .Unref, and .Free appropriately. (If any
	of the methods are marked deprecated, output a deprecated
	do-nothing method as well, to save us from having to write all
	those deprecated methods by hand.)
	(FromNative): use GetOpaque, passing "owned".

	* generator/ReturnValue.cs (FromNative): if the value is a
	HandleBase, pass Owned to its FromNative().

	* generator/Parameters.cs (Owned): new property (for use on out
	params)
	(FromNative): Call FromNative() on the generatable, handling Owned
	in the case of HandleBase.

	* generator/ManagedCallString.cs:
	* generator/MethodBody.cs:
	* generator/Signal.cs: use param.FromNative() rather than
	param.Generatable.FromNative(), to get ownership right.

	* */*.metadata: Mark opaque ref/unref/free methods deprecated
	(except where we were hiding them before). Add "owned" attributes
	to return values and out params as needed.

	* pango/AttrIterator.custom (GetFont): work around a
	memory-management oddity of the underlying method.

	* pango/AttrFontDesc.cs (AttrFontDesc): copy the passed-in
	FontDescriptor, since the attribute will assume ownership of it.

	* gtk/TreeView.custom (GetPathAtPos): set the "owned" flag on the
	returned TreePaths.

	* gtk/TargetList.custom: Remove refcounting stuff, which is
	now handled automatically

	* gtk/NodeStore.cs (GetPath): clear the Owned flag on the created
	TreePath so that the underlying structure doesn't get freed when
	the function returns

	* gtkhtml/HTMLStream.custom (Destroy): hide this and then
	reimplement it by hand to keep OpaqueGen from using it in
	Dispose(), since calling it after an HTMLStream.Close() will
	result in a crash.

svn path=/trunk/gtk-sharp/; revision=47928
2005-08-02 18:45:21 +00:00
Dan Winship
0fa85fccbd * parser/gapi2xml.pl (addParamsElem): deal with G_CONST_RETURN in
params... some functions use that to mark const "out" params. In
	fact, let's use it as a hint to mark them pass_as="out" too...

	* pango/pango-api-2.4.raw: 
	* pango/pango-api-2.6.raw: 
	* gtk/gtk-api-2.6.raw: Regen, fixing pango_script_iter_get_range
	and gtk_image_get_icon_name.

	* pango/Pango.metadata: 
	* pango/ScriptIter.cs: Alas, exposing GetRange makes it clear that
	PangoScriptIter is really weird and we weren't wrapping it
	correctly before anyway, so mark the whole thing hidden and wrap
	it by hand.

svn path=/trunk/gtk-sharp/; revision=47748
2005-07-27 13:21:15 +00:00
Dan Winship
d37d940eb8 * parser/gapi2xml.pl (parseInitFunc): handle interface properties
as well as class properties

	* gtk/gtk-api-2.4.raw: 
	* gtk/gtk-api-2.6.raw: Regen (adding properties to GtkFileChooser).

	* generator/Property.cs (GenerateDecl): new method to generate
	just a property declaration (for an interface).
	(Generate): Add an "implementor" arg as with Method.Generate.

	* generator/InterfaceGen.cs (Generate): Generate properties. Also,
	validate methods *before* checking if they should be ignored,
	since certain Method properties aren't set until Validate-time.

	* generator/*.cs: misc minor changes/reorg for the above.

svn path=/trunk/gtk-sharp/; revision=47563
2005-07-22 18:35:37 +00:00
Mike Kestner
f1a8c00732 2005-07-08 Mike Kestner <mkestner@novell.com>
* */*.raw : regen.
	* parser/gapi2xml.pl : access comment doesn't have to start at
	beginning of line.

svn path=/trunk/gtk-sharp/; revision=47126
2005-07-08 22:04:50 +00:00
Mike Kestner
34ee46aec1 2005-06-24 Mike Kestner <mkestner@novell.com>
* gtk/Gtk.metadata : remove the one reference to FileChooserEmbed.
	* gtk/gtk-api-2.*.raw : regen.
	* sources/gtk-sharp-2.*-sources.xml : exclude FileChooserEmbed files.

svn path=/trunk/gtk-sharp/; revision=46479
2005-06-24 19:27:01 +00:00
Dan Winship
cb427b5747 * parser/gapi2xml.pl (addPropElem): Distinguish CONSTRUCT ("must
be set at construct time") and CONSTRUCT_ONLY ("can only be set at
	construct time") properties, rather than marking them all
	"construct-only".

	* gnome/gnome-api.raw: 
	* gtk/gtk-api-2.4.raw: 
	* gtk/gtk-api-2.6.raw: Regen, causing a few formerly-read-only
	properties to become writable.

svn path=/trunk/gtk-sharp/; revision=45767
2005-06-10 15:46:24 +00:00
Mike Kestner
0ceb4ccbca 2005-06-02 Mike Kestner <mkestner@novell.com>
* gtk/gtk-api-2.6.raw : regen.
	* parser/gapi_pp.pl : add G_DEFINE_TYPE_WITH_CODE handling.
	* parser/gapi2xml.pl : add G_DEFINE_TYPE_WITH_CODE parsing.
	[Fixes #74833]

svn path=/trunk/gtk-sharp/; revision=45338
2005-06-02 19:18:44 +00:00
Dan Winship
40c4db88a4 * parser/gapi2xml.pl: Make the enum value parser do the right
thing with parenthesized values ("FOO = (1 << 2)") and within-type
	aliases ("GTK_ANCHOR_N = GTK_ANCHOR_NORTH"). Make it intentionally
	do the wrong thing with unparsable values (outputting them as-is
	into the api file) so that we are forced to fix them with metadata
	rather than silently getting incorrect values.

	* gdk/gdk-api-2.4.raw: 
	* gdk/gdk-api-2.6.raw (PixdataType): Now recognized as flags,
	not enum

	* gtk/Gtk.metadata: hide the enums ArgFlags and RcTokenType (which
	are not used by any wrapped API, and which formerly contained
	entirely wrong values).

	* gtk/gtk-api-2.4.raw: 
	* gtk/gtk-api-2.6.raw (AnchorType, SelectionMode): update with
	values for aliases

	* gnome/Gnome.metadata: fix value of Gnome.PrintButtons.Cancel

	* gnome/gnome-api.raw (PrintUnitBase, PaperSelectorFlags,
	PrintDialogFlags, PrintDialogRangeFlags): Now recognized as flags,
	with values.

svn path=/trunk/gtk-sharp/; revision=44937
2005-05-24 18:11:33 +00:00
Mike Kestner
9e8e450e35 2005-05-06 Mike Kestner <mkestner@novell.com>
* bootstrap :
	* bootstrap-2.4 : use ln instead of cp for api files so reparsing
	causes rebuilds.
	* sources/gtk-sharp-2.6-sources.xml : moved from gtk-sharp-sources.xml
	plus fixed the pango, atk, and gdk raw filenames.
	* sources/gtk-sharp-2.4-sources.xml : sources file for 2.4 api.
	* sources/Makefile.am : added 2.4/2.6 targets for api and get-source
	with make api/get-source-code getting/parsing both versions.
	* */*.raw : regenerate

svn path=/trunk/gtk-sharp/; revision=44150
2005-05-06 17:10:48 +00:00
Mike Kestner
09c61ee026 2005-05-04 Mike Kestner <mkestner@novell.com>
* autogen.sh : error out with bootstrap help message.
	* bootstrap : replaces autogen.sh for the 2.5.x release line.
	* bootstrap-2.4 : replaces autogen.sh for the 1.9.x release line.
	* configure.in.in : renamed from configure.in and added substitution
	for version, dependencies, CFLAGS and CSFLAGS.
	* README : bootstrap docs
	* */*-api.raw : moved to api-2.6.raw for bootstrapping.
	* */*-api-2.4.raw : added 2.4 api files for bootstrapping.
	* */glue/Makefile.am : add GTK_SHARP_VERSION_CFLAGS.
	* pango/Attribute.cs : add a #if GTK_SHARP_2_6 block.
	* pango/glue/attribute.c : add a couple #ifdef GTK_SHARP_2_6 blocks.
	* sample/GtkDemo/* : make the 2.6 demos conditional.

svn path=/trunk/gtk-sharp/; revision=44047
2005-05-04 20:53:02 +00:00