diff --git a/ChangeLog b/ChangeLog index a404a3253..fcab54c68 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-04-17 Mike Kestner + + * atk/glue/misc.c: glue for vms and singleton setup. + * atk/Misc.custom: add OnThreadsEnter, OnThreadsLeave, and + SetSingletonInstance members for Bridge implementors. + [More of #365437] + 2008-04-17 Mike Kestner * glib/Object.cs: add Harden method to reduce the reflection diff --git a/atk/Makefile.am b/atk/Makefile.am index 1dc507b9c..68e051046 100644 --- a/atk/Makefile.am +++ b/atk/Makefile.am @@ -8,6 +8,7 @@ references = ../glib/glib-sharp.dll sources = customs = \ + Misc.custom \ Object.custom \ Util.custom diff --git a/atk/Misc.custom b/atk/Misc.custom new file mode 100644 index 000000000..c00e8212a --- /dev/null +++ b/atk/Misc.custom @@ -0,0 +1,89 @@ +// Misc.custom - Atk Misc class customizations +// +// Author: Mike Kestner +// +// Copyright (c) 2008 Novell, Inc. +// +// This code is inserted after the automatically generated code. +// +// +// 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("atksharpglue-2")] + static extern int atksharp_misc_override_threads_enter (IntPtr type, ThreadDelegate cb); + + [GLib.CDeclCallback] + delegate void ThreadDelegate (IntPtr raw); + + static ThreadDelegate ThreadsEnterCallback; + + static void ThreadsEnter_cb (IntPtr raw) + { + try { + Atk.Misc __obj = GLib.Object.GetObject (raw, false) as Atk.Misc; + __obj.OnThreadsEnter (); + } catch (Exception e) { + GLib.ExceptionManager.RaiseUnhandledException (e, false); + } + } + + static void OverrideThreadsEnter (GLib.GType gtype) + { + if (ThreadsEnterCallback == null) + ThreadsEnterCallback = new ThreadDelegate (ThreadsEnter_cb); + atksharp_misc_override_threads_enter (gtype.Val, ThreadsEnterCallback); + } + + [GLib.DefaultSignalHandler (Type=typeof (Atk.Misc), ConnectionMethod="OverrideThreadsEnter")] + protected virtual void OnThreadsEnter () + { + } + + [DllImport("atksharpglue-2")] + static extern int atksharp_misc_override_threads_leave (IntPtr type, ThreadDelegate cb); + + static ThreadDelegate ThreadsLeaveCallback; + + static void ThreadsLeave_cb (IntPtr raw) + { + try { + Atk.Misc __obj = GLib.Object.GetObject (raw, false) as Atk.Misc; + __obj.OnThreadsLeave (); + } catch (Exception e) { + GLib.ExceptionManager.RaiseUnhandledException (e, false); + } + } + + static void OverrideThreadsLeave (GLib.GType gtype) + { + if (ThreadsLeaveCallback == null) + ThreadsLeaveCallback = new ThreadDelegate (ThreadsLeave_cb); + atksharp_misc_override_threads_leave (gtype.Val, ThreadsLeaveCallback); + } + + [GLib.DefaultSignalHandler (Type=typeof (Atk.Misc), ConnectionMethod="OverrideThreadsLeave")] + protected virtual void OnThreadsLeave () + { + } + + [DllImport("atksharpglue-2")] + static extern void atksharp_misc_set_singleton_instance (IntPtr misc); + + public static void SetSingletonInstance (Misc misc) + { + atksharp_misc_set_singleton_instance (misc.Handle); + } + diff --git a/atk/glue/Makefile.am b/atk/glue/Makefile.am index 1c3961724..5b0098021 100644 --- a/atk/glue/Makefile.am +++ b/atk/glue/Makefile.am @@ -3,6 +3,7 @@ lib_LTLIBRARIES = libatksharpglue-2.la libatksharpglue_2_la_LDFLAGS = -module -avoid-version -no-undefined libatksharpglue_2_la_SOURCES = \ + misc.c \ object.c \ util.c \ vmglueheaders.h diff --git a/atk/glue/misc.c b/atk/glue/misc.c new file mode 100644 index 000000000..443edda5b --- /dev/null +++ b/atk/glue/misc.c @@ -0,0 +1,53 @@ +/* misc.c : Glue for overriding vms of AtkMisc + * + * Author: Mike Kestner + * + * Copyright (c) 2008 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. + */ + +#include + + +void atksharp_misc_override_threads_enter (GType gtype, gpointer cb); + +void +atksharp_misc_override_threads_enter (GType gtype, gpointer cb) +{ + AtkMiscClass *klass = g_type_class_peek (gtype); + if (!klass) + klass = g_type_class_ref (gtype); + ((AtkMiscClass *) klass)->threads_enter = cb; +} + +void atksharp_misc_override_threads_leave (GType gtype, gpointer cb); + +void +atksharp_misc_override_threads_leave (GType gtype, gpointer cb) +{ + AtkMiscClass *klass = g_type_class_peek (gtype); + if (!klass) + klass = g_type_class_ref (gtype); + ((AtkMiscClass *) klass)->threads_leave = cb; +} + +void atksharp_misc_set_singleton_instance (AtkMisc *misc); + +void +atksharp_misc_set_singleton_instance (AtkMisc *misc) +{ + atk_misc_instance = misc; +}