static gint jaw_toplevel_get_index_in_parent (AtkObject *obj) { JawToplevel *jaw_toplevel = JAW_TOPLEVEL(obj); gint i = g_list_index(jaw_toplevel->windows, obj); return i; }
static gint jaw_object_get_index_in_parent (AtkObject *atk_obj) { if (jaw_toplevel_get_child_index(JAW_TOPLEVEL(atk_get_root()), atk_obj) != -1) { return jaw_toplevel_get_child_index(JAW_TOPLEVEL(atk_get_root()), atk_obj); } JawObject *jaw_obj = JAW_OBJECT(atk_obj); 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, "getAccessibleIndexInParent", "()I"); jint index = (*jniEnv)->CallIntMethod( jniEnv, ac, jmid ); return (gint)index; }
static gint jaw_toplevel_get_n_children (AtkObject *obj) { JawToplevel* jaw_toplevel = JAW_TOPLEVEL(obj); gint n = g_list_length(jaw_toplevel->windows); return n; }
static void jaw_toplevel_object_finalize (GObject *obj) { JawToplevel *jaw_toplevel = JAW_TOPLEVEL(obj); g_list_free(jaw_toplevel->windows); JawToplevelClass *klass = JAW_TOPLEVEL_GET_CLASS(obj); G_OBJECT_CLASS(jaw_toplevel_parent_class)->finalize(obj); }
static AtkObject* jaw_toplevel_ref_child (AtkObject *obj, gint i) { JawToplevel *jaw_toplevel = JAW_TOPLEVEL(obj); AtkObject* child = (AtkObject*)g_list_nth_data( jaw_toplevel->windows, i); g_object_ref(G_OBJECT(child)); return child; }
static AtkObject* jaw_impl_get_parent (AtkObject *atk_obj) { if (jaw_toplevel_get_child_index(JAW_TOPLEVEL(atk_get_root()), atk_obj) != -1) { return ATK_OBJECT(atk_get_root()); } JawObject *jaw_obj = JAW_OBJECT(atk_obj); 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, "getAccessibleParent", "()Ljavax/accessibility/Accessible;"); jobject jparent = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid ); if (jparent != NULL ) { jclass classAccessible = (*jniEnv)->FindClass(jniEnv, "javax/accessibility/Accessible" ); jmid = (*jniEnv)->GetMethodID(jniEnv, classAccessible, "getAccessibleContext", "()Ljavax/accessibility/AccessibleContext;"); jobject parent_ac = (*jniEnv)->CallObjectMethod( jniEnv, jparent, jmid ); AtkObject *obj = (AtkObject*) object_table_lookup( jniEnv, parent_ac ); if (obj != NULL ) { return obj; } } return ATK_OBJECT(atk_get_root()); }
static gboolean window_close_handler (gpointer p) { CallbackPara *para = (CallbackPara*)p; jobject global_ac = para->global_ac; gboolean is_toplevel = para->is_toplevel; JNIEnv *jniEnv = jaw_util_get_jni_env(); if (jniEnv == NULL) { if (jaw_debug) g_warning("window_close_handler: env == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } if (global_ac == NULL) { if (jaw_debug) g_warning("window_close_handler: global_ac == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } JawImpl *jaw_impl = jaw_impl_find_instance(jniEnv, global_ac); if (jaw_impl == NULL) { if (jaw_debug) g_warning("window_close_handler: jaw_impl == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } AtkObject* atk_obj = ATK_OBJECT(jaw_impl); if (!g_strcmp0(atk_role_get_name(atk_object_get_role(atk_obj)), "redundant object")) { free_callback_para(para); return G_SOURCE_REMOVE; } if (atk_object_get_role(atk_obj) == ATK_ROLE_TOOL_TIP) { free_callback_para(para); return G_SOURCE_REMOVE; } if (is_toplevel) { gint n = jaw_toplevel_remove_window(JAW_TOPLEVEL(atk_get_root()), atk_obj); g_object_notify(G_OBJECT(atk_get_root()), "accessible-name"); g_signal_emit_by_name(ATK_OBJECT(atk_get_root()), "children-changed::remove", n, atk_obj, NULL); g_signal_emit_by_name(atk_obj, "destroy", 0); } free_callback_para(para); return G_SOURCE_REMOVE; }