Blame jni/src/jawobject.c

Packit Service 31d16d
/*
Packit Service 31d16d
 * Java ATK Wrapper for GNOME
Packit Service 31d16d
 * Copyright (C) 2009 Sun Microsystems Inc.
Packit Service 31d16d
 * Copyright (C) 2015 Magdalen Berns <m.berns@thismagpie.com>
Packit Service 31d16d
 *
Packit Service 31d16d
 * This library is free software; you can redistribute it and/or
Packit Service 31d16d
 * modify it under the terms of the GNU Lesser General Public
Packit Service 31d16d
 * License as published by the Free Software Foundation; either
Packit Service 31d16d
 * version 2.1 of the License, or (at your option) any later version.
Packit Service 31d16d
 *
Packit Service 31d16d
 * This library is distributed in the hope that it will be useful,
Packit Service 31d16d
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 31d16d
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 31d16d
 * Lesser General Public License for more details.
Packit Service 31d16d
 *
Packit Service 31d16d
 * You should have received a copy of the GNU Lesser General Public
Packit Service 31d16d
 * License along with this library; if not, write to the Free Software
Packit Service 31d16d
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit Service 31d16d
 */
Packit Service 31d16d
Packit Service 31d16d
#include <atk/atk.h>
Packit Service 31d16d
#include <glib.h>
Packit Service 31d16d
#include "jawobject.h"
Packit Service 31d16d
#include "jawutil.h"
Packit Service 31d16d
#include "jawimpl.h"
Packit Service 31d16d
#include "jawtoplevel.h"
Packit Service 31d16d
Packit Service 31d16d
#ifdef __cplusplus
Packit Service 31d16d
extern "C" {
Packit Service 31d16d
#endif
Packit Service 31d16d
Packit Service 31d16d
static void jaw_object_class_init(JawObjectClass *klass);
Packit Service 31d16d
static void jaw_object_init(JawObject *object);
Packit Service 31d16d
static void jaw_object_initialize(AtkObject *jaw_obj, gpointer data);
Packit Service 31d16d
static void jaw_object_dispose(GObject *gobject);
Packit Service 31d16d
static void jaw_object_finalize(GObject *gobject);
Packit Service 31d16d
Packit Service 31d16d
/* AtkObject */
Packit Service 31d16d
static const gchar* jaw_object_get_name(AtkObject *atk_obj);
Packit Service 31d16d
static const gchar* jaw_object_get_description(AtkObject *atk_obj);
Packit Service 31d16d
Packit Service 31d16d
static gint jaw_object_get_n_children(AtkObject *atk_obj);
Packit Service 31d16d
Packit Service 31d16d
static gint jaw_object_get_index_in_parent(AtkObject *atk_obj);
Packit Service 31d16d
Packit Service 31d16d
static AtkRole jaw_object_get_role(AtkObject *atk_obj);
Packit Service 31d16d
static AtkStateSet* jaw_object_ref_state_set(AtkObject *atk_obj);
Packit Service 31d16d
static AtkObject* jaw_object_get_parent(AtkObject *obj);
Packit Service 31d16d
Packit Service 31d16d
static void jaw_object_set_name (AtkObject *atk_obj, const gchar *name);
Packit Service 31d16d
static void jaw_object_set_description (AtkObject *atk_obj, const gchar *description);
Packit Service 31d16d
static void jaw_object_set_parent(AtkObject *atk_obj, AtkObject *parent);
Packit Service 31d16d
static void jaw_object_set_role (AtkObject *atk_obj, AtkRole role);
Packit Service 31d16d
static const gchar *jaw_object_get_object_locale (AtkObject *atk_obj);
Packit Service 31d16d
static AtkRelationSet *jaw_object_ref_relation_set (AtkObject *atk_obj);
Packit Service 31d16d
static AtkObject *jaw_object_ref_child(AtkObject *atk_obj, gint i);
Packit Service 31d16d
Packit Service 31d16d
static gpointer parent_class = NULL;
Packit Service 31d16d
static GHashTable *object_table = NULL;
Packit Service 31d16d
static JawObject* jaw_object_table_lookup (JNIEnv *jniEnv, jobject ac);
Packit Service 31d16d
Packit Service 31d16d
enum {
Packit Service 31d16d
  ACTIVATE,
Packit Service 31d16d
  CREATE,
Packit Service 31d16d
  DEACTIVATE,
Packit Service 31d16d
  DESTROY,
Packit Service 31d16d
  MAXIMIZE,
Packit Service 31d16d
  MINIMIZE,
Packit Service 31d16d
  MOVE,
Packit Service 31d16d
  RESIZE,
Packit Service 31d16d
  RESTORE,
Packit Service 31d16d
  LAST_SIGNAL
Packit Service 31d16d
};
Packit Service 31d16d
Packit Service 31d16d
static guint jaw_window_signals[LAST_SIGNAL] = { 0, };
Packit Service 31d16d
Packit Service 31d16d
G_DEFINE_TYPE (JawObject, jaw_object, ATK_TYPE_OBJECT);
Packit Service 31d16d
Packit Service 31d16d
static guint
Packit Service 31d16d
jaw_window_add_signal (const gchar *name, JawObjectClass *klass)
Packit Service 31d16d
{
Packit Service 31d16d
  return g_signal_new (name,
Packit Service 31d16d
                       G_TYPE_FROM_CLASS(klass),
Packit Service 31d16d
                       G_SIGNAL_RUN_LAST,
Packit Service 31d16d
                       0,
Packit Service 31d16d
                       (GSignalAccumulator) NULL, NULL,
Packit Service 31d16d
                       g_cclosure_marshal_VOID__VOID,
Packit Service 31d16d
                       G_TYPE_NONE,
Packit Service 31d16d
                       0);
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static void
Packit Service 31d16d
jaw_object_class_init (JawObjectClass *klass)
Packit Service 31d16d
{
Packit Service 31d16d
  GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
Packit Service 31d16d
  gobject_class->dispose = jaw_object_dispose;
Packit Service 31d16d
  gobject_class->finalize = jaw_object_finalize;
Packit Service 31d16d
Packit Service 31d16d
  AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
Packit Service 31d16d
  parent_class = g_type_class_peek_parent (klass);
Packit Service 31d16d
Packit Service 31d16d
  atk_class->get_name = jaw_object_get_name;
Packit Service 31d16d
  atk_class->set_name = jaw_object_set_name;
Packit Service 31d16d
  atk_class->get_description = jaw_object_get_description;
Packit Service 31d16d
  atk_class->set_description = jaw_object_set_description;
Packit Service 31d16d
  atk_class->get_n_children = jaw_object_get_n_children;
Packit Service 31d16d
  atk_class->get_index_in_parent = jaw_object_get_index_in_parent;
Packit Service 31d16d
  atk_class->get_role = jaw_object_get_role;
Packit Service 31d16d
  atk_class->get_parent = jaw_object_get_parent;
Packit Service 31d16d
  atk_class->set_parent = jaw_object_set_parent;
Packit Service 31d16d
  atk_class->set_role = jaw_object_set_role;
Packit Service 31d16d
  atk_class->get_object_locale = jaw_object_get_object_locale;
Packit Service 31d16d
  atk_class->ref_relation_set = jaw_object_ref_relation_set;
Packit Service 31d16d
  atk_class->ref_child = jaw_object_ref_child;
Packit Service 31d16d
Packit Service 31d16d
  atk_class->ref_state_set = jaw_object_ref_state_set;
Packit Service 31d16d
  atk_class->initialize = jaw_object_initialize;
Packit Service 31d16d
Packit Service 31d16d
  jaw_window_signals[ACTIVATE]    = jaw_window_add_signal ("activate", klass);
Packit Service 31d16d
  jaw_window_signals[CREATE]      = jaw_window_add_signal ("create", klass);
Packit Service 31d16d
  jaw_window_signals[DEACTIVATE]  = jaw_window_add_signal ("deactivate", klass);
Packit Service 31d16d
  jaw_window_signals[DESTROY]     = jaw_window_add_signal ("destroy", klass);
Packit Service 31d16d
  jaw_window_signals[MAXIMIZE]    = jaw_window_add_signal ("maximize", klass);
Packit Service 31d16d
  jaw_window_signals[MINIMIZE]    = jaw_window_add_signal ("minimize", klass);
Packit Service 31d16d
  jaw_window_signals[MOVE]        = jaw_window_add_signal ("move", klass);
Packit Service 31d16d
  jaw_window_signals[RESIZE]      = jaw_window_add_signal ("resize", klass);
Packit Service 31d16d
  jaw_window_signals[RESTORE]     = jaw_window_add_signal ("restore", klass);
Packit Service 31d16d
Packit Service 31d16d
  klass->get_interface_data = NULL;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static void
Packit Service 31d16d
jaw_object_initialize(AtkObject *atk_obj, gpointer data)
Packit Service 31d16d
{
Packit Service 31d16d
  ATK_OBJECT_CLASS (jaw_object_parent_class)->initialize(atk_obj, data);
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
gpointer
Packit Service 31d16d
jaw_object_get_interface_data (JawObject *jaw_obj, guint iface)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObjectClass *klass = JAW_OBJECT_GET_CLASS(jaw_obj);
Packit Service 31d16d
  if (klass->get_interface_data)
Packit Service 31d16d
    return klass->get_interface_data(jaw_obj, iface);
Packit Service 31d16d
Packit Service 31d16d
  return NULL;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static void
Packit Service 31d16d
jaw_object_init (JawObject *object)
Packit Service 31d16d
{
Packit Service 31d16d
  AtkObject *atk_obj = ATK_OBJECT(object);
Packit Service 31d16d
  atk_obj->description = NULL;
Packit Service 31d16d
Packit Service 31d16d
  object->state_set = atk_state_set_new();
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static void
Packit Service 31d16d
jaw_object_dispose (GObject *gobject)
Packit Service 31d16d
{
Packit Service 31d16d
  /* Customized dispose code */
Packit Service 31d16d
Packit Service 31d16d
  /* Chain up to parent's dispose method */
Packit Service 31d16d
  G_OBJECT_CLASS(jaw_object_parent_class)->dispose(gobject);
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static void
Packit Service 31d16d
jaw_object_finalize (GObject *gobject)
Packit Service 31d16d
{
Packit Service 31d16d
  /* Customized finalize code */
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(gobject);
Packit Service 31d16d
  AtkObject *atk_obj = ATK_OBJECT(gobject);
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  if (atk_obj->name != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrName, atk_obj->name);
Packit Service 31d16d
    (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrName);
Packit Service 31d16d
    jaw_obj->jstrName = NULL;
Packit Service 31d16d
    atk_obj->name = NULL;
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  if (atk_obj->description != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    (*jniEnv)->ReleaseStringUTFChars(jniEnv,
Packit Service 31d16d
                                     jaw_obj->jstrDescription,
Packit Service 31d16d
                                     atk_obj->description);
Packit Service 31d16d
Packit Service 31d16d
    (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrDescription);
Packit Service 31d16d
    jaw_obj->jstrDescription = NULL;
Packit Service 31d16d
    atk_obj->description = NULL;
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  if (G_OBJECT(jaw_obj->state_set) != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    g_object_unref(G_OBJECT(jaw_obj->state_set));
Packit Service 31d16d
    /* Chain up to parent's finalize method */
Packit Service 31d16d
    G_OBJECT_CLASS(jaw_object_parent_class)->finalize(gobject);
Packit Service 31d16d
  }
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static AtkObject* jaw_object_get_parent(AtkObject *atk_obj)
Packit Service 31d16d
{
Packit Service 31d16d
  if (jaw_toplevel_get_child_index(JAW_TOPLEVEL(atk_get_root()), atk_obj) != -1)
Packit Service 31d16d
  {
Packit Service 31d16d
    return ATK_OBJECT(atk_get_root());
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  jobject ac = jaw_obj->acc_context;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "getAccessibleParent",
Packit Service 31d16d
                                          "()Ljavax/accessibility/AccessibleContext;");
Packit Service 31d16d
  jobject jparent = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
Packit Service 31d16d
  if (jparent != NULL )
Packit Service 31d16d
  {
Packit Service 31d16d
    jclass classAccessible = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                  "javax/accessibility/Accessible" );
Packit Service 31d16d
    jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                  classAccessible,
Packit Service 31d16d
                                  "getAccessibleContext",
Packit Service 31d16d
                                  "()Ljavax/accessibility/AccessibleContext;");
Packit Service 31d16d
    jobject parent_ac = (*jniEnv)->CallObjectMethod(jniEnv, jparent, jmid);
Packit Service 31d16d
    AtkObject *parent_obj = (AtkObject*) jaw_object_table_lookup( jniEnv, parent_ac );
Packit Service 31d16d
    if (parent_obj != NULL )
Packit Service 31d16d
       return parent_obj;
Packit Service 31d16d
  }
Packit Service 31d16d
  return ATK_OBJECT(atk_get_root());
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static void
Packit Service 31d16d
jaw_object_set_parent(AtkObject *atk_obj, AtkObject *parent)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  jobject ac = jaw_obj->acc_context;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "setAccessibleParent",
Packit Service 31d16d
                                          "(Ljavax/accessibility/AccessibleContext;)");
Packit Service 31d16d
  jobject jparent = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
Packit Service 31d16d
  if (jparent != NULL )
Packit Service 31d16d
  {
Packit Service 31d16d
    jclass classAccessible = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                  "javax/accessibility/Accessible" );
Packit Service 31d16d
    jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                  classAccessible,
Packit Service 31d16d
                                  "getAccessibleContext",
Packit Service 31d16d
                                  "()Ljavax/accessibility/AccessibleContext;");
Packit Service 31d16d
    jobject parent_ac = (*jniEnv)->CallObjectMethod(jniEnv, jparent, jmid);
Packit Service 31d16d
    AtkObject *parent_obj = (AtkObject*) jaw_object_table_lookup( jniEnv, parent_ac );
Packit Service 31d16d
    if (parent_obj == NULL)
Packit Service 31d16d
      return;
Packit Service 31d16d
  }
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static const gchar*
Packit Service 31d16d
jaw_object_get_name (AtkObject *atk_obj)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  jobject ac = jaw_obj->acc_context;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  atk_obj->name = (gchar *)ATK_OBJECT_CLASS (parent_class)->get_name (atk_obj);
Packit Service 31d16d
Packit Service 31d16d
  if (atk_object_get_role(atk_obj) == ATK_ROLE_COMBO_BOX &&
Packit Service 31d16d
      atk_object_get_n_accessible_children(atk_obj) == 1)
Packit Service 31d16d
  {
Packit Service 31d16d
    AtkSelection *selection = ATK_SELECTION(atk_obj);
Packit Service 31d16d
    if (selection != NULL)
Packit Service 31d16d
    {
Packit Service 31d16d
      AtkObject *child = atk_selection_ref_selection(selection, 0);
Packit Service 31d16d
      if (child != NULL)
Packit Service 31d16d
      {
Packit Service 31d16d
        return atk_object_get_name(child);
Packit Service 31d16d
      }
Packit Service 31d16d
    }
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "getAccessibleName",
Packit Service 31d16d
                                          "()Ljava/lang/String;");
Packit Service 31d16d
  jstring jstr = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
Packit Service 31d16d
Packit Service 31d16d
  if (atk_obj->name != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrName, atk_obj->name);
Packit Service 31d16d
    (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrName);
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  if (jstr != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    jaw_obj->jstrName = (*jniEnv)->NewGlobalRef(jniEnv, jstr);
Packit Service 31d16d
    atk_obj->name = (gchar*)(*jniEnv)->GetStringUTFChars(jniEnv,
Packit Service 31d16d
                                                         jaw_obj->jstrName,
Packit Service 31d16d
                                                         NULL);
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  return atk_obj->name;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static void jaw_object_set_name (AtkObject *atk_obj, const gchar *name)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  jobject ac = jaw_obj->acc_context;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  atk_obj->name = (gchar *)ATK_OBJECT_CLASS (parent_class)->get_name (atk_obj);
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "setAccessibleName",
Packit Service 31d16d
                                          "(Ljava/lang/String;)");
Packit Service 31d16d
  jstring jstr = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
Packit Service 31d16d
Packit Service 31d16d
  if (atk_obj->name != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrName, atk_obj->name);
Packit Service 31d16d
    (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrName);
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  if (jstr != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    jaw_obj->jstrName = (*jniEnv)->NewGlobalRef(jniEnv, jstr);
Packit Service 31d16d
    atk_obj->name = (gchar*)(*jniEnv)->GetStringUTFChars(jniEnv,
Packit Service 31d16d
                                                         jaw_obj->jstrName,
Packit Service 31d16d
                                                         NULL);
Packit Service 31d16d
  }
Packit Service 31d16d
  if (jstr == NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    name = "";
Packit Service 31d16d
    return;
Packit Service 31d16d
  }
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static const gchar*
Packit Service 31d16d
jaw_object_get_description (AtkObject *atk_obj)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  jobject ac = jaw_obj->acc_context;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass( jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "getAccessibleDescription",
Packit Service 31d16d
                                          "()Ljava/lang/String;");
Packit Service 31d16d
  jstring jstr = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
Packit Service 31d16d
Packit Service 31d16d
  if (atk_obj->description != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrDescription, atk_obj->description);
Packit Service 31d16d
    (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrDescription);
Packit Service 31d16d
    atk_obj->description = NULL;
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  if (jstr != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    jaw_obj->jstrDescription = (*jniEnv)->NewGlobalRef(jniEnv, jstr);
Packit Service 31d16d
    atk_obj->description = (gchar*)(*jniEnv)->GetStringUTFChars(jniEnv,
Packit Service 31d16d
                                                                jaw_obj->jstrDescription,
Packit Service 31d16d
                                                                NULL);
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  return atk_obj->description;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static void jaw_object_set_description (AtkObject *atk_obj, const gchar *description)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  jobject ac = jaw_obj->acc_context;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass( jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "setAccessibleDescription",
Packit Service 31d16d
                                          "(Ljava/lang/String;)");
Packit Service 31d16d
  jstring jstr = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
Packit Service 31d16d
Packit Service 31d16d
  if (description != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrDescription, description);
Packit Service 31d16d
    (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrDescription);
Packit Service 31d16d
    description = NULL;
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  if (jstr != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    jaw_obj->jstrDescription = (*jniEnv)->NewGlobalRef(jniEnv, jstr);
Packit Service 31d16d
    description = (gchar*)(*jniEnv)->GetStringUTFChars(jniEnv,
Packit Service 31d16d
                                                       jaw_obj->jstrDescription,
Packit Service 31d16d
                                                       NULL);
Packit Service 31d16d
  }
Packit Service 31d16d
  if (jstr != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    description = "";
Packit Service 31d16d
  }
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
Packit Service 31d16d
static gint
Packit Service 31d16d
jaw_object_get_n_children (AtkObject *atk_obj)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  jobject ac = jaw_obj->acc_context;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "getAccessibleChildrenCount",
Packit Service 31d16d
                                          "()I");
Packit Service 31d16d
  jint count = (*jniEnv)->CallIntMethod( jniEnv, ac, jmid );
Packit Service 31d16d
Packit Service 31d16d
  return (gint)count;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static gint
Packit Service 31d16d
jaw_object_get_index_in_parent (AtkObject *atk_obj)
Packit Service 31d16d
{
Packit Service 31d16d
  if (jaw_toplevel_get_child_index(JAW_TOPLEVEL(atk_get_root()), atk_obj) != -1)
Packit Service 31d16d
  {
Packit Service 31d16d
    return jaw_toplevel_get_child_index(JAW_TOPLEVEL(atk_get_root()), atk_obj);
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  jobject ac = jaw_obj->acc_context;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "getAccessibleIndexInParent",
Packit Service 31d16d
                                          "()I");
Packit Service 31d16d
  jint index = (*jniEnv)->CallIntMethod( jniEnv, ac, jmid );
Packit Service 31d16d
Packit Service 31d16d
  return (gint)index;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static AtkRole
Packit Service 31d16d
jaw_object_get_role (AtkObject *atk_obj)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  atk_obj->role = jaw_util_get_atk_role_from_jobj(jaw_obj->acc_context);
Packit Service 31d16d
  return atk_obj->role;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static void
Packit Service 31d16d
jaw_object_set_role (AtkObject *atk_obj, AtkRole role)
Packit Service 31d16d
{
Packit Service 31d16d
  atk_obj->role = role;
Packit Service 31d16d
  if (atk_obj != NULL && atk_obj->role)
Packit Service 31d16d
    atk_object_set_role(atk_obj, atk_obj->role);
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static AtkStateSet*
Packit Service 31d16d
jaw_object_ref_state_set (AtkObject *atk_obj)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  AtkStateSet* state_set = jaw_obj->state_set;
Packit Service 31d16d
  atk_state_set_clear_states( state_set );
Packit Service 31d16d
Packit Service 31d16d
  jobject ac = jaw_obj->acc_context;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "getAccessibleStateSet",
Packit Service 31d16d
                                          "()Ljavax/accessibility/AccessibleStateSet;" );
Packit Service 31d16d
  jobject jstate_set = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleStateSet = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                        "javax/accessibility/AccessibleStateSet" );
Packit Service 31d16d
  jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                classAccessibleStateSet,
Packit Service 31d16d
                                "toArray",
Packit Service 31d16d
                                "()[Ljavax/accessibility/AccessibleState;");
Packit Service 31d16d
Packit Service 31d16d
  jobjectArray jstate_arr = (*jniEnv)->CallObjectMethod( jniEnv, jstate_set, jmid );
Packit Service 31d16d
Packit Service 31d16d
  jsize jarr_size = (*jniEnv)->GetArrayLength(jniEnv, jstate_arr);
Packit Service 31d16d
  jsize i;
Packit Service 31d16d
  for (i = 0; i < jarr_size; i++)
Packit Service 31d16d
  {
Packit Service 31d16d
    jobject jstate = (*jniEnv)->GetObjectArrayElement( jniEnv, jstate_arr, i );
Packit Service 31d16d
    AtkStateType state_type = jaw_util_get_atk_state_type_from_java_state( jniEnv, jstate );
Packit Service 31d16d
    atk_state_set_add_state( state_set, state_type );
Packit Service 31d16d
    if (state_type == ATK_STATE_ENABLED)
Packit Service 31d16d
    {
Packit Service 31d16d
      atk_state_set_add_state( state_set, ATK_STATE_SENSITIVE );
Packit Service 31d16d
    }
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  if (G_OBJECT(state_set) != NULL)
Packit Service 31d16d
    g_object_ref(G_OBJECT(state_set));
Packit Service 31d16d
Packit Service 31d16d
  return state_set;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static const gchar *jaw_object_get_object_locale (AtkObject *atk_obj)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  jobject ac = jaw_obj->acc_context;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "getLocale",
Packit Service 31d16d
                                          "()Ljavax/accessibility/AccessibleContext;");
Packit Service 31d16d
  jobject locale = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
Packit Service 31d16d
  JawImpl *target_obj = jaw_impl_get_instance(jniEnv, locale);
Packit Service 31d16d
  if(target_obj == NULL)
Packit Service 31d16d
    return NULL;
Packit Service 31d16d
Packit Service 31d16d
  return atk_object_get_object_locale((AtkObject*) target_obj);
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static AtkRelationSet*
Packit Service 31d16d
jaw_object_ref_relation_set (AtkObject *atk_obj)
Packit Service 31d16d
{
Packit Service 31d16d
  if (atk_obj->relation_set)
Packit Service 31d16d
    g_object_unref(G_OBJECT(atk_obj->relation_set));
Packit Service 31d16d
  atk_obj->relation_set = atk_relation_set_new();
Packit Service 31d16d
  if(atk_obj == NULL)
Packit Service 31d16d
    return NULL;
Packit Service 31d16d
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  jobject ac = jaw_obj->acc_context;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "getAccessibleRelationSet",
Packit Service 31d16d
                                          "()Ljavax/accessibility/AccessibleRelationSet;" );
Packit Service 31d16d
  jobject jrel_set = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleRelationSet = (*jniEnv)->FindClass( jniEnv,
Packit Service 31d16d
                                                           "javax/accessibility/AccessibleRelationSet");
Packit Service 31d16d
  jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                classAccessibleRelationSet,
Packit Service 31d16d
                                "toArray",
Packit Service 31d16d
                                "()[Ljavax/accessibility/AccessibleRelation;");
Packit Service 31d16d
  jobjectArray jrel_arr = (*jniEnv)->CallObjectMethod(jniEnv, jrel_set, jmid);
Packit Service 31d16d
  jsize jarr_size = (*jniEnv)->GetArrayLength(jniEnv, jrel_arr);
Packit Service 31d16d
Packit Service 31d16d
  jsize i;
Packit Service 31d16d
  for (i = 0; i < jarr_size; i++)
Packit Service 31d16d
  {
Packit Service 31d16d
    jobject jrel = (*jniEnv)->GetObjectArrayElement(jniEnv, jrel_arr, i);
Packit Service 31d16d
    jclass classAccessibleRelation = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                          "javax/accessibility/AccessibleRelation");
Packit Service 31d16d
    jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                  classAccessibleRelation,
Packit Service 31d16d
                                  "getKey",
Packit Service 31d16d
                                  "()Ljava/lang/String;");
Packit Service 31d16d
    jstring jrel_key = (*jniEnv)->CallObjectMethod( jniEnv, jrel, jmid );
Packit Service 31d16d
    AtkRelationType rel_type = jaw_impl_get_atk_relation_type(jniEnv, jrel_key);
Packit Service 31d16d
Packit Service 31d16d
    jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                  classAccessibleRelation,
Packit Service 31d16d
                                  "getTarget",
Packit Service 31d16d
                                  "()[Ljava/lang/Object;");
Packit Service 31d16d
    jobjectArray jtarget_arr = (*jniEnv)->CallObjectMethod(jniEnv, jrel, jmid);
Packit Service 31d16d
    jsize jtarget_size = (*jniEnv)->GetArrayLength(jniEnv, jtarget_arr);
Packit Service 31d16d
Packit Service 31d16d
    jsize j;
Packit Service 31d16d
    for (j = 0; j < jtarget_size; j++)
Packit Service 31d16d
    {
Packit Service 31d16d
      jobject jtarget = (*jniEnv)->GetObjectArrayElement(jniEnv, jtarget_arr, j);
Packit Service 31d16d
      jclass classAccessible = (*jniEnv)->FindClass( jniEnv,
Packit Service 31d16d
                                                    "javax/accessibility/Accessible");
Packit Service 31d16d
      if ((*jniEnv)->IsInstanceOf(jniEnv, jtarget, classAccessible))
Packit Service 31d16d
      {
Packit Service 31d16d
        jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                      classAccessible,
Packit Service 31d16d
                                      "getAccessibleContext",
Packit Service 31d16d
                                      "()Ljavax/accessibility/AccessibleContext;");
Packit Service 31d16d
        jobject target_ac = (*jniEnv)->CallObjectMethod(jniEnv, jtarget, jmid);
Packit Service 31d16d
Packit Service 31d16d
        JawImpl *target_obj = jaw_impl_get_instance(jniEnv, target_ac);
Packit Service 31d16d
        if(target_obj == NULL)
Packit Service 31d16d
          return NULL;
Packit Service 31d16d
        atk_object_add_relationship(atk_obj, rel_type, ATK_OBJECT(target_obj));
Packit Service 31d16d
      }
Packit Service 31d16d
    }
Packit Service 31d16d
  }
Packit Service 31d16d
  if(atk_obj->relation_set == NULL)
Packit Service 31d16d
    return NULL;
Packit Service 31d16d
  if (G_OBJECT(atk_obj->relation_set) != NULL)
Packit Service 31d16d
    g_object_ref (atk_obj->relation_set);
Packit Service 31d16d
Packit Service 31d16d
  return atk_obj->relation_set;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static AtkObject*
Packit Service 31d16d
jaw_object_ref_child(AtkObject *atk_obj, gint i)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(atk_obj);
Packit Service 31d16d
  jobject ac = jaw_obj->acc_context;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "getAccessibleChild",
Packit Service 31d16d
                                          "(I)Ljavax/accessibility/Accessible;" );
Packit Service 31d16d
  jobject jchild = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid, i );
Packit Service 31d16d
  if (jchild == NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    return NULL;
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  jclass classAccessible = (*jniEnv)->FindClass( jniEnv, "javax/accessibility/Accessible" );
Packit Service 31d16d
  jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                classAccessible,
Packit Service 31d16d
                                "getAccessibleContext",
Packit Service 31d16d
                                "()Ljavax/accessibility/AccessibleContext;" );
Packit Service 31d16d
  jobject child_ac = (*jniEnv)->CallObjectMethod( jniEnv, jchild, jmid );
Packit Service 31d16d
Packit Service 31d16d
  AtkObject *obj = (AtkObject*) jaw_impl_get_instance( jniEnv, child_ac );
Packit Service 31d16d
  if (G_OBJECT(obj) != NULL)
Packit Service 31d16d
    g_object_ref(G_OBJECT(obj));
Packit Service 31d16d
Packit Service 31d16d
  return obj;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static JawObject*
Packit Service 31d16d
jaw_object_table_lookup (JNIEnv *jniEnv, jobject ac)
Packit Service 31d16d
{
Packit Service 31d16d
  object_table = jaw_impl_get_object_hash_table();
Packit Service 31d16d
  jclass classAccessibleContext = (*jniEnv)->FindClass( jniEnv,
Packit Service 31d16d
                                                       "javax/accessibility/AccessibleContext" );
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAccessibleContext,
Packit Service 31d16d
                                          "hashCode",
Packit Service 31d16d
                                          "()I" );
Packit Service 31d16d
  gint hash_key = (gint)(*jniEnv)->CallIntMethod( jniEnv, ac, jmid );
Packit Service 31d16d
  gpointer value = NULL;
Packit Service 31d16d
  if (object_table == NULL)
Packit Service 31d16d
    return NULL;
Packit Service 31d16d
Packit Service 31d16d
  value = g_hash_table_lookup(object_table, GINT_TO_POINTER(hash_key));
Packit Service 31d16d
  return (JawObject*)value;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
#ifdef __cplusplus
Packit Service 31d16d
}
Packit Service 31d16d
#endif
Packit Service 31d16d