Bug #601552. New classes: AtkPlug and AtkSocket.
authorMike Gorse <mgorse@novell.com>
Mon, 30 Nov 2009 07:12:30 +0000 (15:12 +0800)
committerLi Yuan <li.yuan@sun.com>
Mon, 30 Nov 2009 07:12:30 +0000 (15:12 +0800)
atk/Makefile.am
atk/atk.h
atk/atkplug.c [new file with mode: 0644]
atk/atkplug.h [new file with mode: 0644]
atk/atksocket.c [new file with mode: 0644]
atk/atksocket.h [new file with mode: 0644]

index 0572324..2459680 100644 (file)
@@ -37,10 +37,12 @@ libatk_1_0_la_SOURCES =     \
        atknoopobjectfactory.c  \
        atkobject.c             \
        atkobjectfactory.c      \
+       atkplug.c               \
        atkregistry.c           \
        atkrelation.c           \
        atkrelationset.c        \
        atkselection.c          \
+       atksocket.c             \
        atkstate.c              \
        atkstateset.c           \
        atkstreamablecontent.c  \
@@ -67,12 +69,14 @@ atk_headers = \
         atknoopobjectfactory.h \
         atkobject.h            \
        atkobjectfactory.h      \
+        atkplug.h              \
         atkimage.h             \
         atkregistry.h          \
         atkrelation.h          \
         atkrelationtype.h      \
         atkrelationset.h       \
         atkselection.h         \
+        atksocket.h            \
         atkstate.h             \
         atkstateset.h          \
         atkstreamablecontent.h \
index a7536a0..4047f99 100755 (executable)
--- a/atk/atk.h
+++ b/atk/atk.h
 #include <atk/atknoopobject.h>
 #include <atk/atknoopobjectfactory.h>
 #include <atk/atkobjectfactory.h>
+#include <atk/atkplug.h>
 #include <atk/atkregistry.h>
 #include <atk/atkrelation.h>
 #include <atk/atkrelationset.h>
 #include <atk/atkrelationtype.h>
 #include <atk/atkselection.h>
+#include <atk/atksocket.h>
 #include <atk/atkstate.h>
 #include <atk/atkstateset.h>
 #include <atk/atkstreamablecontent.h>
diff --git a/atk/atkplug.c b/atk/atkplug.c
new file mode 100644 (file)
index 0000000..4ceb11d
--- /dev/null
@@ -0,0 +1,74 @@
+/* ATK -  Accessibility Toolkit
+ * Copyright (C) 2009 Novell, 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 "atk.h"
+#include "atkplug.h"
+
+G_DEFINE_TYPE (AtkPlug, atk_plug, ATK_TYPE_OBJECT);
+
+static void atk_plug_class_init (AtkPlugClass *klass);
+
+static void
+atk_plug_init (AtkPlug* obj)
+{
+}
+
+static void
+atk_plug_class_init (AtkPlugClass* klass)
+{
+  klass->get_object_id = NULL;
+}
+
+AtkObject*
+atk_plug_new (void)
+{
+  AtkObject* accessible;
+  
+  accessible = g_object_new (ATK_TYPE_PLUG, NULL);
+  g_return_val_if_fail (accessible != NULL, NULL);
+
+  accessible->role = ATK_ROLE_FILLER;
+  accessible->layer = ATK_LAYER_WIDGET;
+  
+  return accessible;
+}
+
+/**
+ * atk_plug_get_plug_id:
+ * @obj: an #AtkPlug
+ *
+ * Gets the unique ID of an #AtkPlug object, which can be used to embed inside
+ * of an #AtkSocket using atk_socket_embed().
+ *
+ * Returns: the unique ID for the plug
+ **/
+gchar*
+atk_plug_get_id (AtkPlug* obj)
+{
+  AtkPlugClass *klass;
+
+  g_return_val_if_fail (ATK_IS_PLUG (obj), NULL);
+
+  klass = g_type_class_peek (ATK_TYPE_PLUG);
+
+  if (klass && klass->get_object_id)
+    return (klass->get_object_id) (obj);
+  else
+    return NULL;
+}
diff --git a/atk/atkplug.h b/atk/atkplug.h
new file mode 100644 (file)
index 0000000..7d6efd4
--- /dev/null
@@ -0,0 +1,61 @@
+/* ATK -  Accessibility Toolkit
+ * Copyright 2009 Novell, 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.
+ */
+
+#if defined(ATK_DISABLE_SINGLE_INCLUDES) && !defined (__ATK_H_INSIDE__) && !defined (ATK_COMPILATION)
+#error "Only <atk/atk.h> can be included directly."
+#endif
+
+#ifndef __ATK_PLUG_H__
+#define __ATK_PLUG_H__
+
+G_BEGIN_DECLS
+
+#define ATK_TYPE_PLUG               (atk_plug_get_type ())
+#define ATK_PLUG(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), ATK_TYPE_PLUG, AtkPlug))
+#define ATK_IS_PLUG(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ATK_TYPE_PLUG))
+#define ATK_PLUG_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST ((klass), ATK_TYPE_PLUG, AtkPlugClass))
+#define ATK_IS_PLUG_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE ((klass), ATK_TYPE_PLUG))
+#define ATK_PLUG_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj), ATK_TYPE_PLUG, AtkPlugClass))
+
+typedef struct _AtkPlug         AtkPlug;
+typedef struct _AtkPlugClass    AtkPlugClass;
+
+struct _AtkPlug
+{
+  AtkObject parent;
+};
+
+GType atk_plug_get_type (void);
+
+struct _AtkPlugClass
+{
+  AtkObjectClass parent_class;
+  
+  /* to be subscribed to by atk-bridge */
+
+  /*< protected >*/
+  gchar* (* get_object_id) (AtkPlug* obj);
+};
+
+AtkObject*    atk_plug_new     (void);
+gchar*        atk_plug_get_id  (AtkPlug* plug);
+
+G_END_DECLS
+
+#endif /* __ATK_PLUG_H__ */
diff --git a/atk/atksocket.c b/atk/atksocket.c
new file mode 100644 (file)
index 0000000..4fac8be
--- /dev/null
@@ -0,0 +1,93 @@
+/* ATK -  Accessibility Toolkit
+ * Copyright (C) 2009 Novell, 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 "atk.h"
+#include "atksocket.h"
+
+G_DEFINE_TYPE (AtkSocket, atk_socket, ATK_TYPE_OBJECT);
+
+static void atk_socket_class_init (AtkSocketClass *klass);
+
+static void
+atk_socket_init (AtkSocket* obj)
+{
+  obj->embedded_plug_id = NULL;
+}
+
+static void
+atk_socket_class_init (AtkSocketClass* klass)
+{
+  klass->embed = NULL;
+}
+
+AtkObject*
+atk_socket_new (void)
+{
+  AtkObject* accessible;
+  
+  accessible = g_object_new (ATK_TYPE_SOCKET, NULL);
+  g_return_val_if_fail (accessible != NULL, NULL);
+
+  accessible->role = ATK_ROLE_FILLER;
+  accessible->layer = ATK_LAYER_WIDGET;
+  
+  return accessible;
+}
+
+/**
+ * atk_socket_embed:
+ * @obj: an #AtkSocket
+ * @plug_id: the ID of an #AtkPlug
+ *
+ * Embeds the children of an #AtkPlug as the children of the #AtkSocket.  The
+ * plug may be in the same process or in a different process.
+ **/
+void
+atk_socket_embed (AtkSocket* obj, gchar* plug_id)
+{
+  AtkSocketClass *klass;
+
+  g_return_if_fail (plug_id != NULL);
+  g_return_if_fail (ATK_IS_SOCKET (obj));
+
+  klass = g_type_class_peek (ATK_TYPE_SOCKET);
+  if (klass && klass->embed)
+    {
+      if (obj->embedded_plug_id)
+        g_free (obj->embedded_plug_id);
+      obj->embedded_plug_id = g_strdup (plug_id);
+      (klass->embed) (obj, plug_id);
+    }
+}
+
+/**
+ * atk_socket_is_occupied:
+ * @obj: an #AtkSocket
+ *
+ * Determines whether or not the socket has an embedded plug.
+ *
+ * Returns: TRUE if a plug is embedded in the socket
+ **/
+gboolean
+atk_socket_is_occupied (AtkSocket* obj)
+{
+  g_return_val_if_fail (ATK_IS_SOCKET (obj), FALSE);
+
+  return (obj->embedded_plug_id != NULL);
+}
diff --git a/atk/atksocket.h b/atk/atksocket.h
new file mode 100644 (file)
index 0000000..813d4f3
--- /dev/null
@@ -0,0 +1,65 @@
+/* ATK -  Accessibility Toolkit
+ * Copyright 2009 Novell, 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.
+ */
+
+#if defined(ATK_DISABLE_SINGLE_INCLUDES) && !defined (__ATK_H_INSIDE__) && !defined (ATK_COMPILATION)
+#error "Only <atk/atk.h> can be included directly."
+#endif
+
+#ifndef __ATK_SOCKET_H__
+#define __ATK_SOCKET_H__
+
+G_BEGIN_DECLS
+
+#define ATK_TYPE_SOCKET               (atk_socket_get_type ())
+#define ATK_SOCKET(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), ATK_TYPE_SOCKET, AtkSocket))
+#define ATK_IS_SOCKET(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ATK_TYPE_SOCKET))
+#define ATK_SOCKET_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST ((klass), ATK_TYPE_SOCKET, AtkSocketClass))
+#define ATK_IS_SOCKET_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE ((klass), ATK_TYPE_SOCKET))
+#define ATK_SOCKET_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj), ATK_TYPE_SOCKET, AtkSocketClass))
+
+typedef struct _AtkSocket         AtkSocket;
+typedef struct _AtkSocketClass    AtkSocketClass;
+
+struct _AtkSocket
+{
+  AtkObject parent;
+
+  /*< private >*/
+  gchar* embedded_plug_id;
+};
+
+GType atk_socket_get_type (void);
+
+struct _AtkSocketClass
+{
+  AtkObjectClass parent_class;
+  
+  /* to be subscribed to by atk-bridge */
+
+  /*< protected >*/
+  void (* embed) (AtkSocket *obj, gchar* plug_id);
+};
+
+AtkObject*    atk_socket_new           (void);
+void          atk_socket_embed         (AtkSocket* obj, gchar* plug_id);
+gboolean      atk_socket_is_occupied   (AtkSocket* obj);
+
+G_END_DECLS
+
+#endif /* __ATK_SOCKET_H__ */