[atk] Bug #601552. New classes: AtkPlug and AtkSocket.



commit 86c9c7f27de046049620ab8ebcbfc713d02da38a
Author: Mike Gorse <mgorse novell com>
Date:   Mon Nov 30 15:12:30 2009 +0800

    Bug #601552. New classes: AtkPlug and AtkSocket.

 atk/Makefile.am |    4 ++
 atk/atk.h       |    2 +
 atk/atkplug.c   |   74 +++++++++++++++++++++++++++++++++++++++++++
 atk/atkplug.h   |   61 ++++++++++++++++++++++++++++++++++++
 atk/atksocket.c |   93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 atk/atksocket.h |   65 ++++++++++++++++++++++++++++++++++++++
 6 files changed, 299 insertions(+), 0 deletions(-)
---
diff --git a/atk/Makefile.am b/atk/Makefile.am
index 0572324..2459680 100644
--- a/atk/Makefile.am
+++ b/atk/Makefile.am
@@ -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	\
diff --git a/atk/atk.h b/atk/atk.h
index a7536a0..4047f99 100755
--- a/atk/atk.h
+++ b/atk/atk.h
@@ -35,11 +35,13 @@
 #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
index 0000000..4ceb11d
--- /dev/null
+++ b/atk/atkplug.c
@@ -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
index 0000000..7d6efd4
--- /dev/null
+++ b/atk/atkplug.h
@@ -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
index 0000000..4fac8be
--- /dev/null
+++ b/atk/atksocket.c
@@ -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
index 0000000..813d4f3
--- /dev/null
+++ b/atk/atksocket.h
@@ -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__ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]