[java-atk-wrapper] Revert to d53bd87



commit f15e0add544b33a287f5703d6f230d21c5b8f4ad
Author: Magdalen Berns <m berns thismagpie com>
Date:   Sun Jun 21 14:56:52 2015 +0100

    Revert to d53bd87

 HACKING                                            |   27 +-
 acinclude.m4                                       |   11 -
 configure.ac                                       |   10 +-
 java-atk-wrapper.doap                              |    4 +-
 jni/src/AtkWrapper.c                               |   25 +-
 jni/src/Makefile.am                                |   15 +-
 jni/src/jawaction.c                                |    1 +
 jni/src/jawimpl.c                                  |  165 ++++++---
 jni/src/jawimpl.h                                  |    2 -
 jni/src/jawobject.c                                |  409 +++++++-------------
 jni/src/jawobject.h                                |    4 +-
 jni/src/jawtable.c                                 |   44 +--
 jni/src/jawtablecell.c                             |  139 -------
 jni/src/jawutil.c                                  |   35 +--
 jni/src/jawutil.h                                  |    9 +-
 jni/src/jawwindow.c                                |  139 -------
 jni/src/jawwindow.h                                |   68 ----
 wrapper/Makefile.am                                |   14 +-
 wrapper/org/GNOME/Accessibility/AtkComponent.java  |    6 +-
 wrapper/org/GNOME/Accessibility/AtkTable.java      |   21 +-
 wrapper/org/GNOME/Accessibility/AtkTableCell.java  |   46 ---
 wrapper/org/GNOME/Accessibility/AtkWindow.java     |   33 --
 wrapper/org/GNOME/Accessibility/AtkWrapper.java.in |    3 +-
 23 files changed, 334 insertions(+), 896 deletions(-)
---
diff --git a/HACKING b/HACKING
index 73e07d5..30d64fc 100644
--- a/HACKING
+++ b/HACKING
@@ -13,9 +13,9 @@ make sure to cc the gnome-accessibility-devel list too.
 
 To file a bug against java-atk-wrapper:
 
-1. go to https://bugzilla.gnome.org/enter_bug.cgi?product=java-atk-wrapper
+1. go to https://bugzilla.gnome.org/enter_bug.cgi?product=at-spi.
 2. select java-atk-wrapper from the component list
-3. file bug using a descriptive subject title
+3. file bug using a descriptive subject title.
 
 Feel free to upload a patch to your bug for review.
 
@@ -35,12 +35,25 @@ Document Interface (not yet implemented):
 HyperlinkImpl:
 TODO Currently Not fully documented by ATK
 
+# NOTE: Window interface signals currently seems to be being handled in jawobject.c
 Object base class:
   AtkFunction
   implementor_ref_accessible
+  get_parent
+  peek_parent
+  get_n_accessible_children # get_n_children currently implemented
+  ref_accessible_child
+  ref_relation_set
+  set_name
+  set_description
+  set_parent
+  set_role
+  notify_state_change
+  object_initialize
   add_relationship
   remove_relationship
   get_attributes
+  get_object_locale
   get_localized_name
   for_name
 
@@ -51,13 +64,17 @@ Table:
   set_row_header
   set_column_header
   set_summary
+  add_column_selection
+  add_row_selection
 
-TableCell:
+TableCell (not yet implemented):
   get_column_span
   get_column_header_cells
+  get_position
   get_row_span
   get_row_header_cells
   get_row_column_span
+  cell_get_table
 
 Text:
   set_free
@@ -70,7 +87,7 @@ Deprecated Methods Which Are Implemented
 ----------------------------------------
 
 Table Interface:
-  get_index_at
+  get_index_at            -   use ref_at instead
   get_column_at_index
   get_row_at_index
 
@@ -92,7 +109,7 @@ Spaces instead of tabs.
 Two spaces per indent.
 
 JNI error messages are in the form:
-  g_warning("method calling instance: instance_name == NULL");
+  g_warning("\n *** method calling instance: instance == NULL *** \n");
 
 Other Things to Keep in Mind
 ----------------------------
diff --git a/acinclude.m4 b/acinclude.m4
index 05c0133..d1581cd 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -51,17 +51,6 @@ case "$host" in
     PLATFORM_CLASSPATH_SEPARATOR=":"
     SOPREFIX=
     ;;
-  *-*-darwin*)
-    if test "$gcj_compile" = "yes"; then
-      JNI_INCLUDES=
-    else
-      JNI_INCLUDES="-I$JDK_SRC/include -I$JDK_SRC/include/darwin"
-    fi
-    PLATFORM_CFLAGS=
-    PLATFORM_LDFLAGS=
-    PLATFORM_CLASSPATH_SEPARATOR=":"
-    SOPREFIX=
-    ;;
   *)
     if test "$gcj_compile" = "yes"; then
       JNI_INCLUDES=
diff --git a/configure.ac b/configure.ac
index 9b20532..aea51e5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@ AC_PREREQ(2.63)
 AC_INIT([java-atk-wrapper],[0.33.0])
 
 AC_CONFIG_AUX_DIR(config)
-AM_INIT_AUTOMAKE([1.11 -Wall check-news])
+AM_INIT_AUTOMAKE([1.11 -Wall check-news -Wdeprecated-declarations])
 
 AM_SILENT_RULES([yes])
 m4_pattern_allow([AM_PROG_AR])
@@ -20,6 +20,7 @@ LIB_ATK_WRAPPER_LT_VERSION=3:22:2
 AC_SUBST(LIB_ATK_WRAPPER_LT_VERSION)
 
 # jni
+
 AC_CONFIG_HEADERS([config.h])
 
 AC_PROG_CC(gcc)
@@ -41,6 +42,7 @@ PKG_CHECK_MODULES(JAW, [
   dbus-1
   glib-2.0 >= 2.32.0
   gthread-2.0
+  gmodule-2.0 >= 2.0.0
   gdk-2.0
   gdk-3.0
   gobject-2.0
@@ -59,7 +61,6 @@ AC_SUBST(LIB_ATK_WRAPPER_LD_FLAGS)
 
 # java wrapper
 
-AM_CONDITIONAL(USER, test `whoami` = "root")
 JAVA_REQUIRED=1.6
 JAVA_ERROR_MESSAGE="Java $JAVA_REQUIRED or later is required to build java-access-bridge"
 
@@ -120,7 +121,7 @@ AC_SUBST(JDK_SRC)
 AC_SUBST(JAVA_HOME)
 
 if test "x$GCC" = xyes; then
-  JAW_CFLAGS=$JAW_CFLAGS $CFLAGS
+  JAW_CFLAGS=$JAW_CFLAGS $CFLAGS -I$JDK_SRC/include
 else
   AC_MSG_ERROR("You should compile with GCC")
 fi
@@ -172,6 +173,5 @@ Build configuration:
        Prefix:                                 ${prefix}
        Source code location:                   ${srcdir}
        Compiler:                               ${CC}
-       JDK src:                                ${JDK_SRC}
-       JNI includes:                           ${JNI_INCLUDES}
+       JDK src                                 ${JDK_SRC}
 "
diff --git a/java-atk-wrapper.doap b/java-atk-wrapper.doap
index e195438..0ceec45 100644
--- a/java-atk-wrapper.doap
+++ b/java-atk-wrapper.doap
@@ -8,10 +8,8 @@
   <shortdesc xml:lang="en">ATK implementation for Java by using JNI technic</shortdesc>
   <description>Java ATK Wrapper provides a C wrapper to java to allow access to methods
    from the ATK API interface in java</description>
-  <homepage rdf:resource="http://live.gnome.org/Accessibility/JavaAtkWrapper"; />
+  <homepage rdf:resource="http://live.gnome.org/Accessibility/JavaATKWrapper"; />
   <mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gnome-accessibility-devel"; />
-  <bug-database rdf:resource="https://bugzilla.gnome.org/browse.cgi?product=java-atk-wrapper"; />
-  <download-page rdf:resource="https://download.gnome.org/sources/java-atk-wrapper"; />
   <category rdf:resource="http://api.gnome.org/doap-extensions#apps"; />
   <programming-language>Java</programming-language>
   <programming-language>C</programming-language>
diff --git a/jni/src/AtkWrapper.c b/jni/src/AtkWrapper.c
index 2831f2c..e60fc51 100644
--- a/jni/src/AtkWrapper.c
+++ b/jni/src/AtkWrapper.c
@@ -30,7 +30,6 @@
 #include "jawutil.h"
 #include "jawimpl.h"
 #include "jawtoplevel.h"
-#include "jawwindow.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -319,7 +318,7 @@ window_open_handler (gpointer p)
                           atk_obj,
                           NULL);
 
-    g_signal_emit(atk_obj, g_signal_lookup("create", JAW_TYPE_WINDOW), 0);
+    g_signal_emit(atk_obj, g_signal_lookup("create", JAW_TYPE_OBJECT), 0);
   }
 
   free_callback_para(para);
@@ -397,7 +396,7 @@ window_close_handler (gpointer p)
                           atk_obj,
                           NULL);
 
-    g_signal_emit(atk_obj, g_signal_lookup("destroy", JAW_TYPE_WINDOW), 0);
+    g_signal_emit(atk_obj, g_signal_lookup("destroy", JAW_TYPE_OBJECT), 0);
   }
 
   free_callback_para(para);
@@ -449,7 +448,7 @@ window_minimize_handler (gpointer p)
   }
 
   AtkObject* atk_obj = ATK_OBJECT(jaw_impl);
-  g_signal_emit(atk_obj, g_signal_lookup("minimize", JAW_TYPE_WINDOW), 0);
+  g_signal_emit(atk_obj, g_signal_lookup("minimize", JAW_TYPE_OBJECT), 0);
 
   free_callback_para(para);
 
@@ -499,7 +498,7 @@ window_maximize_handler (gpointer p)
   }
 
   AtkObject* atk_obj = ATK_OBJECT(jaw_impl);
-  g_signal_emit(atk_obj, g_signal_lookup("maximize", JAW_TYPE_WINDOW), 0);
+  g_signal_emit(atk_obj, g_signal_lookup("maximize", JAW_TYPE_OBJECT), 0);
 
   free_callback_para(para);
 
@@ -548,7 +547,7 @@ window_restore_handler (gpointer p)
   }
 
   AtkObject* atk_obj = ATK_OBJECT(jaw_impl);
-  g_signal_emit(atk_obj, g_signal_lookup("restore", JAW_TYPE_WINDOW), 0);
+  g_signal_emit(atk_obj, g_signal_lookup("restore", JAW_TYPE_OBJECT), 0);
 
   free_callback_para(para);
 
@@ -597,7 +596,7 @@ window_activate_handler (gpointer p)
   }
 
   AtkObject* atk_obj = ATK_OBJECT(jaw_impl);
-  g_signal_emit(atk_obj, g_signal_lookup("activate", JAW_TYPE_WINDOW), 0);
+  g_signal_emit(atk_obj, g_signal_lookup("activate", JAW_TYPE_OBJECT), 0);
 
   free_callback_para(para);
 
@@ -645,7 +644,7 @@ window_deactivate_handler (gpointer p)
   }
 
   AtkObject* atk_obj = ATK_OBJECT(jaw_impl);
-  g_signal_emit(atk_obj, g_signal_lookup("deactivate", JAW_TYPE_WINDOW), 0);
+  g_signal_emit(atk_obj, g_signal_lookup("deactivate", JAW_TYPE_OBJECT), 0);
 
   free_callback_para(para);
 
@@ -696,7 +695,7 @@ window_state_change_handler (gpointer p)
   }
 
   AtkObject* atk_obj = ATK_OBJECT(jaw_impl);
-  g_signal_emit(atk_obj, g_signal_lookup("state-change", JAW_TYPE_WINDOW), 0);
+  g_signal_emit(atk_obj, g_signal_lookup("state-change", JAW_TYPE_OBJECT), 0);
 
   free_callback_para(para);
 
@@ -1084,8 +1083,8 @@ object_state_change_handler (gpointer p)
   }
 
   atk_object_notify_state_change(ATK_OBJECT(jaw_impl),
-                              para->atk_state,
-                              para->state_value);
+                                 para->atk_state,
+                                 para->state_value);
 
   free_callback_para(para);
   return G_SOURCE_REMOVE;
@@ -1210,9 +1209,7 @@ component_removed_handler (gpointer p)
     return G_SOURCE_REMOVE;
   }
   if (atk_object_get_role(atk_obj) == ATK_ROLE_TOOL_TIP)
-    atk_object_notify_state_change(atk_obj,
-                                   ATK_STATE_SHOWING,
-                                   FALSE);
+    atk_object_notify_state_change(atk_obj, ATK_STATE_SHOWING, FALSE);
   free_callback_para(para);
 
   return G_SOURCE_REMOVE;
diff --git a/jni/src/Makefile.am b/jni/src/Makefile.am
index f4b3279..b1bd59c 100644
--- a/jni/src/Makefile.am
+++ b/jni/src/Makefile.am
@@ -14,22 +14,19 @@ libatk_wrapper_la_SOURCES = AtkWrapper.c \
                             jawimage.c \
                             jawselection.c \
                             jawvalue.c \
-                            jawtable.c \
-                            jawtablecell.c \
-                            jawwindow.c
+                            jawtable.c
 
 noinst_HEADERS = jawimpl.h \
                  jawobject.h \
                  jawhyperlink.h \
                  jawtoplevel.h \
-                 jawutil.h \
-                 jawwindow.h
+                 jawutil.h
 
-libatk_wrapper_la_CFLAGS = $(JAW_CFLAGS) \
-                           $(JNI_INCLUDES)
+libatk_wrapper_la_CFLAGS = $(JNI_INCLUDES)\
+                           $(JAW_CFLAGS)
 
-libatk_wrapper_la_CPPFLAGS = $(JAW_CFLAGS) \
-                             $(JNI_INCLUDES)
+libatk_wrapper_la_CPPFLAGS = $(JNI_INCLUDES)\
+                             $(JAW_CFLAGS)
 
 libatk_wrapper_la_LDFLAGS = $(LIB_ATK_WRAPPER_LD_FLAGS) \
                             $(LT_VERSION_INFO) \
diff --git a/jni/src/jawaction.c b/jni/src/jawaction.c
index 4edd45f..9af38d4 100644
--- a/jni/src/jawaction.c
+++ b/jni/src/jawaction.c
@@ -53,6 +53,7 @@ jaw_action_interface_init (AtkActionIface *iface)
   iface->get_name = jaw_action_get_name;
   iface->get_keybinding = jaw_action_get_keybinding;
   iface->get_localized_name = NULL; /*jaw_get_localized_name;*/
+  iface->set_description = NULL;
 }
 
 gpointer
diff --git a/jni/src/jawimpl.c b/jni/src/jawimpl.c
index 2cc8ed6..5ca98c8 100644
--- a/jni/src/jawimpl.c
+++ b/jni/src/jawimpl.c
@@ -42,6 +42,8 @@ static gpointer jaw_impl_get_interface_data(JawObject *jaw_obj, guint iface);
 /* AtkObject */
 static void jaw_impl_initialize(AtkObject *atk_obj, gpointer data);
 static AtkObject* jaw_impl_get_parent(AtkObject *atk_obj);
+static AtkObject* jaw_impl_ref_child (AtkObject *atk_obj, gint i);
+static AtkRelationSet* jaw_impl_ref_relation_set(AtkObject *atk_obj);
 
 extern void jaw_action_interface_init(AtkActionIface*);
 extern gpointer jaw_action_data_init(jobject);
@@ -79,14 +81,6 @@ extern void jaw_table_interface_init (AtkTableIface*);
 extern gpointer jaw_table_data_init (jobject);
 extern void jaw_table_data_finalize (gpointer);
 
-extern void jaw_table_cell_interface_init (AtkTableCellIface*);
-extern gpointer jaw_table_cell_data_init (jobject);
-extern void jaw_table_cell_data_finalize (gpointer);
-
-extern void jaw_window_interface_init (AtkWindowIface*);
-extern gpointer jaw_window_data_init (jobject);
-extern void jaw_window_data_finalize (gpointer);
-
 typedef struct _JawInterfaceInfo {
   void (*finalize) (gpointer);
   gpointer data;
@@ -240,26 +234,6 @@ aggregate_interface(JNIEnv *jniEnv, JawObject *jaw_obj, guint tflag)
                         (gpointer)INTERFACE_TABLE,
                         (gpointer)info);
   }
-
-  if (tflag & INTERFACE_TABLE_CELL)
-  {
-    JawInterfaceInfo *info = g_new(JawInterfaceInfo, 1);
-    info->data = jaw_table_cell_data_init(ac);
-    info->finalize = jaw_table_cell_data_finalize;
-    g_hash_table_insert(jaw_impl->ifaceTable,
-                        (gpointer)INTERFACE_TABLE_CELL,
-                        (gpointer)info);
-  }
-
-  if (tflag & INTERFACE_WINDOW)
-  {
-    JawInterfaceInfo *info = g_new(JawInterfaceInfo, 1);
-    info->data = jaw_window_data_init(ac);
-    info->finalize = jaw_window_data_finalize;
-    g_hash_table_insert(jaw_impl->ifaceTable,
-                        (gpointer)INTERFACE_WINDOW,
-                        (gpointer)info);
-  }
 }
 
 JawImpl*
@@ -410,20 +384,6 @@ jaw_impl_get_type (guint tflag)
     NULL
   };
 
-  static const GInterfaceInfo atk_table_cell_info =
-  {
-    (GInterfaceInitFunc) jaw_table_cell_interface_init,
-    (GInterfaceFinalizeFunc) NULL,
-    NULL
-  };
-
-  static const GInterfaceInfo atk_window_info =
-  {
-    (GInterfaceInitFunc) jaw_window_interface_init,
-    (GInterfaceFinalizeFunc) NULL,
-    NULL
-  };
-
   if (typeTable == NULL) {
     typeTable = g_hash_table_new( NULL, NULL );
   }
@@ -475,12 +435,6 @@ jaw_impl_get_type (guint tflag)
     if (tflag & INTERFACE_TABLE)
       g_type_add_interface_static (type, ATK_TYPE_TABLE, &atk_table_info);
 
-    if (tflag & INTERFACE_TABLE_CELL)
-      g_type_add_interface_static (type, ATK_TYPE_TABLE_CELL, &atk_table_cell_info);
-
-    if (tflag & INTERFACE_WINDOW)
-      g_type_add_interface_static (type, ATK_TYPE_WINDOW, &atk_window_info);
-
     g_hash_table_insert(typeTable, GINT_TO_POINTER(tflag), GTYPE_TO_POINTER(type));
   }
 
@@ -497,6 +451,8 @@ jaw_impl_class_init(JawImplClass *klass)
   AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
   atk_class->initialize = jaw_impl_initialize;
   atk_class->get_parent = jaw_impl_get_parent;
+  atk_class->ref_child = jaw_impl_ref_child;
+  atk_class->ref_relation_set = jaw_impl_ref_relation_set;
 
   JawObjectClass *jaw_class = JAW_OBJECT_CLASS (klass);
   jaw_class->get_interface_data = jaw_impl_get_interface_data;
@@ -621,9 +577,43 @@ jaw_impl_get_parent (AtkObject *atk_obj)
        return obj;
     }
   }
+
   return ATK_OBJECT(atk_get_root());
 }
 
+static AtkObject*
+jaw_impl_ref_child (AtkObject *atk_obj, gint i)
+{
+  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,
+                                          "getAccessibleChild",
+                                          "(I)Ljavax/accessibility/Accessible;" );
+  jobject jchild = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid, i );
+  if (jchild == NULL)
+  {
+    return NULL;
+  }
+
+  jclass classAccessible = (*jniEnv)->FindClass( jniEnv, "javax/accessibility/Accessible" );
+  jmid = (*jniEnv)->GetMethodID(jniEnv,
+                                classAccessible,
+                                "getAccessibleContext",
+                                "()Ljavax/accessibility/AccessibleContext;" );
+  jobject child_ac = (*jniEnv)->CallObjectMethod( jniEnv, jchild, jmid );
+
+  AtkObject *obj = (AtkObject*) jaw_impl_get_instance( jniEnv, child_ac );
+  if (G_OBJECT(obj) != NULL)
+    g_object_ref(G_OBJECT(obj));
+
+  return obj;
+}
+
 static jstring
 get_java_relation_key_constant (JNIEnv *jniEnv, const gchar* strKey)
 {
@@ -709,10 +699,83 @@ get_atk_relation_type_from_java_key (JNIEnv *jniEnv, jstring jrel_key)
   return ATK_RELATION_NULL;
 }
 
-AtkRelationType
-jaw_impl_get_atk_relation_type_from_java_key (JNIEnv *jniEnv, jstring jrel_key)
+static AtkRelationSet*
+jaw_impl_ref_relation_set (AtkObject *atk_obj)
 {
-  return get_atk_relation_type_from_java_key (jniEnv, jrel_key);
+  if (atk_obj->relation_set)
+    g_object_unref(G_OBJECT(atk_obj->relation_set));
+  atk_obj->relation_set = atk_relation_set_new();
+  if(atk_obj == NULL)
+    return NULL;
+
+  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,
+                                          "getAccessibleRelationSet",
+                                          "()Ljavax/accessibility/AccessibleRelationSet;" );
+  jobject jrel_set = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
+
+  jclass classAccessibleRelationSet = (*jniEnv)->FindClass( jniEnv,
+                                                           "javax/accessibility/AccessibleRelationSet");
+  jmid = (*jniEnv)->GetMethodID(jniEnv,
+                                classAccessibleRelationSet,
+                                "toArray",
+                                "()[Ljavax/accessibility/AccessibleRelation;");
+  jobjectArray jrel_arr = (*jniEnv)->CallObjectMethod(jniEnv, jrel_set, jmid);
+  jsize jarr_size = (*jniEnv)->GetArrayLength(jniEnv, jrel_arr);
+
+  jsize i;
+  for (i = 0; i < jarr_size; i++)
+  {
+    jobject jrel = (*jniEnv)->GetObjectArrayElement(jniEnv, jrel_arr, i);
+    jclass classAccessibleRelation = (*jniEnv)->FindClass(jniEnv,
+                                                          "javax/accessibility/AccessibleRelation");
+    jmid = (*jniEnv)->GetMethodID(jniEnv,
+                                  classAccessibleRelation,
+                                  "getKey",
+                                  "()Ljava/lang/String;");
+    jstring jrel_key = (*jniEnv)->CallObjectMethod( jniEnv, jrel, jmid );
+    AtkRelationType rel_type = get_atk_relation_type_from_java_key(jniEnv, jrel_key);
+
+    jmid = (*jniEnv)->GetMethodID(jniEnv,
+                                  classAccessibleRelation,
+                                  "getTarget",
+                                  "()[Ljava/lang/Object;");
+    jobjectArray jtarget_arr = (*jniEnv)->CallObjectMethod(jniEnv, jrel, jmid);
+    jsize jtarget_size = (*jniEnv)->GetArrayLength(jniEnv, jtarget_arr);
+
+    jsize j;
+    for (j = 0; j < jtarget_size; j++)
+    {
+      jobject jtarget = (*jniEnv)->GetObjectArrayElement(jniEnv, jtarget_arr, j);
+      jclass classAccessible = (*jniEnv)->FindClass( jniEnv,
+                                                    "javax/accessibility/Accessible");
+      if ((*jniEnv)->IsInstanceOf(jniEnv, jtarget, classAccessible))
+      {
+        jmid = (*jniEnv)->GetMethodID(jniEnv,
+                                      classAccessible,
+                                      "getAccessibleContext",
+                                      "()Ljavax/accessibility/AccessibleContext;");
+        jobject target_ac = (*jniEnv)->CallObjectMethod(jniEnv, jtarget, jmid);
+
+        JawImpl *target_obj = jaw_impl_get_instance(jniEnv, target_ac);
+        if(target_obj == NULL)
+          return NULL;
+        atk_object_add_relationship(atk_obj, rel_type, (AtkObject*) target_obj);
+      }
+    }
+  }
+  if(atk_obj->relation_set == NULL)
+    return NULL;
+  if (G_OBJECT(atk_obj->relation_set) != NULL)
+    g_object_ref (atk_obj->relation_set);
+
+  return atk_obj->relation_set;
 }
 
 #ifdef __cplusplus
diff --git a/jni/src/jawimpl.h b/jni/src/jawimpl.h
index 38e457b..be88935 100644
--- a/jni/src/jawimpl.h
+++ b/jni/src/jawimpl.h
@@ -58,8 +58,6 @@ struct _JawImplClass
        JawObjectClass parent_class;
 };
 
-AtkRelationType jaw_impl_get_atk_relation_type_from_java_key (JNIEnv *jniEnv, jstring jrel_key);
-
 G_END_DECLS
 
 #endif
diff --git a/jni/src/jawobject.c b/jni/src/jawobject.c
index 4db2803..1e97fdc 100644
--- a/jni/src/jawobject.c
+++ b/jni/src/jawobject.c
@@ -22,11 +22,12 @@
 #include <glib.h>
 #include "jawobject.h"
 #include "jawutil.h"
-#include "jawimpl.h"
 #include "jawtoplevel.h"
 
 static void jaw_object_class_init(JawObjectClass *klass);
 static void jaw_object_init(JawObject *object);
+static void jaw_object_dispose(GObject *gobject);
+static void jaw_object_finalize(GObject *gobject);
 
 /* AtkObject */
 static const gchar* jaw_object_get_name(AtkObject *atk_obj);
@@ -38,23 +39,33 @@ static gint jaw_object_get_index_in_parent(AtkObject *atk_obj);
 
 static AtkRole jaw_object_get_role(AtkObject *atk_obj);
 static AtkStateSet* jaw_object_ref_state_set(AtkObject *atk_obj);
-static void jaw_object_initialize(AtkObject *jaw_obj, gpointer data);
-static AtkObject* jaw_object_get_parent(AtkObject *obj);
-static AtkObject * jaw_object_ref_child (AtkObject *atk_obj, gint i);
-static AtkRelationSet* jaw_object_ref_relation_set(AtkObject *atk_obj);
-static void jaw_object_set_name (AtkObject *atk_obj, const gchar *name);
-static void jaw_object_set_description (AtkObject *atk_obj, const gchar *description);
-static void jaw_object_set_parent(AtkObject *atk_obj, AtkObject *parent);
-static void jaw_object_set_role (AtkObject *atk_obj, AtkRole role);
-static const gchar *jaw_object_get_object_locale (AtkObject *atk_obj);
 
 static gpointer parent_class = NULL;
 
+enum {
+  ACTIVATE,
+  CREATE,
+  DEACTIVATE,
+  DESTROY,
+  MAXIMIZE,
+  MINIMIZE,
+  MOVE,
+  RESIZE,
+  RESTORE,
+  TOTAL_SIGNAL
+};
+
+static guint jaw_window_signals[TOTAL_SIGNAL] = { 0, };
+
 G_DEFINE_TYPE (JawObject, jaw_object, ATK_TYPE_OBJECT);
 
 static void
 jaw_object_class_init (JawObjectClass *klass)
 {
+  GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+  gobject_class->dispose = jaw_object_dispose;
+  gobject_class->finalize = jaw_object_finalize;
+
   AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
   parent_class = g_type_class_peek_parent (klass);
 
@@ -63,19 +74,98 @@ jaw_object_class_init (JawObjectClass *klass)
   atk_class->get_n_children = jaw_object_get_n_children;
   atk_class->get_index_in_parent = jaw_object_get_index_in_parent;
   atk_class->get_role = jaw_object_get_role;
-  atk_class->get_parent = jaw_object_get_parent;
+  atk_class->get_layer = NULL;
+  atk_class->get_mdi_zorder = NULL;
   atk_class->ref_state_set = jaw_object_ref_state_set;
-  atk_class->initialize = jaw_object_initialize;
-  atk_class->ref_child = jaw_object_ref_child;
-  atk_class->ref_relation_set = jaw_object_ref_relation_set;
-  atk_class->set_name = jaw_object_set_name;
-  atk_class->set_description = jaw_object_set_description;
-  atk_class->set_parent = jaw_object_set_parent;
-  atk_class->set_role = jaw_object_set_role;
-  atk_class->get_object_locale = jaw_object_get_object_locale;
-
+/*     atk_class->set_name = jaw_object_set_name;
+       atk_class->set_description = jaw_object_set_description;
+       atk_class->set_parent = jaw_object_set_parent;
+       atk_class->set_role = jaw_object_set_role;
+       atk_class->connect_property_change_handler = jaw_object_connect_property_change_handler;
+       atk_class->remove_property_change_handler = jaw_object_remove_property_change_handler;
+       atk_class->children_changed = jaw_object_children_changed;
+       atk_class->focus_event = jaw_object_focus_event;
+       atk_class->property_change = jaw_object_property_change;
+       atk_class->state_change = jaw_object_state_change;
+       atk_class->visible_data_changed = jaw_object_visible_data_changed;
+       atk_class->active_descendant_changed = jaw_object_active_descendant_changed;
+       atk_class->get_attributes = jaw_object_get_attributes;
+*/
   klass->get_interface_data = NULL;
-}
+
+  jaw_window_signals [ACTIVATE] = g_signal_new ("activate",
+                                                G_TYPE_FROM_CLASS (klass),
+                                                G_SIGNAL_RUN_LAST,
+                                                0, /* default signal handler */
+                                                NULL,
+                                                NULL,
+                                                g_cclosure_marshal_VOID__VOID,
+                                                G_TYPE_NONE,
+                                                0);
+  jaw_window_signals [CREATE] = g_signal_new ("create",
+                                              G_TYPE_FROM_CLASS (klass),
+                                              G_SIGNAL_RUN_LAST,
+                                              0, /* default signal handler */
+                                              NULL, NULL,
+                                              g_cclosure_marshal_VOID__VOID,
+                                              G_TYPE_NONE,
+                                              0);
+  jaw_window_signals [DEACTIVATE] = g_signal_new ("deactivate",
+                                                  G_TYPE_FROM_CLASS (klass),
+                                                  G_SIGNAL_RUN_LAST,
+                                                  0, /* default signal handler */
+                                                  NULL, NULL,
+                                                  g_cclosure_marshal_VOID__VOID,
+                                                  G_TYPE_NONE, 0);
+  jaw_window_signals [DESTROY] = g_signal_new ("destroy",
+                                                G_TYPE_FROM_CLASS (klass),
+                                                G_SIGNAL_RUN_LAST,
+                                                0, /* default signal handler */
+                                                NULL,
+                                                NULL,
+                                                g_cclosure_marshal_VOID__VOID,
+                                                G_TYPE_NONE,
+                                                0);
+  jaw_window_signals [MAXIMIZE] = g_signal_new ("maximize",
+                                                G_TYPE_FROM_CLASS (klass),
+                                                G_SIGNAL_RUN_LAST,
+                                                0, /* default signal handler */
+                                                NULL, NULL,
+                                                g_cclosure_marshal_VOID__VOID,
+                                                G_TYPE_NONE, 0);
+  jaw_window_signals [MINIMIZE] = g_signal_new ("minimize",
+                                                G_TYPE_FROM_CLASS (klass),
+                                                G_SIGNAL_RUN_LAST,
+                                                0, /* default signal handler */
+                                                NULL, NULL,
+                                                g_cclosure_marshal_VOID__VOID,
+                                                G_TYPE_NONE, 0);
+  jaw_window_signals [MOVE] = g_signal_new ("move",
+                                            G_TYPE_FROM_CLASS (klass),
+                                            G_SIGNAL_RUN_LAST,
+                                            0, /* default signal handler */
+                                            NULL, NULL,
+                                            g_cclosure_marshal_VOID__VOID,
+                                            G_TYPE_NONE, 0);
+  jaw_window_signals [RESIZE] = g_signal_new ("resize",
+                                              G_TYPE_FROM_CLASS (klass),
+                                              G_SIGNAL_RUN_LAST,
+                                              0, /* default signal handler */
+                                              NULL,
+                                              NULL,
+                                              g_cclosure_marshal_VOID__VOID,
+                                              G_TYPE_NONE,
+                                              0);
+  jaw_window_signals [RESTORE] = g_signal_new ("restore",
+                                                G_TYPE_FROM_CLASS (klass),
+                                                G_SIGNAL_RUN_LAST,
+                                                0, /* default signal handler */
+                                                NULL,
+                                                NULL,
+                                                g_cclosure_marshal_VOID__VOID,
+                                                G_TYPE_NONE,
+                                                0);
+  }
 
 gpointer
 jaw_object_get_interface_data (JawObject *jaw_obj, guint iface)
@@ -97,50 +187,47 @@ jaw_object_init (JawObject *object)
 }
 
 static void
-jaw_object_initialize(AtkObject *atk_obj, gpointer data)
+jaw_object_dispose (GObject *gobject)
 {
- ATK_OBJECT_CLASS (jaw_object_parent_class)->initialize(atk_obj, data);
+  /* Customized dispose code */
+
+  /* Chain up to parent's dispose method */
+  G_OBJECT_CLASS(jaw_object_parent_class)->dispose(gobject);
 }
 
-static AtkObject* jaw_object_get_parent(AtkObject *atk_obj)
+static void
+jaw_object_finalize (GObject *gobject)
 {
-  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
-  jobject ac = jaw_obj->acc_context;
+  /* Customized finalize code */
+  JawObject *jaw_obj = JAW_OBJECT(gobject);
+  AtkObject *atk_obj = ATK_OBJECT(gobject);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
 
-  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
-                                                       "javax/accessibility/AccessibleContext" );
-  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                          classAccessibleContext,
-                                          "getAccessibleParent",
-                                          "()Ljavax/accessibility/AccessibleContext;");
-  jobject jparent = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
-
-  return ATK_OBJECT(jparent);
-}
+  if (atk_obj->name != NULL)
+  {
+    (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrName, atk_obj->name);
+    (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrName);
+    jaw_obj->jstrName = NULL;
+    atk_obj->name = NULL;
+  }
 
-AtkObject* jaw_object_peek_parent(AtkObject *atk_obj)
-{
-  AtkObject *atk_parent = jaw_object_get_parent(atk_obj);
-  if (atk_parent != NULL)
-    return atk_parent;
-  return NULL;
-}
+  if (atk_obj->description != NULL)
+  {
+    (*jniEnv)->ReleaseStringUTFChars(jniEnv,
+                                     jaw_obj->jstrDescription,
+                                     atk_obj->description);
 
-static void
-jaw_object_set_parent(AtkObject *atk_obj, AtkObject *parent)
-{
-  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
-  jobject ac = jaw_obj->acc_context;
-  JNIEnv *jniEnv = jaw_util_get_jni_env();
+    (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrDescription);
+    jaw_obj->jstrDescription = NULL;
+    atk_obj->description = NULL;
+  }
 
-  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
-                                                       "javax/accessibility/AccessibleContext" );
-  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                          classAccessibleContext,
-                                          "setAccessibleParent",
-                                          "(Ljavax/accessibility/AccessibleContext;)");
-  jobject jparent = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
+  if (G_OBJECT(jaw_obj->state_set) != NULL)
+  {
+    g_object_unref(G_OBJECT(jaw_obj->state_set));
+    /* Chain up to parent's finalize method */
+    G_OBJECT_CLASS(jaw_object_parent_class)->finalize(gobject);
+  }
 }
 
 static const gchar*
@@ -191,42 +278,6 @@ jaw_object_get_name (AtkObject *atk_obj)
   return atk_obj->name;
 }
 
-static void jaw_object_set_name (AtkObject *atk_obj, const gchar *name)
-{
-  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
-  jobject ac = jaw_obj->acc_context;
-  JNIEnv *jniEnv = jaw_util_get_jni_env();
-
-  atk_obj->name = (gchar *)ATK_OBJECT_CLASS (parent_class)->get_name (atk_obj);
-
-  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
-                                                       "javax/accessibility/AccessibleContext" );
-  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                          classAccessibleContext,
-                                          "setAccessibleName",
-                                          "(Ljava/lang/String;)");
-  jstring jstr = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
-
-  if (atk_obj->name != NULL)
-  {
-    (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrName, atk_obj->name);
-    (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrName);
-  }
-
-  if (jstr != NULL)
-  {
-    jaw_obj->jstrName = (*jniEnv)->NewGlobalRef(jniEnv, jstr);
-    atk_obj->name = (gchar*)(*jniEnv)->GetStringUTFChars(jniEnv,
-                                                         jaw_obj->jstrName,
-                                                         NULL);
-  }
-  if (jstr == NULL)
-  {
-    name = "";
-    return;
-  }
-}
-
 static const gchar*
 jaw_object_get_description (AtkObject *atk_obj)
 {
@@ -260,39 +311,6 @@ jaw_object_get_description (AtkObject *atk_obj)
   return atk_obj->description;
 }
 
-static void jaw_object_set_description (AtkObject *atk_obj, const gchar *description)
-{
-  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,
-                                          "setAccessibleDescription",
-                                          "(Ljava/lang/String;)");
-  jstring jstr = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
-
-  if (description != NULL)
-  {
-    (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrDescription, description);
-    (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrDescription);
-    description = NULL;
-  }
-
-  if (jstr != NULL)
-  {
-    jaw_obj->jstrDescription = (*jniEnv)->NewGlobalRef(jniEnv, jstr);
-    description = (gchar*)(*jniEnv)->GetStringUTFChars(jniEnv,
-                                                       jaw_obj->jstrDescription,
-                                                       NULL);
-  }
-  if (jstr != NULL)
-  {
-    description = "";
-  }
-}
 static gint
 jaw_object_get_n_children (AtkObject *atk_obj)
 {
@@ -342,48 +360,6 @@ jaw_object_get_role (AtkObject *atk_obj)
   return atk_obj->role;
 }
 
-static void
-jaw_object_set_role (AtkObject *atk_obj, AtkRole role)
-{
-  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
-  atk_obj->role = role;
-  if (atk_obj != NULL && role)
-    atk_object_set_role(atk_obj, atk_obj->role);
-}
-
-static AtkObject*
-jaw_object_ref_child (AtkObject *atk_obj, gint i)
-{
-  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,
-                                          "getAccessibleChild",
-                                          "(I)Ljavax/accessibility/Accessible;" );
-  jobject jchild = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid, i );
-  if (jchild == NULL)
-  {
-    return NULL;
-  }
-
-  jclass classAccessible = (*jniEnv)->FindClass( jniEnv, "javax/accessibility/Accessible" );
-  jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                classAccessible,
-                                "getAccessibleContext",
-                                "()Ljavax/accessibility/AccessibleContext;" );
-  jobject child_ac = (*jniEnv)->CallObjectMethod( jniEnv, jchild, jmid );
-
-  AtkObject *obj = (AtkObject*) jaw_impl_get_instance( jniEnv, child_ac );
-  if (G_OBJECT(obj) != NULL)
-    g_object_ref(G_OBJECT(obj));
-
-  return obj;
-}
-
 static AtkStateSet*
 jaw_object_ref_state_set (AtkObject *atk_obj)
 {
@@ -429,102 +405,3 @@ jaw_object_ref_state_set (AtkObject *atk_obj)
   return state_set;
 }
 
-static AtkRelationSet*
-jaw_object_ref_relation_set (AtkObject *atk_obj)
-{
-  if (atk_obj->relation_set)
-    g_object_unref(G_OBJECT(atk_obj->relation_set));
-  atk_obj->relation_set = atk_relation_set_new();
-  if(atk_obj == NULL)
-    return NULL;
-
-  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,
-                                          "getAccessibleRelationSet",
-                                          "()Ljavax/accessibility/AccessibleRelationSet;" );
-  jobject jrel_set = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
-
-  jclass classAccessibleRelationSet = (*jniEnv)->FindClass( jniEnv,
-                                                           "javax/accessibility/AccessibleRelationSet");
-  jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                classAccessibleRelationSet,
-                                "toArray",
-                                "()[Ljavax/accessibility/AccessibleRelation;");
-  jobjectArray jrel_arr = (*jniEnv)->CallObjectMethod(jniEnv, jrel_set, jmid);
-  jsize jarr_size = (*jniEnv)->GetArrayLength(jniEnv, jrel_arr);
-
-  jsize i;
-  for (i = 0; i < jarr_size; i++)
-  {
-    jobject jrel = (*jniEnv)->GetObjectArrayElement(jniEnv, jrel_arr, i);
-    jclass classAccessibleRelation = (*jniEnv)->FindClass(jniEnv,
-                                                          "javax/accessibility/AccessibleRelation");
-    jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                  classAccessibleRelation,
-                                  "getKey",
-                                  "()Ljava/lang/String;");
-    jstring jrel_key = (*jniEnv)->CallObjectMethod( jniEnv, jrel, jmid );
-    AtkRelationType rel_type = jaw_impl_get_atk_relation_type_from_java_key(jniEnv, jrel_key);
-
-    jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                  classAccessibleRelation,
-                                  "getTarget",
-                                  "()[Ljava/lang/Object;");
-    jobjectArray jtarget_arr = (*jniEnv)->CallObjectMethod(jniEnv, jrel, jmid);
-    jsize jtarget_size = (*jniEnv)->GetArrayLength(jniEnv, jtarget_arr);
-
-    jsize j;
-    for (j = 0; j < jtarget_size; j++)
-    {
-      jobject jtarget = (*jniEnv)->GetObjectArrayElement(jniEnv, jtarget_arr, j);
-      jclass classAccessible = (*jniEnv)->FindClass( jniEnv,
-                                                    "javax/accessibility/Accessible");
-      if ((*jniEnv)->IsInstanceOf(jniEnv, jtarget, classAccessible))
-      {
-        jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                      classAccessible,
-                                      "getAccessibleContext",
-                                      "()Ljavax/accessibility/AccessibleContext;");
-        jobject target_ac = (*jniEnv)->CallObjectMethod(jniEnv, jtarget, jmid);
-
-        JawImpl *target_obj = jaw_impl_get_instance(jniEnv, target_ac);
-        if(target_obj == NULL)
-          return NULL;
-        atk_object_add_relationship(atk_obj, rel_type, (AtkObject*) target_obj);
-      }
-    }
-  }
-  if(atk_obj->relation_set == NULL)
-    return NULL;
-  if (G_OBJECT(atk_obj->relation_set) != NULL)
-    g_object_ref (atk_obj->relation_set);
-
-  return atk_obj->relation_set;
-}
-
-static const gchar *jaw_object_get_object_locale (AtkObject *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,
-                                          "getLocale",
-                                          "()Ljavax/accessibility/AccessibleContext;");
-  jobject locale = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
-  JawImpl *target_obj = jaw_impl_get_instance(jniEnv, locale);
-  if(target_obj == NULL)
-    return NULL;
-
-  return atk_object_get_object_locale((AtkObject*) target_obj);
-}
-
diff --git a/jni/src/jawobject.h b/jni/src/jawobject.h
index 1a05dba..0709f79 100644
--- a/jni/src/jawobject.h
+++ b/jni/src/jawobject.h
@@ -21,6 +21,7 @@
 #define _JAW_OBJECT_H_
 
 #include <atk/atk.h>
+#include <atk-bridge.h>
 #include <jni.h>
 
 G_BEGIN_DECLS
@@ -38,10 +39,12 @@ typedef struct _JawObjectClass              JawObjectClass;
 struct _JawObject
 {
        AtkObject parent;
+       
        jobject acc_context;
        jstring jstrName;
        jstring jstrDescription;
        AtkStateSet *state_set;
+
        GHashTable *storedData;
 };
 
@@ -55,7 +58,6 @@ struct _JawObjectClass
 };
 
 gpointer jaw_object_get_interface_data (JawObject*, guint);
-AtkObject *jaw_object_peek_parent(AtkObject *atk_obj);
 
 G_END_DECLS
 
diff --git a/jni/src/jawtable.c b/jni/src/jawtable.c
index a44d027..6f070bb 100644
--- a/jni/src/jawtable.c
+++ b/jni/src/jawtable.c
@@ -65,10 +65,6 @@ static gboolean                      jaw_table_is_row_selected               (AtkTable     
  *table,
 static gboolean                        jaw_table_is_selected                   (AtkTable       *table,
                                                                         gint           row,
                                                                         gint           column);
-static gboolean jaw_table_add_row_selection(AtkTable  *table,
-                                            gint       row);
-static gboolean jaw_table_add_column_selection(AtkTable  *table,
-                                               gint      column);
 
 typedef struct _TableData {
        jobject atk_table;
@@ -98,8 +94,6 @@ jaw_table_interface_init (AtkTableIface *iface)
        iface->is_column_selected = jaw_table_is_column_selected;
        iface->is_row_selected = jaw_table_is_row_selected;
        iface->is_selected = jaw_table_is_selected;
-  iface->add_row_selection= jaw_table_add_row_selection;
-  iface->add_column_selection= jaw_table_add_column_selection;
 }
 
 gpointer
@@ -153,8 +147,7 @@ jaw_table_ref_at (AtkTable *table, gint     row, gint column)
 
        JawImpl* jaw_impl = jaw_impl_get_instance( jniEnv, jac );
 
-  if (G_OBJECT(jaw_impl) != NULL)
-    g_object_ref(G_OBJECT(jaw_impl));
+       g_object_ref( G_OBJECT(jaw_impl) );
 
        return ATK_OBJECT(jaw_impl);
 }
@@ -511,38 +504,3 @@ jaw_table_is_selected (AtkTable *table, gint row, gint column)
        return FALSE;
 }
 
-static gboolean
-jaw_table_add_row_selection(AtkTable *table, gint row)
-{
-  JawObject *jaw_obj = JAW_OBJECT(table);
-  TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
-  jobject atk_table = data->atk_table;
-
-  JNIEnv *jniEnv = jaw_util_get_jni_env();
-  jclass classAtkTable = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkTable");
-  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkTable, "addRowSelection", "(I)Z");
-  jboolean jselected = (*jniEnv)->CallBooleanMethod(jniEnv, atk_table, jmid, (jint)row);
-
-  if (jselected == JNI_TRUE)
-    return TRUE;
-
-  return FALSE;
-}
-
-static gboolean
-jaw_table_add_column_selection(AtkTable *table, gint column)
-{
-  JawObject *jaw_obj = JAW_OBJECT(table);
-  TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
-  jobject atk_table = data->atk_table;
-
-  JNIEnv *jniEnv = jaw_util_get_jni_env();
-  jclass classAtkTable = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkTable");
-  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkTable, "addColumnSelection", "(I)Z");
-  jboolean jselected = (*jniEnv)->CallBooleanMethod(jniEnv, atk_table, jmid, (jint)column);
-
-  if (jselected == JNI_TRUE)
-    return TRUE;
-
-  return FALSE;
-}
diff --git a/jni/src/jawutil.c b/jni/src/jawutil.c
index 6ef3abe..ce2d406 100644
--- a/jni/src/jawutil.c
+++ b/jni/src/jawutil.c
@@ -27,7 +27,6 @@
 #include "jawutil.h"
 #include "jawtoplevel.h"
 #include "jawobject.h"
-#include "jawwindow.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -121,14 +120,13 @@ jaw_util_add_global_event_listener(GSignalEmissionHook listener,
 {
   guint rc = 0;
   gchar **split_string;
-  guint length;
 
-  g_type_class_unref( g_type_class_ref(JAW_TYPE_WINDOW));
+  g_type_class_unref( g_type_class_ref(JAW_TYPE_OBJECT));
   split_string = g_strsplit (event_type, ":", 3);
 
   if (split_string) {
     if (!strcmp ("window", split_string[0])) {
-      rc = add_listener (listener, "JawWindow", split_string[1], event_type);
+      rc = add_listener (listener, "JawObject", split_string[1], event_type);
     } else {
       rc = add_listener (listener, split_string[1], split_string[2], event_type);
     }
@@ -136,7 +134,6 @@ jaw_util_add_global_event_listener(GSignalEmissionHook listener,
     g_strfreev (split_string);
   }
 
-
   return rc;
 }
 
@@ -145,16 +142,16 @@ jaw_util_remove_global_event_listener (guint remove_listener)
 {
   if (remove_listener > 0) {
     JawUtilListenerInfo *listener_info;
-    guint tmp_idx = remove_listener;
+    gint tmp_idx = remove_listener;
 
-    listener_info = g_hash_table_lookup(listener_list, GUINT_TO_POINTER(tmp_idx));
+    listener_info = (JawUtilListenerInfo*)g_hash_table_lookup(listener_list, GINT_TO_POINTER(tmp_idx));
 
     if (listener_info != NULL)
     {
       if (listener_info->hook_id != 0 && listener_info->signal_id != 0)
       {
         g_signal_remove_emission_hook(listener_info->signal_id, listener_info->hook_id);
-        g_hash_table_remove(listener_list, GUINT_TO_POINTER(tmp_idx));
+        g_hash_table_remove(listener_list, GINT_TO_POINTER(tmp_idx));
       } else {
         g_warning("Invalid listener hook_id %ld or signal_id %d\n",
                   listener_info->hook_id, listener_info->signal_id);
@@ -301,7 +298,7 @@ add_listener(GSignalEmissionHook listener,
                                                           (GDestroyNotify) g_free);
       listener_info->signal_id = signal_id;
 
-      g_hash_table_insert(listener_list, GINT_TO_POINTER(listener_info->key), listener_info);
+      g_hash_table_insert(listener_list, &(listener_info->key), listener_info);
       listener_idx++;
     } else {
       g_warning("Invalid signal type %s\n", signal);
@@ -418,16 +415,6 @@ jaw_util_get_tflag_from_jobj(JNIEnv *jniEnv, jobject jObj)
 
   jmid = (*jniEnv)->GetMethodID(jniEnv,
                                 classAccessibleContext,
-                                "getAccessibleTable",
-                                "()Ljavax/accessibility/AccessibleTableModelChange;");
-  iface = (*jniEnv)->CallObjectMethod(jniEnv, ac, jmid);
-  if (iface != NULL)
-  {
-    tflag |= INTERFACE_TABLE_CELL;
-  }
-
-  jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                classAccessibleContext,
                                 "getAccessibleValue",
                                 "()Ljavax/accessibility/AccessibleValue;");
   iface = (*jniEnv)->CallObjectMethod(jniEnv, ac, jmid);
@@ -436,16 +423,6 @@ jaw_util_get_tflag_from_jobj(JNIEnv *jniEnv, jobject jObj)
     tflag |= INTERFACE_VALUE;
   }
 
-  jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                classAccessibleContext,
-                                "getAccessibleComponent",
-                                "()Ljavax/accessibility/AccessibleComponent;");
-  iface = (*jniEnv)->CallObjectMethod(jniEnv, ac, jmid);
-  if (iface != NULL)
-  {
-    tflag |= INTERFACE_WINDOW;
-  }
-
   return tflag;
 }
 
diff --git a/jni/src/jawutil.h b/jni/src/jawutil.h
index 3095383..fceb182 100644
--- a/jni/src/jawutil.h
+++ b/jni/src/jawutil.h
@@ -25,6 +25,9 @@
 
 G_BEGIN_DECLS
 
+JavaVM *globalJvm;
+JNIEnv *globalEnv;
+
 #define INTERFACE_ACTION                  0x00000001
 #define INTERFACE_COMPONENT               0x00000002
 #define INTERFACE_DOCUMENT                0x00000004
@@ -35,10 +38,8 @@ G_BEGIN_DECLS
 #define INTERFACE_SELECTION               0x00000080
 #define INTERFACE_STREAMABLE_CONTENT      0x00000100
 #define INTERFACE_TABLE                   0x00000200
-#define INTERFACE_TABLE_CELL              0x00000400
-#define INTERFACE_TEXT                    0x00000800
-#define INTERFACE_VALUE                   0x00001000
-#define INTERFACE_WINDOW                  0x00002000
+#define INTERFACE_TEXT                    0x00000400
+#define INTERFACE_VALUE                   0x00000800
 
 #define JAW_TYPE_UTIL               (jaw_util_get_type())
 #define JAW_UTIL(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), JAW_TYPE_UTIL, JawUtil))
diff --git a/wrapper/Makefile.am b/wrapper/Makefile.am
index 5b78e8a..220f3cc 100644
--- a/wrapper/Makefile.am
+++ b/wrapper/Makefile.am
@@ -3,21 +3,13 @@ JARFILES=java-atk-wrapper.jar
 ALL_CLASSES=org/GNOME/Accessibility/*.class
 DEP_CLASSES=$(wildcard $(ALL_CLASSES))
 
-if USER
-java_atk_wrapperdir = $(JDK_SRC)/jre/lib/ext
-else
-java_atk_wrapperdir = $(HOME)/.local$(JDK_SRC)/jre/lib/ext
-endif
+java_atk_wrapperdir = $(JAVA_HOME)/lib/ext
 java_atk_wrapper_DATA = $(JARFILES)
 
-if USER
-propertiesdir = $(JDK_SRC)/jre/lib
-else
-propertiesdir = $(HOME)/.local$(JAVA_HOME)/lib
-endif
+EXTRA_DIST = $(properties_DATA)
 
+propertiesdir = $(JAVA_HOME)/lib
 properties_DATA = accessibility.properties
-EXTRA_DIST = $(properties_DATA)
 
 $(JARFILES) : $(DEP_CLASSES)
        $(JAR) cf $(JARFILES) $(ALL_CLASSES)
diff --git a/wrapper/org/GNOME/Accessibility/AtkComponent.java 
b/wrapper/org/GNOME/Accessibility/AtkComponent.java
index 9431b10..6f36340 100644
--- a/wrapper/org/GNOME/Accessibility/AtkComponent.java
+++ b/wrapper/org/GNOME/Accessibility/AtkComponent.java
@@ -1,7 +1,6 @@
 /*
  * Java ATK Wrapper for GNOME
  * Copyright (C) 2009 Sun Microsystems Inc.
- * Copyright (C) 2015 Magdalen Berns <m berns thismagpie com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -95,6 +94,7 @@ public class AtkComponent {
   }
 
   public Rectangle get_extents() {
+    System.out.println(acc_component.getBounds());
     return acc_component.getBounds();
   }
 
@@ -121,10 +121,6 @@ public class AtkComponent {
       return AtkLayer.CANVAS;
     }
 
-    if (role == AccessibleRole.WINDOW) {
-      return AtkLayer.WINDOW;
-    }
-
     return AtkLayer.WIDGET;
   }
 }
diff --git a/wrapper/org/GNOME/Accessibility/AtkTable.java b/wrapper/org/GNOME/Accessibility/AtkTable.java
index 285f95c..20f773f 100644
--- a/wrapper/org/GNOME/Accessibility/AtkTable.java
+++ b/wrapper/org/GNOME/Accessibility/AtkTable.java
@@ -26,11 +26,10 @@ public class AtkTable {
        AccessibleContext ac;
        AccessibleTable acc_table;
 
-  public AtkTable (AccessibleContext ac) {
-    super();
-    this.ac = ac;
-    this.acc_table = ac.getAccessibleTable();
-  }
+       public AtkTable (AccessibleContext ac) {
+               super();
+               this.acc_table = ac.getAccessibleTable();
+       }
 
        public AccessibleContext ref_at (int row, int column) {
                javax.accessibility.Accessible accessible = acc_table.getAccessibleAt(row, column);
@@ -179,13 +178,13 @@ public class AtkTable {
                return acc_table.isAccessibleSelected(row, column);
        }
 
-  public boolean addColumnSelection (int column) {
-    return is_column_selected(column);
-  }
+       public boolean add_column_selection (int column) {
+               return false;
+       }
 
-  public boolean addRowSelection (int row) {
-    return is_row_selected(row);
-  }
+       public boolean add_row_selection (int row) {
+               return false;
+       }
 
        public boolean remove_column_selection (int column) {
                return false;
diff --git a/wrapper/org/GNOME/Accessibility/AtkWrapper.java.in 
b/wrapper/org/GNOME/Accessibility/AtkWrapper.java.in
index 565fac1..34cbc7c 100644
--- a/wrapper/org/GNOME/Accessibility/AtkWrapper.java.in
+++ b/wrapper/org/GNOME/Accessibility/AtkWrapper.java.in
@@ -449,6 +449,7 @@ public class AtkWrapper {
         } else if( propertyName.equals(AccessibleContext.ACCESSIBLE_SELECTION_PROPERTY) ) {
           boolean isTextEvent = false;
           AccessibleRole role = ac.getAccessibleRole();
+          System.out.println(role);
           if ((role == AccessibleRole.TEXT) ||
               role.toDisplayString(java.util.Locale.US).equalsIgnoreCase("paragraph")) {
             isTextEvent = true;
@@ -468,7 +469,7 @@ public class AtkWrapper {
           }
 
         } else if( propertyName.equals(AccessibleContext.ACCESSIBLE_VISIBLE_DATA_PROPERTY) ) {
-          emitSignal(ac, AtkSignal.OBJECT_VISIBLE_DATA_CHANGED, null);
+          //emitSignal(ac, AtkSignal.OBJECT_VISIBLE_DATA_CHANGED, null);
 
         }else if( propertyName.equals(AccessibleContext.ACCESSIBLE_ACTION_PROPERTY) ) {
           Object[] args = new Object[2];


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