Fixed bug #517761, Collection match rules not working for attributes.
[platform/core/uifw/at-spi2-atk.git] / libspi / accessible.c
index d26784c..ad7084f 100644 (file)
@@ -334,9 +334,11 @@ impl_accessibility_accessible_get_state (PortableServer_Servant servant,
   atk_set = atk_object_ref_state_set (object);
   
   set = spi_state_set_new (atk_set);
-  retval = bonobo_object_dup_ref (
+  retval = CORBA_Object_duplicate (
                                  BONOBO_OBJREF(set),
-                                 ev);
+                                 NULL);
+
+  g_object_unref (atk_set);
 
   return retval;
 }
@@ -349,7 +351,7 @@ impl_accessibility_accessible_get_relation_set (PortableServer_Servant servant,
                                                CORBA_Environment     *ev)
 {
   Accessibility_RelationSet *retval;
-  gint n_relations;
+  gint n_relations = 0;
   gint i;
   AtkRelationSet *relation_set;
   AtkObject      *object = get_atkobject_from_servant (servant);
@@ -358,7 +360,8 @@ impl_accessibility_accessible_get_relation_set (PortableServer_Servant servant,
 
   relation_set = atk_object_ref_relation_set (object);
 
-  n_relations = atk_relation_set_get_n_relations (relation_set);
+  if (relation_set)
+    n_relations = atk_relation_set_get_n_relations (relation_set);
 
   retval = CORBA_sequence_Accessibility_Relation__alloc ();
   retval->_length = retval->_maximum = n_relations;
@@ -368,10 +371,10 @@ impl_accessibility_accessible_get_relation_set (PortableServer_Servant servant,
   for (i = 0; i < n_relations; ++i)
     {
       retval->_buffer[i] =
-        bonobo_object_dup_ref (
+        CORBA_Object_duplicate (
           BONOBO_OBJREF (
             spi_relation_new (atk_relation_set_get_relation (relation_set, i))),
-         ev);
+         NULL);
     }
   
   return retval;
@@ -461,9 +464,9 @@ impl_accessibility_accessible_get_attributes (PortableServer_Servant servant,
     
     g_return_val_if_fail (object != NULL, NULL);
     attributes = atk_object_get_attributes (object);
-    
-    bonobo_return_val_if_fail (attributes != NULL, NULL, ev);
-    n_attributes = g_slist_length (attributes);
+
+    if (attributes)
+      n_attributes = g_slist_length (attributes);
     
     retval = CORBA_sequence_CORBA_string__alloc ();
     retval->_length = retval->_maximum = n_attributes;
@@ -627,10 +630,16 @@ spi_accessible_construct (GType type, AtkObject *o)
         bonobo_object_add_interface (bonobo_object (retval),
                                     BONOBO_OBJECT (spi_streamable_interface_new (o)));
       }
-    if (ATK_IS_DOCUMENT (o))
+    if (ATK_IS_DOCUMENT (o)) /* We add collection interface to document */
       {
-       bonobo_object_add_interface (bonobo_object (retval),
-                                    BONOBO_OBJECT (spi_document_interface_new (o)));
+
+          
+        SpiDocument *doc = spi_document_interface_new (o);
+        bonobo_object_add_interface (BONOBO_OBJECT (doc), 
+                                     BONOBO_OBJECT (spi_collection_interface_new (o)));
+
+        bonobo_object_add_interface (bonobo_object (retval),
+                                       BONOBO_OBJECT (doc));
       }
     if (ATK_IS_HYPERLINK_IMPL (o))
       {