* generator/Parameters.cs: fix marshaling for ArrayCount params where
casting is required, like gsize/size_t count parameters.
svn path=/trunk/gtk-sharp/; revision=91199
* generator/*.cs: implement the interfaces on the adapters too.
Generate an Implementor interface for users which exposes the
methods to implement. Register based on the Implementor sub-iface.
* gtk/*Adapter.custom: custom implementations for the custom
interface members.
* gtk/TreeIter.custom: make UserData public.
* sample/TreeModelDemo.cs: sample for implementing a TreeModel
interface.
svn path=/trunk/gtk-sharp/; revision=86753
* 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
* generator/*.cs : switch to IntPtr marshaling for struct types
in the managed to native direction.
* gtk/*.custom : adjust to new gapi struct pinvoke sigs.
svn path=/trunk/gtk-sharp/; revision=83961
* generator/Ctor.cs : Validate before generating and adjust protection
on a couple private methods.
* generator/Parameters.cs : remove unused var to kill warning.
svn path=/trunk/gtk-sharp/; revision=83132
* generator/MethodBody.cs : refactor finish logic into parameter.
* generator/Parameters.cs : refactor finish logic into parameter and
fix some failures to marshal ref params post call.
svn path=/trunk/gtk-sharp/; revision=83020
* generator/ImportSignature.cs : use Parameter.NativeSignature
prop and refactor out some GError handling.
* generator/MethodBody.cs : Refactor logic into Parameters.
* generator/Parameters.cs : add ArrayParameter, ArrayCountPair, and
ErrorParameter subclasses to refactor spaghetti code in MethodBody.
svn path=/trunk/gtk-sharp/; revision=81721
* generator/CallbackGen.cs : switch to NativeCallbackSignature.
* generator/GenBase.cs : add NativeCallbackType member.
* generator/IGeneratable.cs : add NativeCallbackType member.
* generator/ManagedCallString.cs : add guarded post call struct
marshaling back to the native struct.
* generator/NativeCallbackSignature.cs : new parallel to ImportSignature
but using NativeCallbackType instead of MarshalType.
* generator/Signal.cs : switch vm and sig marshaler callbacks to
NativeCallbackSignature. Perform guarding post call struct marshaling
back to the native struct.
* generator/Parameters.cs : add NativeCallbackType member.
* generator/SimpleBase.cs : add NativeCallbackType member.
* generator/StructBase.cs : add NativeCallbackType member using IntPtr
to support NULL handling.
* gtk/NodeCellDataFunc.cs : update native marshaler sig.
svn path=/trunk/gtk-sharp/; revision=76011
* 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
anonymous function pointer types in method signatures. Before, we
added a <callback> child to the <parameters> node, but the
generator just ignored it. Now we add the callback (with a made-up
name) to the toplevel node, and add an ordinary <param> node
referencing it to the <parameters> node. Also, if the last param
of the callback is a gpointer, rename it from "arg#" to "data" so
it will be treated correctly (as the user data passed from the
calling method). [Fixes#66241]
* art/art-api.raw:
* gdk/gdk-api-2.4.raw:
* gdk/gdk-api-2.6.raw: Regen
* generator/Parameters.cs (IsHidden): loosen the definition of
hideable user_data; it doesn't have to occur at the end of the
parameter list, as long as there's a callback arg before it.
* generator/MethodBody.cs (GetCallString): Use Parameters.IsHidden
to decide whether or not to squash user_data params, rather than
trying to duplicate its logic. As a side effect, this also causes
a handful of methods that take non-hidden IntPtr arguments to
start actually passing those arguments to C rather than always
passing IntPtr.Zero.
* generator/Method.cs (Equals, GetHashCode): Remove unnecessary
and possibly erroneous hashing overrides.
* gtk/Gtk.metadata: Hide Gtk.Container.ForeachFull, since it's
useless and wasn't in gtk# 1.0
* gtk/Menu.custom (Popup):
* gtk/TextIter.custom (ForwardFindChar, BackwardFindChar):
* gnome/App.custom (CreateMenusInterp, InsertMenusInterp,
CreateToolbarInterp):
* gnome/Client.custom (RequestInteractionInterp):
* gnome/Popup.custom (MenuDoPopupModal, MenuDoPopup): Add
[Obsolete] compat overloads for methods that have now lost a
useless IntPtr.
svn path=/trunk/gtk-sharp/; revision=47566
(They're always allowed now.)
* generator/Signal.cs (GenVirtualMethod): Fix up the use of CSType
vs MarshalType in the ref/out-handling code so that this can
marshal any type.
svn path=/trunk/gtk-sharp/; revision=47412
whether or not to allow "complex" ref/out args.
(Validate): update for that
* generator/Signal.cs: set AllowComplexRefs false on the params.
(Validate): fix the messages
(GenCallback, GenEventHandler): properly handle ref/out args, by
manually pointerifying them (except for boxed args, which are
already pointers).
* glib/Marshaller.cs (StructureToPtrAlloc): Rename from
PtrToStructureAlloc, since it wraps Marshal.StructureToPtr.
svn path=/trunk/gtk-sharp/; revision=46773
end with "callback, gpointer, GDestroyNotify", then mark the
callback as having "notified" Scope.
(Parameters.IsHidden): Hide user_data and GDestroyNotify after a
callback.
(Parameter.Scope): make this settable
(Parameter.IsDestroyNotify): new test
* generator/MethodBody.cs (Initialize): Handle "notified" callback
scope (using a GCHandle and GLib.DestroyHelper.NotifyHandler)
* generator/CallbackGen.cs (GenWrapper): Add a static
"GetManagedDelegate" method to the wrapper type, to translate a
native delegate back to its corresponding managed delegate.
(FromNative): use GetManagedDelegate.
* generator/ReturnValue.cs (Validate): We handle callback return
values now
* generator/SymbolTable.cs: marshal GDestroyNotify as
GLib.DestroyNotify
* glib/DestroyNotify.cs: Moved from gtk
* gtk/Gtk.metadata: globally change GtkDestroyNotify to
GDestroyNotify, but then change back the ones that are exposed in
the API. Un-hide lots of methods we can correctly autogenerate
now.
* gtk/DestroyHelper.cs: moved to glib
* gtk/*.custom: remove methods that are autogenerated now, add
Obsolete wrappers where needed, replace Gtk.DestroyHelper usage
with GLib.DestroyHelper.
* gdk/Gdk.metadata:
* gnome/Gnome.metadata: Turn Gdk.Drawable.SetData and
Gnome.IconList.SetIconDataFull's GDestroyNotify args into
gpointers so the generated API stays the same as it used to be.
* rsvg/Handle.custom: implement deprecated SetSizeCallback
* sample/GtkDemo/DemoIconView.cs (CreateSort): update for API
changes
svn path=/trunk/gtk-sharp/; revision=44020
parameter should be hidden in the managed sig (eg, because it's
user_data, or it's the length of the preceding array/string, etc).
(VisibleCount): the number of parameters that will actually be
exposed in the managed signature.
(IsAccessor): test VisibleCount, not Count
(AccessorReturnType, AccessorName): deal with the fact that the
accessor parameter might not be the first one.
* generator/CallbackGen.cs:
* generator/Signature.cs: use Parameters.IsHidden.
* generator/Method.cs (Initialize): set is_set based on
VisibleCount, not Count.
(Validate): call base.Validate() before Initialize() so that
VisibleCount will be correct in Initialize.
* generator/MethodBody.cs (GetCallString, CallArrayLength,
Initialize): update to deal with accessors with multiple args.
* gtk/Clipboard.custom (SetText): implement as an Obsolete variant
of the Text property
* gtk/IconTheme.custom (SearchPath, SetSearchPath): obsolete
SetSearchPath, implement a setter on SearchPath instead.
* gtk/ListStore.custom (SetColumnTypes):
* gtk/TreeStore.custom (SetColumnTypes): implement as an Obsolete
variant of the ColumnTypes property.
* glade/XML.custom (CustomHandler): implement as a property
(SetCustomHandler): Mark this obsolete
* glade/Global.custom (SetCustomHandler): deprecate in favor of
XML.CustomHandler.
* gnomedb/Editor.custom (SetText): implement as an Obsolete
variant of the Text property
svn path=/trunk/gtk-sharp/; revision=43898
* gdk/Gdk.metadata : hide some manually implemented callback methods.
* gdk/*.custom : implement several methods containing persistent
callback parameters.
* generator/BoxedGen.cs : set gen_info.CurrentType in Generate.
* generator/ClassGen.cs : set gen_info.CurrentType in Generate.
* generator/Ctor.cs : set gen_info.CurrentMember in Generate.
* generator/GenerationInfo.cs : add CurrentMember and CurrentType.
* generator/Method.cs : set gen_info.CurrentMember in Generate.
* generator/MethodBody.cs : always generate null guarding for array
parameters, and add a nag for callback parameters without a scope attr.
* generator/ObjectGen.cs : set gen_info.CurrentType in Generate.
* generator/OpaqueGen.cs : set gen_info.CurrentType in Generate.
* generator/Parameters.cs : kill NullOk. add Scope property.
* generator/StructGen.cs : set gen_info.CurrentType in Generate.
* gtk/Gtk.metadata : kill a few null_ok attrs.
* pango/Pango.metadata : mark the callback params as call scope. kill
a couple null_ok attrs.
svn path=/trunk/gtk-sharp/; revision=42529
* generator/*.cs : refactoring of Parameters class. Added IEnumerable
to Parameters and gracefully handle elem == null instead of special
casing parms == null all over the place. Parameter logic is now Count
driven. [Fixes#71750]
svn path=/trunk/gtk-sharp/; revision=39594
* gdk/Gdk.metadata : mark a couple array params.
* generator/Field.cs : remove the MarshalAs hack. We have to
do something much more evil since MarshalAs can't hang.
* generator/ImportSignature.cs : deal with out LP(U)Gen params.
* generator/LPGen.cs : moved from SSizeTGen and generalized.
* generator/LPUGen.cs : moved from SizeTGen and generalized.
* generator/Makefile.am : update sources.
* generator/MethodBody.cs : deal with out LP(U)Gen params.
* generator/Parameters.cs : deal with out LP(U)Gen params.
* generator/SymbolTable.cs : make all longs and size_t types LP(U)Gens.
svn path=/trunk/gtk-sharp/; revision=37999
[Derived from a patch by Ben Maurer]
* generator/Ctor.cs : generate code to detect subclassing and handle
GType registration and native object creation properly.
* generator/Parameters.cs : add PropertyName accessor for param attr.
* generator/Property.cs : use a new GLib.Value ctor.
* glib/ObjectManager.cs : redo hash access.
* glib/Object.cs : CreateNativeObject method to invoke g_object_newv
and some refactoring of RegisterGType and LookupGType.
* glib/Value.cs : make gtype field an IntPtr.
* glib/glue/object.c : glue for g_object_newv use.
* glib/glue/value.c : new glue for value creation.
* gtk/Dialog.custom : fix a ctor declaration for auto-reg.
* gtk/Gtk.metadata : mark a couple property_name attrs as examples.
* sample/Subclass.cs : use auto-GType-registration now.
svn path=/trunk/gtk-sharp/; revision=26916
* generator/CallbackGen.cs : use new sig and isig classes.
* generator/Ctor.cs : use new sig, isig, and body classes.
* generator/ImportSignature.cs : isig code spun out from Parameters.
* generator/Method.cs : use new sig, isig, and body classes.
* generator/MethodBody.cs : spun Initialize, GetCallString,
Finish, and Exception throwing methods from Parameters.
* generator/Parameters.cs : Slayed the evilness that was CreateSignature.
It is now essentially a container for Parameter classes instead of a
tangled mess of code trying to do everything remotely related to
parameter lists. Also completely killed the VAType/IsVarArgs stuff,
as it can be done with the array and params attrs instead.
* generator/Property.cs : use new sig class.
* generator/Signature.cs : new method sig generator extracted from
Parameters class. add "params" keyword support for tagged parameters.
* gnome/Gnome.metadata : hide IconList.GetSearchPath (to be manual)
* gnome/gnome-api.xml : regen
* gtk/ListStore.custom : kill unneeded overload
* gtk/TreeStore.custom : kill unneeded overload
* gtk/Gtk.metadata : mark params/args on *store_newv
* gtk/gtk-api.xml : regenerated
svn path=/trunk/gtk-sharp/; revision=20755
* generator/Parameters.cs : mark enum pointer params as out.
need to audit if any are really arrays. [Fixes#49779]
svn path=/trunk/gtk-sharp/; revision=19153
* gdk/Gdk.metadata : mark an array param on PixbufDestroyNotify
* gdk/gdk-api.xml : regenerated
* generator/CallbackGen.cs : Handle out params in callback sigs
and ditch the object[] args handling for typed args.
* generator/Parameters.cs : more proactive PassAs logic. We now
default all simple pointer types (uint*, int*, double*, etc...)
to out params unless they are marked otherwise in the XML with a
pass_as tag or an array tag. [Fixes#32104]
svn path=/trunk/gtk-sharp/; revision=18993
* generator/Parameters.cs : Properly handle out params for
Object and Opaque types.
* gtk/ListStore.custom: remove out on GetValue overload
* gtk/TreeStore.custom: remove out on GetValue overload
* gtk/gtk-api.xml : regenerated
* sources/Gtk.metadata : remove some incorrect out tags
svn path=/trunk/gtk-sharp/; revision=18891
* generator/Parameters.cs (CreateSignature): begin refactoring this
unholy mess. Eliminated one pass thru the param list. Eliminated
prev/curr param refs. Switched to a for loop since lookbacks are
required.
svn path=/trunk/gtk-sharp/; revision=18050
* generator/Parameters.cs : keep an ArrayList of Parameter objects
and refactor the hell out of the joint using the new Count and this[].
Still need to refactor a couple methods.
svn path=/trunk/gtk-sharp/; revision=18030
* generator/Parameters.cs (IsLength): use a switch to make the
growing list of valid len types more readable.
svn path=/trunk/gtk-sharp/; revision=18029
* generator/Parameters.cs: Handle string length parameters specified
not just as int but also signed/unsigned int, long or short
svn path=/trunk/gtk-sharp/; revision=18027
* generator/StructBase.cs:
* generator/SymbolTable.cs: Fixed the keyword base was not
mangled, also did a little refactoring.
svn path=/trunk/gtk-sharp/; revision=17702
* api/*-api.xml : regenerated
* gdk/Drawable.custom : DrawRectangle filled param is now bool
* generator/Parameters.cs : studlify names ending w/ uscore
* gtk/GtkSharp.GtkClipboardClearFuncNative : s/Opaque/Object
* gtk/GtkSharp.GtkClipboardGetFuncNative : s/Opaque/Object
* parser/gapi2xml.pl : put <ns>_string_* methods in Global
* sample/Scribble.cs : update to new DrawRectangle api
* sources/Gdk.metadata : hide some conflicting methods
* sources/Gtk.metadata : finally fix the Progress crap and
renames, hides and such to fix conflicts
* sources/README : mention new gtk-2.2 reqs
* sources/gtk-sharp.sources : update to new gtk-2.2 reqs
* sources/makefile : update for 2.2 api
svn path=/trunk/gtk-sharp/; revision=16254
* api/*-api.xml : regenerated
* gdk/Threads.cs : killed since the methods are now gen'd
* generator/ClassGen.cs : new, static class generatable
* generator/Parameters.cs : mangle new and byte as param names
* generator/Parser.cs : parse new <class> elements
* generator/SymbolTable.cs : add GC SimpleGen
* parser/gapi2xml.pl : static class element fixes
* parser/GAPI/Metadata.pm : add class element
* sources/Art.metadata: new, rename Affine.ToString method
* sources/Atk.metadata: rename State class
* sources/Gdk.metadata: hide Pixbuf static class for now. rename
Event and Pango static classes to avoid collisions.
* sources/Gnome.metadata: rename Gtk and Gdk static classes to
avoid collisions.
* sources/GnomeDb.metadata: rename Stock static class to
avoid collisions.
* sources/Gtk.metadata: rename Stock static class to
avoid collisions. Hide Idle class.
svn path=/trunk/gtk-sharp/; revision=16115
* generator/CallbackGen.cs : use non-static symtab, kill doc comments
* generator/ClassBase.cs : use non-static symtab
* generator/CodeGenerator.cs : use non-static symtab
* generator/EnumGen.cs : kill doc comments, don't gen using System here
* generator/GenBase.cs : gen using System here for all types
* generator/InterfaceGen.cs : don't gen using System here.
* generator/Method.cs : use non-static symtab
* generator/ObjectGen.cs : kill doc comments, use non-static symtab
* generator/OpaqueGen.cs : don't gen using System here.
* generator/Parameters.cs : use non static symtab.
* generator/Parser.cs : use non static symtab. add SimpleGen's and
ManualGen's
* generator/Property.cs : use non static symtab
* generator/SignalHandler.cs : use non static symtab
* generator/StructBase.cs : use non static symtab
* generator/SymbolTable.cs : major refactoring. now uses SimpleGen and
ManualGen IGeneratables to simplify the method and prop code. Is now
instance based with a static prop to get the singleton instance, so that
a this indexer can be provided to access the IGeneratables nicely. Gearing
up to remove even more code from here by accessing IGeneratables directly.
svn path=/trunk/gtk-sharp/; revision=14687
* generator/CallbackGen.cs: the new generated wrappers have:
-(optional) Field of the same type returned by the callback.
-A call to RemoveIfNotAlive at the beginning. It returns true,
return the dummy field.
-Added an object to the ctor signature and pass it to the base
class.
* generator/Ctor.cs: added a Params property.
* generator/Method.cs: set Static property in Parameters if the method
is static.
* generator/Parameters.cs: added Static property. The call creation of
the delegate wrapper (if applicable) uses the new signature. Pass a null
as object is the method is static.
* generator/StructBase.cs: set Static for the parameters of the ctors.
* glib/DelegateWrapper.cs: the ctor takes an object (the one creating
the wrapper or null) and creates a weak reference to it. Store it in
a static Hashtable (this way the wrapper itself is not garbage
collected).
(RemoveIfNotAlive): called from the native delegate callbacks. If the
target of the weak reference has been garbage collected, removes itself
from the hashtable to let the GC dispose this instance and returns true.
* gdk/Pixbuf.custom:
* gtk/Clipboard.custom:
* gtk/GtkSharp.GtkClipboardClearFuncNative.cs:
* gtk/GtkSharp.GtkClipboardGetFuncNative.cs:
* glade/XML.custom: changed delegate wrappers to match the new
signature.
svn path=/trunk/gtk-sharp/; revision=13237
* generator/CallbackGen.cs : suppress len params from
string/len pairs.
* generator/Parameters.cs : begin the refactoring to use
Parameter class. Suppress len params from string/len pairs.
*/*.custom : remove all overrides of string/len pairs
*/*.cs : ditto. Thanks to Alp Toker for the foundation
patch that this change was built upon.
svn path=/trunk/gtk-sharp/; revision=11913