static AtkStateSet* jaw_object_ref_state_set (AtkObject *atk_obj) { JawObject *jaw_obj = JAW_OBJECT(atk_obj); AtkStateSet* state_set = jaw_obj->state_set; atk_state_set_clear_states( state_set ); jobject ac = jaw_obj->acc_context; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAccessibleContext = (*jniEnv)->FindClass( jniEnv, "javax/accessibility/AccessibleContext" ); jmethodID jmid = (*jniEnv)->GetMethodID( jniEnv, classAccessibleContext, "getAccessibleStateSet", "()Ljavax/accessibility/AccessibleStateSet;" ); jobject jstate_set = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid ); jclass classAccessibleStateSet = (*jniEnv)->FindClass( jniEnv, "javax/accessibility/AccessibleStateSet" ); jmid = (*jniEnv)->GetMethodID(jniEnv, classAccessibleStateSet, "toArray", "()[Ljavax/accessibility/AccessibleState;"); jobjectArray jstate_arr = (*jniEnv)->CallObjectMethod( jniEnv, jstate_set, jmid ); jsize jarr_size = (*jniEnv)->GetArrayLength(jniEnv, jstate_arr); jsize i; for (i = 0; i < jarr_size; i++) { jobject jstate = (*jniEnv)->GetObjectArrayElement( jniEnv, jstate_arr, i ); AtkStateType state_type = jaw_util_get_atk_state_type_from_java_state( jniEnv, jstate ); atk_state_set_add_state( state_set, state_type ); if (state_type == ATK_STATE_ENABLED) { atk_state_set_add_state( state_set, ATK_STATE_SENSITIVE ); } } g_object_ref(G_OBJECT(state_set)); return state_set; }
/** * Wrapper for atk_state_set_clear_states(). */ static PyObject* _atkstateset_clear_states (PyAtkStateSet *self) { debug ("_atkstateset_clear_states\n"); atk_state_set_clear_states (ATKSTATESET (self)); Py_RETURN_NONE; }
/* page accessible's state set is a copy ev-view accessible's state * set but removing ATK_STATE_SHOWING if the page is not on screen and * ATK_STATE_FOCUSED if it is not the relevant page. */ static AtkStateSet * ev_page_accessible_ref_state_set (AtkObject *accessible) { AtkStateSet *state_set; AtkStateSet *copy_set; AtkStateSet *view_accessible_state_set; EvPageAccessible *self; EvView *view; gint relevant_page; g_return_val_if_fail (EV_IS_PAGE_ACCESSIBLE (accessible), NULL); self = EV_PAGE_ACCESSIBLE (accessible); view = ev_page_accessible_get_view (self); state_set = ATK_OBJECT_CLASS (ev_page_accessible_parent_class)->ref_state_set (accessible); atk_state_set_clear_states (state_set); view_accessible_state_set = atk_object_ref_state_set (ATK_OBJECT (self->priv->view_accessible)); copy_set = atk_state_set_or_sets (state_set, view_accessible_state_set); if (self->priv->page >= view->start_page && self->priv->page <= view->end_page) atk_state_set_add_state (copy_set, ATK_STATE_SHOWING); else atk_state_set_remove_state (copy_set, ATK_STATE_SHOWING); relevant_page = ev_view_accessible_get_relevant_page (self->priv->view_accessible); if (atk_state_set_contains_state (view_accessible_state_set, ATK_STATE_FOCUSED) && self->priv->page == relevant_page) atk_state_set_add_state (copy_set, ATK_STATE_FOCUSED); else atk_state_set_remove_state (copy_set, ATK_STATE_FOCUSED); relevant_page = ev_view_accessible_get_relevant_page (self->priv->view_accessible); if (atk_state_set_contains_state (view_accessible_state_set, ATK_STATE_FOCUSED) && self->priv->page == relevant_page) atk_state_set_add_state (copy_set, ATK_STATE_FOCUSED); else atk_state_set_remove_state (copy_set, ATK_STATE_FOCUSED); g_object_unref (state_set); g_object_unref (view_accessible_state_set); return copy_set; }
static VALUE rg_clear_states(VALUE self) { atk_state_set_clear_states(_SELF(self)); return self; }
static gboolean test_state_set (void) { AtkStateSet *state_set1, *state_set2, *state_set3; AtkStateType state_array[3]; gboolean b_val; state_set1 = atk_state_set_new (); b_val = atk_state_set_is_empty (state_set1); if (b_val) { g_print ("New state set is not empty\n"); return FALSE; } b_val = atk_state_set_add_state (state_set1, ATK_STATE_ACTIVE); if (!b_val) { g_print ("Adding new state set failed\n"); return FALSE; } b_val = atk_state_set_is_empty (state_set1); if (!b_val) { g_print ("New state set is empty when it should not be\n"); return FALSE; } b_val = atk_state_set_add_state (state_set1, ATK_STATE_ACTIVE); if (b_val) { g_print ("Adding new state set succeeded when it should not have\n"); return FALSE; } state_array[0] = ATK_STATE_ACTIVE; state_array[1] = ATK_STATE_VISIBLE; state_array[2] = ATK_STATE_BUSY; atk_state_set_add_states (state_set1, state_array, 3); b_val = atk_state_set_contains_state (state_set1, ATK_STATE_ACTIVE); if (!b_val) { g_print ("Contains state failed for ATK_STATE_ACTIVE but should not have\n"); return FALSE; } b_val = atk_state_set_contains_state (state_set1, ATK_STATE_VISIBLE); if (!b_val) { g_print ("Contains state failed for ATK_STATE_VISIBLE but should not have\n"); return FALSE; } b_val = atk_state_set_contains_state (state_set1, ATK_STATE_BUSY); if (!b_val) { g_print ("Contains state failed for ATK_STATE_BUSY but should not have\n"); return FALSE; } b_val = atk_state_set_contains_state (state_set1, ATK_STATE_VERTICAL); if (b_val) { g_print ("Contains state succeeded for ATK_STATE_VERTICAL but should not have\n"); return FALSE; } atk_state_set_remove_state (state_set1, ATK_STATE_BUSY); b_val = atk_state_set_contains_state (state_set1, ATK_STATE_BUSY); if (b_val) { g_print ("Contains state succeeded for ATK_STATE_BUSY but should not have\n"); return FALSE; } b_val = atk_state_set_contains_state (state_set1, ATK_STATE_VISIBLE); if (!b_val) { g_print ("Contains state failed for ATK_STATE_VISIBLE but should not have\n"); return FALSE; } b_val = atk_state_set_contains_states (state_set1, state_array, 3); if (b_val) { g_print ("Contains states succeeded should not have\n"); return FALSE; } b_val = atk_state_set_contains_states (state_set1, state_array, 2); if (!b_val) { g_print ("Contains states failed should not have\n"); return FALSE; } state_array[0] = ATK_STATE_SINGLE_LINE; state_array[1] = ATK_STATE_VISIBLE; state_array[2] = ATK_STATE_VERTICAL; state_set2 = atk_state_set_new(); atk_state_set_add_states (state_set2, state_array, 3); state_set3 = atk_state_set_and_sets (state_set1, state_set2); b_val = atk_state_set_contains_state (state_set3, ATK_STATE_VISIBLE); if (!b_val) { g_print ("Contains state failed for ATK_STATE_VISIBLE after and but should not have\n"); return FALSE; } b_val = atk_state_set_contains_state (state_set3, ATK_STATE_BUSY); if (b_val) { g_print ("Contains state succeeded for ATK_STATE_BUSY after and but should not have\n"); return FALSE; } g_object_unref (state_set3); atk_state_set_remove_state (state_set1, ATK_STATE_VISIBLE); state_set3 = atk_state_set_and_sets (state_set1, state_set2); if (state_set3) { g_print ("state_set 3 is not NULL after and but should be\n"); return FALSE; } state_set3 = atk_state_set_or_sets (state_set1, state_set2); b_val = atk_state_set_contains_state (state_set3, ATK_STATE_VISIBLE); if (!b_val) { g_print ("Contains state failed for ATK_STATE_VISIBLE after or but should not have\n"); return FALSE; } b_val = atk_state_set_contains_state (state_set3, ATK_STATE_INVALID); if (b_val) { g_print ("Contains state succeeded for ATK_STATE_INVALID after or but should not have\n"); return FALSE; } g_object_unref (state_set3); b_val = atk_state_set_add_state (state_set1, ATK_STATE_VISIBLE); if (!b_val) { g_print ("Adding new state set failed\n"); return FALSE; } state_set3 = atk_state_set_xor_sets (state_set1, state_set2); b_val = atk_state_set_contains_state (state_set3, ATK_STATE_VISIBLE); if (b_val) { g_print ("Contains state succeeded for ATK_STATE_VISIBLE after xor but should not have\n"); return FALSE; } b_val = atk_state_set_contains_state (state_set3, ATK_STATE_ACTIVE); if (!b_val) { g_print ("Contains state failed for ATK_STATE_ACTIVE after xor but should not have\n"); return FALSE; } atk_state_set_clear_states (state_set1); b_val = atk_state_set_contains_state (state_set1, ATK_STATE_ACTIVE); if (b_val) { g_print ("Contains state succeeded for ATK_STATE_ACTIVE but should not have\n"); return FALSE; } g_object_unref (state_set1); g_object_unref (state_set2); g_object_unref (state_set3); return TRUE; }