Fixed bug in spi_accessible_new, codepath for bonobo-accessible objects.
authorbillh <billh@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Thu, 10 Jan 2002 09:59:00 +0000 (09:59 +0000)
committerbillh <billh@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Thu, 10 Jan 2002 09:59:00 +0000 (09:59 +0000)
Fix required exposure of spi_accessible_construct method to
libgail-gnome, no API impact on normal at-spi clients.

git-svn-id: http://svn.gnome.org/svn/at-spi/trunk@205 e2bd861d-eb25-0410-b326-f6ed22b6b98c

ChangeLog
libspi/accessible.c
libspi/accessible.h

index 8d755f6..53a183d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,10 @@
-2002-01-09  Bill Haneman <bill.haneman@sun.com>
+2002-10-01  Bill Haneman <bill.haneman@sun.com>
+
+       * libspi/accessible.c, libspi/accessible.h:
+       Expose spi_accessible_construct, to enable libgail-gnome
+       construction from spi_accessible subtype.
+
+2002-09-01  Bill Haneman <bill.haneman@sun.com>
 
        * libspi/accessible.c: (spi_accessible_new) :
        Move the test for SPI_IS_REMOTE_OBJECT to
index 39bde6a..dd791c1 100644 (file)
@@ -439,12 +439,19 @@ de_register_public_ref (SpiBase *object)
 SpiAccessible *
 spi_accessible_new (AtkObject *o)
 {
+  return spi_accessible_construct (SPI_ACCESSIBLE_TYPE, o);
+}
+
+SpiAccessible *
+spi_accessible_construct (GType type, AtkObject *o)
+{
     SpiAccessible *retval;
     CORBA_Environment ev;
 
     CORBA_exception_init (&ev);
 
     g_assert (o);
+    g_assert (g_type_is_a (type, SPI_ACCESSIBLE_TYPE));
 
     if ((retval = g_hash_table_lookup (get_public_refs (), o)))
       {
@@ -452,73 +459,73 @@ spi_accessible_new (AtkObject *o)
        return retval;
       }
 
-   else
-     {
-       retval = g_object_new (SPI_ACCESSIBLE_TYPE, NULL);
-
-       spi_base_construct (SPI_BASE (retval), G_OBJECT(o));
-
-       /* aggregate appropriate SPI interfaces based on ATK interfaces */
-       if (ATK_IS_ACTION (o))
-         {
-           bonobo_object_add_interface (bonobo_object (retval),
-                                       BONOBO_OBJECT (spi_action_interface_new (o)));
-         }
-
-       if (ATK_IS_COMPONENT (o))
-         {
-           bonobo_object_add_interface (bonobo_object (retval),
-                                       BONOBO_OBJECT (spi_component_interface_new (o)));
-         }
-
-       if (ATK_IS_EDITABLE_TEXT (o))
-         {
-           bonobo_object_add_interface (bonobo_object (retval),
-                                       BONOBO_OBJECT(spi_editable_text_interface_new (o)));
-         }
-
-       else if (ATK_IS_TEXT (o))
-         {
-           bonobo_object_add_interface (bonobo_object (retval),
-                                       BONOBO_OBJECT (spi_text_interface_new (o)));
-         }
-
-       if (ATK_IS_HYPERTEXT (o))
-         {
-           bonobo_object_add_interface (bonobo_object (retval),
-                                       BONOBO_OBJECT (spi_hypertext_interface_new (o)));
-         }
-
-       if (ATK_IS_IMAGE (o))
-         {
-           bonobo_object_add_interface (bonobo_object (retval),
-                                       BONOBO_OBJECT (spi_image_interface_new (o)));
-        }
-
-       if (ATK_IS_SELECTION (o))
-         {
-           bonobo_object_add_interface (bonobo_object (retval),
-                                       BONOBO_OBJECT (spi_selection_interface_new (o)));
-        }
-
-       if (ATK_IS_TABLE (o))
-         {
-           bonobo_object_add_interface (bonobo_object (retval),
-                                       BONOBO_OBJECT (spi_table_interface_new (o)));
-        }
-
-       if (ATK_IS_VALUE (o))
-         {
-           bonobo_object_add_interface (bonobo_object (retval),
-                                       BONOBO_OBJECT (spi_value_interface_new (o)));
-        }
-     }
-
+    else
+      {
+        retval = g_object_new (type, NULL);
+        spi_base_construct (SPI_BASE (retval), G_OBJECT(o));
+      }
+    
     g_hash_table_insert (get_public_refs (), o, retval);
     g_signal_connect (G_OBJECT (retval), "destroy",
                      G_CALLBACK (de_register_public_ref),
                      NULL);
+
+    /* aggregate appropriate SPI interfaces based on ATK interfaces */
+    if (ATK_IS_ACTION (o))
+      {
+        bonobo_object_add_interface (bonobo_object (retval),
+               BONOBO_OBJECT (spi_action_interface_new (o)));
+      }
+
+    if (ATK_IS_COMPONENT (o))
+      {
+        bonobo_object_add_interface (bonobo_object (retval),
+                                    BONOBO_OBJECT (spi_component_interface_new (o)));
+      }
+
+    if (ATK_IS_EDITABLE_TEXT (o))
+      {
+         bonobo_object_add_interface (bonobo_object (retval),
+                                     BONOBO_OBJECT(spi_editable_text_interface_new (o)));
+      }
+
+    else if (ATK_IS_TEXT (o))
+       {
+         bonobo_object_add_interface (bonobo_object (retval),
+                                     BONOBO_OBJECT (spi_text_interface_new (o)));
+       }
+
+    if (ATK_IS_HYPERTEXT (o))
+      {
+        bonobo_object_add_interface (bonobo_object (retval),
+                                    BONOBO_OBJECT (spi_hypertext_interface_new (o)));
+      }
+
+    if (ATK_IS_IMAGE (o))
+      {
+        bonobo_object_add_interface (bonobo_object (retval),
+                                    BONOBO_OBJECT (spi_image_interface_new (o)));
+      }
+
+    if (ATK_IS_SELECTION (o))
+      {
+        bonobo_object_add_interface (bonobo_object (retval),
+                                    BONOBO_OBJECT (spi_selection_interface_new (o)));
+      }
+
+    if (ATK_IS_TABLE (o))
+      {
+        bonobo_object_add_interface (bonobo_object (retval),
+                                    BONOBO_OBJECT (spi_table_interface_new (o)));
+      }
+
+    if (ATK_IS_VALUE (o))
+      {
+        bonobo_object_add_interface (bonobo_object (retval),
+                                    BONOBO_OBJECT (spi_value_interface_new (o)));
+      }
+
     return retval;
 }
 
index e263f6d..93c6aa0 100644 (file)
@@ -27,7 +27,7 @@ G_BEGIN_DECLS
 #define SPI_ACCESSIBLE_TYPE        (spi_accessible_get_type ())
 #define SPI_ACCESSIBLE(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), SPI_ACCESSIBLE_TYPE, SpiAccessible))
 #define SPI_ACCESSIBLE_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST((k), SPI_ACCESSIBLE_TYPE, SpiAccessibleClass))
-#define SPI_IS_ACCESSIBLE(o)       (G_TYPE_CHECK__INSTANCE_TYPE ((o), SPI_ACCESSIBLE_TYPE))
+#define SPI_IS_ACCESSIBLE(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), SPI_ACCESSIBLE_TYPE))
 #define SPI_IS_ACCESSIBLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SPI_ACCESSIBLE_TYPE))
 
 typedef struct {
@@ -41,6 +41,8 @@ typedef struct {
 
 GType                    spi_accessible_get_type   (void);
 SpiAccessible           *spi_accessible_new        (AtkObject         *o);
+SpiAccessible           *spi_accessible_construct  (GType              type,
+                                                   AtkObject         *o);
 Accessibility_Accessible spi_accessible_new_return (AtkObject         *o,
                                                    gboolean           release_ref,
                                                    CORBA_Environment *ev);