diff --git a/ChangeLog b/ChangeLog index 09a5b67dc..94b8fefe0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2004-10-18 Dan Winship + + * generator/OpaqueGen.cs: Don't build the (IntPtr raw) constructor + if "disable_raw_ctor" is set on the opaque type. + + * gtk/Gtk.metadata: Make GtkTargetList opaque (fixes a crash in + Gtk.Drag.Begin), hide the generated constructor and ref/unref + methods, and fix up the interpretation of AddTable. + + * gtk/TargetList.custom (TargetList, ~TargetList): Implement the + suppressed constructors and add a finalizer, which handle + refcounting the underlying struct. + (Add, Find, Remove): convenience overloads that take string + instead of Gdk.Atom. + + * gtk/Makefile.am (customs): add TargetList.custom + 2004-10-07 Mike Kestner * gdk/Makefile.am : add missing custom file. diff --git a/generator/OpaqueGen.cs b/generator/OpaqueGen.cs index 1835e4822..b9a66088e 100644 --- a/generator/OpaqueGen.cs +++ b/generator/OpaqueGen.cs @@ -42,6 +42,12 @@ namespace GtkSharp.Generation { return FromNative (var); } + private bool DisableRawCtor { + get { + return Elem.HasAttribute ("disable_raw_ctor"); + } + } + public void Generate () { GenerationInfo gen_info = new GenerationInfo (NSElem); @@ -91,8 +97,10 @@ namespace GtkSharp.Generation { protected override void GenCtors (GenerationInfo gen_info) { - gen_info.Writer.WriteLine("\t\tpublic " + Name + "(IntPtr raw) : base(raw) {}"); - gen_info.Writer.WriteLine(); + if (!DisableRawCtor) { + gen_info.Writer.WriteLine("\t\tpublic " + Name + "(IntPtr raw) : base(raw) {}"); + gen_info.Writer.WriteLine(); + } base.GenCtors (gen_info); } diff --git a/gtk/Gtk.metadata b/gtk/Gtk.metadata index d241e81f2..fe91d0927 100644 --- a/gtk/Gtk.metadata +++ b/gtk/Gtk.metadata @@ -366,6 +366,13 @@ 1 1 GtkTargetFlags + 1 + 1 + 1 + 1 + n_targets + 1 + 1 1 1 1 diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 64fade6ef..791f2340b 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -73,6 +73,7 @@ customs = \ Style.custom \ Table.custom \ TargetEntry.custom \ + TargetList.custom \ TextBuffer.custom \ TextChildAnchor.custom \ TextIter.custom \ diff --git a/gtk/TargetList.custom b/gtk/TargetList.custom new file mode 100644 index 000000000..a22f9218a --- /dev/null +++ b/gtk/TargetList.custom @@ -0,0 +1,50 @@ +// TargetList.custom - customizations for Gtk.TargetList +// +// Copyright (c) 2004 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. + + [DllImport("libgtk-win32-2.0-0.dll")] + static extern void gtk_target_list_ref(IntPtr raw); + + public TargetList(IntPtr raw) : base(raw) { + gtk_target_list_ref(raw); + } + + [DllImport("libgtk-win32-2.0-0.dll")] + static extern void gtk_target_list_unref(IntPtr raw); + + ~TargetList() { + gtk_target_list_unref(Handle); + } + + [DllImport("libgtk-win32-2.0-0.dll")] + static extern IntPtr gtk_target_list_new(Gtk.TargetEntry[] targets, uint n_targets); + + public TargetList() : base(gtk_target_list_new(null, 0)) {} + + public TargetList (Gtk.TargetEntry[] targets) : this(gtk_target_list_new(targets, (uint) targets.Length)) {} + + public void Add(string target, uint flags, uint info) { + Add(Gdk.Atom.Intern (target, false), flags, info); + } + + public bool Find(string target, out uint info) { + return Find(Gdk.Atom.Intern (target, false), out info); + } + + public void Remove(string target) { + Remove(Gdk.Atom.Intern (target, false)); + }