When dealing with several namespaces there might be classes with the same name
(especially Global which is autogenerated in g-i based bindings). On generation
the file would be overriden by the last occurence in the xml. To encounter
this every namespace has it's own directory now. This also improves structure
a lot when dealing with big libraries.
Also do the necessary adaption for the build and the csproj files.
* generator/CallbackGen.cs: connect return value count parameters
* generator/ManagedCallString.cs: out count params aren't special
* generator/MethodBody.cs: don't finish hidden params
* generator/Parameters.cs: explicit IsCount setting support, with
Parameters.GetCountParameter(name) interface. Clear IsCount
values during validation if they have no associated array. Any
remaining count params must be associated with a retval, so
hide them.
* generator/ReturnValue.cs: support array_length_param attribute to
associate a return value with a "count" param. Use new helper
methods to marshal these array retvals to IntPtr and back.
* glib/Marshaller.cs: support for byte[] marshaling to and from
IntPtr using a count and type in the from native direction.
* gtk/Gtk.metadata: mark TextBufferSerializeFunc return type as
an array with the length specific in the length param.
* generator/*.cs: Add a LogWriter class which formats warnings
consistently on the console. Supports the concept of non-fatal
validation warnings, since it doesn't rely on the unrolling of the
validation stack to associate a warning to a given type.
Main purpose was to add a non-fatal warning for missing element_type
attributes on list return values, though it results in cleaner log
output, and also updates some warning messages to be more helpful in
how to resolve them.
* glib/Global.cs: Kill the calling convention field again.
It breaks GLib 2.x compatibility in the generator and there is
probably no need to make the calling convention configurable.
* .cs, *.custom: Hardcode Cdecl calling convention instead of
using GLib's field.
svn path=/trunk/gtk-sharp/; revision=141283
* glib/Global.cs: Add a public constant field specifying the
calling convention used by GLib and depending libraries.
By now it's hardcoded to Cdecl as every non-Win32 runtime
should ignore this attribute.
* *.cs, *.custom: Use GLib.Global.CallingConvention for both
pinvokes and callbacks. Plugs a stack leak on Win32. All
pinvokes defaulted to StdCall and thus the stack was never
cleaned up.
svn path=/trunk/gtk-sharp/; revision=141175
* configure.in.in: Target .net 2.0 profile
* gapi-cdecl-insert: Kill. We are now using the UnmanagedFunctionPointerAttribute
for callbacks.
* glib/CdeclCallback: Mark obsolete.
* generator/*.cs:
* *.custom: Use [UnmanagedFunctionPointer (CallingConvention.Cdecl)] instead of
[GLib.CDeclCallback].
svn path=/trunk/gtk-sharp/; revision=137323
Add support for virtual methods(vm) to the generator.
* parser/gapi2xml.pl: Generate a class_struct element with
all members of the class structure. Dump the first (instance)
parameter for signal and vm elements. Bump up parser version.
* generator/GObjectVM.cs: Added. Support for GObject virtual methods.
* generator/DefaultSignalHandler.cs: Signal specific part of vm
generation.
* generator/InterfaceVM.cs: New class for interface vms.
* generator/ObjectBase.cs: Parse the class struct.
svn path=/trunk/gtk-sharp/; revision=131604
Patch from Christian Hoff with a few minor tweaks.
* generator/CallbackGen.cs: refactor to use ManagedCallString
and drop a ton of redundant, half-baked code.
* generator/ManagedCallString.cs: add Unconditional setup
method for stuff that has to happen before the try block.
Add "drop_first" concept so it can be reused by CallbackGen
which doesn't drop first params.
* generator/Signal.cs: use Unconditional method for prep.
* generator/VirtualMethod.cs: use Unconditional method for prep.
* gtk/Gtk.metadata: mark a ref param. [Fixes#394352]
svn path=/trunk/gtk-sharp/; revision=107494
* bootstrap-2.12: bump svn version
* generator/CallbackGen.cs: add dnotify support to invoker.
Store and respond with incoming UserData params. Start using
__prefixed private vars to avoid collisions with parameters,
like the 'result' params in gio.
* generator/ManagedCallString.cs: use new data/dnotify invoker
ctors.
* generator/MethodBody.cs:
* generator/Parameters.cs: don't link "out" length params to
preceding strings.
* generator/VMSignature.cs: don't require UserData to be last
param, since it can have things like error after it.
svn path=/trunk/gtk-sharp/; revision=98782
* generator/*.cs: add DefaultValue prop for obtaining a
sane value when we need to return a value but something bad has
happened such that we can't get a real value. Needed for iface
signal marshaling, among other places we're partially working
around it now.
svn path=/trunk/gtk-sharp/; revision=86157
* generator/CallbackGen.cs (GenInvoker): null check the sig field
and set it up. This can happen when generating the marshaling types
from dependent libraries instead of via the Generate method.
svn path=/trunk/gtk-sharp/; revision=85831
* 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/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
* generator/CallbackGen.cs : generate try/catch blocks for
native to managed marshallers. [Fixes the rest of #80516]
svn path=/trunk/gtk-sharp/; revision=74425
* generator/CallbackGen.cs : add PersistUntilCalled method generation
to the wrapper class. Holds a GCHandle for the wrapper which is Freed
when the delegate is invoked.
* generator/MethodBody.cs : add "async" case for delegate scope. Use
this scope to identify a callback parameter that needs to persist
until the native side calls back. Only valid for single-invoke
callbacks.
* gtk/Gtk.metadata : mark Print.RunPageSetupDialogAsync done_cb param
with the new async scope.
svn path=/trunk/gtk-sharp/; revision=71767
* generator/FieldBase.cs: Properly convert marshalled value
to native value.
* generator/CallbackGen.cs: Added parens to the result of ToNativeReturn,
since it may have problems with the cast.
svn path=/trunk/gtk-sharp/; revision=54671
fails, set MarshalType to "" to propagate that failure into
methods that have args of this type. [Fixes#75851]
svn path=/trunk/gtk-sharp/; revision=48679
(Henceforth gda# and gnomedb# will be part of gda and gnomedb. Or
maybe separate modules in Mono SVN. Not part of gtk-sharp though.)
* Makefile.am (SUBDIRS): remove gda and gnomedb
* gda/, gnomedb/: buh-bye
svn path=/trunk/gtk-sharp/; revision=48200
in the context of "Gtk.TreeModel.GetNColumns"
* generator/CallbackGen.cs (GenWrapper): treat InterfaceGen return
values the same as ObjectGen
svn path=/trunk/gtk-sharp/; revision=48192
properties can't be set until Validate-time (eg, Method.IsGetter),
but it's annoying for every potential user of those properties to
have to make sure it has Validated the generatable first. So now
we add an explicit Validate() step after everything is loaded but
before anything is Generated, so that at Generation time,
everything can be assumed to have been Validated.
* generator/IGeneratable.cs: add "bool Validate()"
* generator/CodeGenerator.cs (Main): after loading all of the
generatables, DeAlias the SymbolTable, Validate() all the
generatables, and discard any invalid ones.
* generator/*.cs: Implement Validate() trivially in generatables
that didn't implement it before. Move Validate() calls from
Generate() to Validate(). Remove non-hierarchical Validate()
calls.
* generator/SymbolTable.cs: GPtrArray is IntPtr, not IntPtr[]
svn path=/trunk/gtk-sharp/; revision=48046
* generator/CallbackGen.cs : implement new IAccessor iface so that
callback fields on structs can now be accessed.
* generator/ClassBase.cs : remove/abstract some methods incorrectly
located here.
* generator/ClassGen.cs : implement methods previously inherited from
ClassBase incorrectly.
* generator/HandleBase.cs : new base class for native ptr wrappers.
Implements new IAccessor interface and code moved from ClassBase.
* generator/IAccessor.cs : new iface to generate field/prop accessors.
* generator/InterfaceGen.cs : derive from new ObjectBase.
* generator/LPGen.cs : implement IAccessor.
* generator/LPUGen.cs : implement IAccessor.
* generator/ObjectBase.cs : new base class for Object/Iface types.
* generator/ObjectGen.cs : derive from new ObjectBase.
* generator/OpaqueGen.cs : derive from HandleBase.
* generator/StructField.cs : refactor Generate method using new
IAccessor interface.
* */*.custom : add obsolete impls for some existing c_cased struct
field accessors that are now StudlyNamed.
svn path=/trunk/gtk-sharp/; revision=46878
* generator/CallbackGen.cs : remove an old workaround that put
the native wrapper class into the implementor's *Sharp namespace.
Use new ImportSignature sig.
* generator/ImportSignature.cs : don't mangle the callback wrapper
namespace any more. Remove impl_ns ctor param and field.
* generator/MethodBase.cs : use new MethodBody and ImportSignature
ctor sigs.
* generator/MethodBody.cs : drop the impl_ns ctor param.
* generator/Signal.cs : use new ImportSignature ctor sig.
* generator/VirtualMethod.cs : use new ImportSignature ctor sig.
svn path=/trunk/gtk-sharp/; revision=46877
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/CallbackGen.cs : don't create native delegates for nulls.
* generator/ObjectGen.cs : revamp the ObjectManager code.
* glib/Object.cs : use new ObjectManager.RegisterType overload.
* glib/ObjectManager.cs : rewrite to kill the lameass LoadWithPartial
hack and keep a GType to Type mapping for quicker lookup/activation.
svn path=/trunk/gtk-sharp/; revision=42241
* generator/CallbackGen.cs : don't derive Wrappers from DelegateWrapper
any more. It leaks delegates like crazy. We effectively now use call
scope as the default for delegate parameters.
* generator/MethodBody.cs : use new simpler Wrapper ctor.
* glib/DelegateWrapper.cs : mark the ctor obsolete so people know to
update any manually coded wrappers out there.
* */*.custom : use new simpler Callback Wrapper ctors.
svn path=/trunk/gtk-sharp/; revision=41738
* 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
* generator/CallbackGen.cs : use ReturnValue and more of Parameter.
* generator/GenBase.cs : remove unused NSElem prop.
svn path=/trunk/gtk-sharp/; revision=38115
* generator/*Gen.cs : implement IGeneratable fully on GenBase
with abstract methods where necessary to refactor a ton of redundant
code.
svn path=/trunk/gtk-sharp/; revision=38091
* generator/CodeGenerator.cs:
* generator/ManagedCallString.cs:
* generator/Property.cs: Remove unused vars
* generator/Method.cs (GetHashCode): have to implement this since
we're overriding Equals.
* generator/CallbackGen.cs: print a message when generating a
broken struct-returning callback. (Currently affects
GtkSharp.TextSegSplitFuncNative and
GtkSharp.TextSegCleanupFuncNative)
* gdk/glue/device.c:
* gdk/glue/dragcontext.c: Add missing prototypes
* gtk/Gtk.metadata: Mark SeparatorToolItem.Draw "new". Re-rename
CheckMenuItem.Toggled to EmitToggled rather than Toggle, since
that's a better description of what it does.
* gtk/CheckMenuItem.custom: implement a "Toggle" method that does
what the documentation claims it does.
* gtk/NodeStore.cs: remove unused var
* gnome/Gnome.metadata: mark DateEdit.Flags, Dialog.Default, and
PropertyBox.State "new". Hide GnomePixmapEntry.GnomeEntry and
GnomePixmapEntry.GtkEntry since they do exactly the same thing as
the methods of the same names inherited from GnomeFileEntry.
* gnome/glue/canvas-proxy.c:
* gnome/glue/canvas-proxy.h:
* gnome/glue/canvas-proxy-marshal.c:
* gnome/glue/canvas-proxy-marshal.h:
* gnome/glue/canvas-proxy-marshal.list: Remove unused code
* gnome/glue/Makefile.am (libgnomesharpglue_2_la_SOURCES): update
* panelapplet/PanelApplet.metadata: mark PanelApplet.Flags "new"
* sample/CanvasExample.cs:
* sample/CustomCellRenderer.cs:
* sample/CustomNotebook.cs:
* sample/DrawingSample.cs:
* sample/Fifteen.cs:
* sample/GladeTest.cs:
* sample/GtkDemo/DemoHyperText.cs:
* sample/GtkDemo/DemoPixbuf.cs:
* sample/ScribbleXInput.cs: remove unused vars, use
GLib.Timeout.Add rather than the deprecated Gtk.Timeout.Add
svn path=/trunk/gtk-sharp/; revision=38043
* generator/*Gen.cs : add ToNativeReturnType to deal with
the g_free string nonsense in the virtual method case.
svn path=/trunk/gtk-sharp/; revision=36289
* 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/CallbackGen.cs : use a temporary ret value if there
is any cleanup to be done after the call. Thanks to John Luke
for a patch which identified the problem.
svn path=/trunk/gtk-sharp/; revision=19561
* 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