mirror of
https://github.com/Ryujinx/GtkSharp.git
synced 2024-09-09 00:13:20 +02:00
![Gonzalo Paniagua Javier](/assets/img/avatar_default.png)
* 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
54 lines
1.8 KiB
Plaintext
54 lines
1.8 KiB
Plaintext
|
|
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;
|
|
}
|
|
|