summaryrefslogtreecommitdiff
path: root/atk
diff options
context:
space:
mode:
Diffstat (limited to 'atk')
-rw-r--r--atk/Makefile.am2
-rwxr-xr-xatk/atkmisc.c122
-rwxr-xr-xatk/atkmisc.h90
3 files changed, 214 insertions, 0 deletions
diff --git a/atk/Makefile.am b/atk/Makefile.am
index 648f3e6..43dbed5 100644
--- a/atk/Makefile.am
+++ b/atk/Makefile.am
@@ -44,6 +44,7 @@ libatk_1_0_la_SOURCES = \
atktable.c \
atktext.c \
atkutil.c \
+ atkmisc.c \
atkvalue.c \
atk-enum-types.c
@@ -75,6 +76,7 @@ atk_headers = \
atktable.h \
atktext.h \
atkutil.h \
+ atkmisc.h \
atkvalue.h
libatkinclude_HEADERS = \
diff --git a/atk/atkmisc.c b/atk/atkmisc.c
new file mode 100755
index 0000000..75af04f
--- /dev/null
+++ b/atk/atkmisc.c
@@ -0,0 +1,122 @@
+/* ATK - Accessibility Toolkit
+ * Copyright 2007 Sun Microsystems Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "atkmisc.h"
+
+static void atk_misc_class_init (AtkMiscClass *klass);
+
+GType
+atk_misc_get_type (void)
+{
+ static GType type = 0;
+
+ if (!type)
+ {
+ static const GTypeInfo typeInfo =
+ {
+ sizeof (AtkMiscClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) atk_misc_class_init,
+ (GClassFinalizeFunc) NULL,
+ NULL,
+ sizeof (AtkMisc),
+ 0,
+ (GInstanceInitFunc) NULL,
+ } ;
+ type = g_type_register_static (G_TYPE_OBJECT, "AtkMisc", &typeInfo, 0) ;
+ }
+ return type;
+}
+
+static void
+atk_misc_class_init (AtkMiscClass *klass)
+{
+ klass->threads_enter = NULL;
+ klass->threads_leave = NULL;
+}
+
+/**
+ * atk_misc_threads_enter:
+ * @misc: an AtkMisc instance for this application.
+ *
+ * Take the thread mutex for the GUI toolkit,
+ * if one exists.
+ * (This method is implemented by the toolkit ATK implementation layer;
+ * for instance, for GTK+, GAIL implements this via GDK_THREADS_ENTER).
+ *
+ * Since: ATK 1.13
+ *
+ **/
+void
+atk_misc_threads_enter (AtkMisc *misc)
+{
+ AtkMiscClass *klass = g_type_class_ref (ATK_TYPE_MISC);
+ if (klass->threads_enter)
+ {
+ klass->threads_enter (misc);
+ }
+ g_type_class_unref (klass);
+}
+
+/**
+ * atk_misc_threads_leave:
+ * @misc: an AtkMisc instance for this application.
+ *
+ * Release the thread mutex for the GUI toolkit,
+ * if one exists. This method, and atk_misc_threads_enter,
+ * are needed in some situations by threaded application code which
+ * services ATK requests, since fulfilling ATK requests often
+ * requires calling into the GUI toolkit. If a long-running or
+ * potentially blocking call takes place inside such a block, it should
+ * be bracketed by atk_misc_threads_leave/atk_misc_threads_enter calls.
+ * (This method is implemented by the toolkit ATK implementation layer;
+ * for instance, for GTK+, GAIL implements this via GDK_THREADS_LEAVE).
+ *
+ * Since: ATK 1.13
+ *
+ **/
+void
+atk_misc_threads_leave (AtkMisc *misc)
+{
+ AtkMiscClass *klass = g_type_class_ref (ATK_TYPE_MISC);
+ if (klass->threads_leave)
+ {
+ klass->threads_leave (misc);
+ }
+ g_type_class_unref (klass);
+}
+
+AtkMisc *atk_misc_instance = NULL;
+
+/**
+ * atk_misc_get_instance:
+ *
+ * Obtain the singleton instance of AtkMisc for this application.
+ *
+ * Since: ATK 1.13
+ *
+ * Returns: The singleton instance of AtkMisc for this application.
+ *
+ **/
+const AtkMisc *
+atk_misc_get_instance (void)
+{
+ return atk_misc_instance;
+}
diff --git a/atk/atkmisc.h b/atk/atkmisc.h
new file mode 100755
index 0000000..6e22a19
--- /dev/null
+++ b/atk/atkmisc.h
@@ -0,0 +1,90 @@
+/* ATK - Accessibility Toolkit
+ * Copyright 2007 Sun Microsystems Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __ATK_UTIL_H__
+#define __ATK_UTIL_H__
+
+#include <glib-object.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define ATK_TYPE_MISC (atk_misc_get_type ())
+#define ATK_IS_MISC(obj) G_TYPE_CHECK_INSTANCE_TYPE ((obj), ATK_TYPE_MISC)
+#define ATK_MISC(obj) G_TYPE_CHECK_INSTANCE_CAST ((obj), ATK_TYPE_MISC, AtkMisc)
+#define ATK_MISC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ATK_TYPE_MISC, AtkMiscClass))
+#define ATK_IS_MISC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ATK_TYPE_MISC))
+#define ATK_MISC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ATK_TYPE_MISC, AtkMiscClass))
+
+
+#ifndef _TYPEDEF_ATK_MISC_
+#define _TYPEDEF_ATK_MISC_
+typedef struct _AtkMisc AtkMisc;
+typedef struct _AtkMiscClass AtkMiscClass;
+#endif
+
+struct _AtkMisc
+{
+ GObject parent;
+};
+
+/*
+ * Singleton instance - only the ATK implementation layer for
+ * a given GUI toolkit/application instance should touch this
+ * symbol directly.
+ */
+extern AtkMisc *atk_misc_instance;
+
+struct _AtkMiscClass
+{
+ GObjectClass parent;
+ void (* threads_enter) (AtkMisc *misc);
+ void (* threads_leave) (AtkMisc *misc);
+ gpointer vfuncs[32]; /* future bincompat */
+};
+GType atk_util_get_type (void);
+
+/*
+ * Wrapper for thread lock, i.e. take the thread mutex for the GUI toolkit,
+ * if one exists.
+ * (This method is implemented by the toolkit ATK implementation layer;
+ * for instance, for GTK+, GAIL implements this via GDK_THREADS_ENTER).
+ */
+void atk_misc_threads_enter (AtkMisc *misc);
+
+/*
+ * Wrapper for thread lock, i.e. release the thread mutex for the GUI toolkit,
+ * if one exists.
+ * (This method is implemented by the toolkit ATK implementation layer;
+ * for instance, for GTK+, GAIL implements this via GDK_THREADS_LEAVE).
+ */
+void atk_misc_threads_leave (AtkMisc *misc);
+
+/*
+ * Obtain (singleton) instance of AtkMisc.
+ */
+const AtkMisc *atk_misc_get_instance (void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+#endif /* __ATK_MISC_H__ */