GtkSharp/gtk/Clipboard.custom
Gonzalo Paniagua Javier 3821938764 2003-04-03 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* 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
2003-04-06 09:21:15 +00:00

53 lines
1.8 KiB
Text

public static Hashtable clipboard_objects = new Hashtable ();
private static uint clipboard_object_next_id = 0;
[DllImport("libgtk-win32-2.0-0.dll")]
static extern bool gtk_clipboard_set_with_data(IntPtr raw, IntPtr targets, int n_targets, GtkSharp.GtkClipboardGetFuncNative get_func, GtkSharp.GtkClipboardClearFuncNative clear_func, uint id);
[DllImport("gtksharpglue")]
static extern IntPtr gtksharp_clipboard_target_list_add (IntPtr list, string name, uint flags, uint info);
[DllImport("gtksharpglue")]
static extern IntPtr gtksharp_clipboard_target_list_to_array (IntPtr list);
[DllImport("gtksharpglue")]
static extern void gtksharp_clipboard_target_array_free (IntPtr targets);
[DllImport("gtksharpglue")]
static extern void gtksharp_clipboard_target_list_free (IntPtr list);
GtkSharp.GtkClipboardGetFuncWrapper get_func_wrapper;
GtkSharp.GtkClipboardClearFuncWrapper clear_func_wrapper;
public bool Set (Gtk.TargetEntry[] targets,
Gtk.ClipboardGetFunc get_func,
Gtk.ClipboardClearFunc clear_func,
object data)
{
uint this_id;
lock (clipboard_objects) {
this_id = clipboard_object_next_id++;
clipboard_objects[this_id] = data;
}
get_func_wrapper = new GtkSharp.GtkClipboardGetFuncWrapper (get_func, this);
clear_func_wrapper = new GtkSharp.GtkClipboardClearFuncWrapper (clear_func, this);
IntPtr list = IntPtr.Zero;
foreach (Gtk.TargetEntry t in targets) {
list = gtksharp_clipboard_target_list_add (list, t.target, t.flags, t.info);
}
IntPtr array = gtksharp_clipboard_target_list_to_array (list);
bool ret = gtk_clipboard_set_with_data (Handle, array, targets.Length, get_func_wrapper.NativeDelegate, clear_func_wrapper.NativeDelegate, this_id);
gtksharp_clipboard_target_array_free (array);
gtksharp_clipboard_target_list_free (list);
return ret;
}