diff --git a/ChangeLog b/ChangeLog index 860c49f1f..6d39cd334 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2004-05-25 Mike Kestner + + * gtk/Container.custom : use glue to invoke the GtkCallback in + Forall. + * gtk/glue/container.c : add gtksharp_container_invoke_gtk_callback. + 2004-05-23 Mike Kestner * generator/SignalHandler.cs : put back the ObjectGen hack diff --git a/gtk/Container.custom b/gtk/Container.custom index 017814647..741a7f760 100644 --- a/gtk/Container.custom +++ b/gtk/Container.custom @@ -50,20 +50,23 @@ public Widget[] FocusChain { } [DllImport("gtksharpglue")] -static extern void gtksharp_container_base_forall (IntPtr handle, bool include_internals, GtkSharp.CallbackNative cb, IntPtr data); +static extern void gtksharp_container_base_forall (IntPtr handle, bool include_internals, IntPtr cb, IntPtr data); [DllImport("gtksharpglue")] static extern void gtksharp_container_override_forall (GLib.GType gtype, ForallDelegate cb); -delegate void ForallDelegate (IntPtr container, bool include_internals, GtkSharp.CallbackNative cb, IntPtr data); +[DllImport("gtksharpglue")] +static extern void gtksharp_container_invoke_gtk_callback (IntPtr cb, IntPtr handle, IntPtr data); + +delegate void ForallDelegate (IntPtr container, bool include_internals, IntPtr cb, IntPtr data); static ForallDelegate ForallCallback; public struct CallbackInvoker { - GtkSharp.CallbackNative cb; + IntPtr cb; IntPtr data; - internal CallbackInvoker (GtkSharp.CallbackNative cb, IntPtr data) + internal CallbackInvoker (IntPtr cb, IntPtr data) { this.cb = cb; this.data = data; @@ -75,7 +78,7 @@ public struct CallbackInvoker { } } - internal GtkSharp.CallbackNative Delegate { + internal IntPtr Callback { get { return cb; } @@ -83,11 +86,11 @@ public struct CallbackInvoker { public void Invoke (Widget w) { - cb (w.Handle, data); + gtksharp_container_invoke_gtk_callback (cb, w.Handle, data); } } -static void Forall_cb (IntPtr container, bool include_internals, GtkSharp.CallbackNative cb, IntPtr data) +static void Forall_cb (IntPtr container, bool include_internals, IntPtr cb, IntPtr data) { Container obj = GLib.Object.GetObject (container, false) as Container; CallbackInvoker invoker = new CallbackInvoker (cb, data); @@ -103,6 +106,6 @@ protected static void OverrideForall (GLib.GType gtype) protected virtual void OnForall (bool include_internals, CallbackInvoker invoker) { - gtksharp_container_base_forall (Handle, include_internals, invoker.Delegate, invoker.Data); + gtksharp_container_base_forall (Handle, include_internals, invoker.Callback, invoker.Data); } diff --git a/gtk/glue/container.c b/gtk/glue/container.c index f92146d23..5283e5da2 100644 --- a/gtk/glue/container.c +++ b/gtk/glue/container.c @@ -28,3 +28,10 @@ gtksharp_container_override_forall (GType gtype, gpointer cb) ((GtkContainerClass *) klass)->forall = cb; } +void gtksharp_container_invoke_gtk_callback (GtkCallback cb, GtkWidget *widget, gpointer data); + +void +gtksharp_container_invoke_gtk_callback (GtkCallback cb, GtkWidget *widget, gpointer data) +{ + cb (widget, data); +}