Blame jni/src/jawtoplevel.c

Packit ffe0d2
/*
Packit ffe0d2
 * Java ATK Wrapper for GNOME
Packit ffe0d2
 * Copyright (C) 2009 Sun Microsystems Inc.
Packit ffe0d2
 *
Packit ffe0d2
 * This library is free software; you can redistribute it and/or
Packit ffe0d2
 * modify it under the terms of the GNU Lesser General Public
Packit ffe0d2
 * License as published by the Free Software Foundation; either
Packit ffe0d2
 * version 2.1 of the License, or (at your option) any later version.
Packit ffe0d2
 *
Packit ffe0d2
 * This library is distributed in the hope that it will be useful,
Packit ffe0d2
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit ffe0d2
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit ffe0d2
 * Lesser General Public License for more details.
Packit ffe0d2
 *
Packit ffe0d2
 * You should have received a copy of the GNU Lesser General Public
Packit ffe0d2
 * License along with this library; if not, write to the Free Software
Packit ffe0d2
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit ffe0d2
 */
Packit ffe0d2
Packit ffe0d2
#include <stdlib.h>
Packit ffe0d2
#include <stdio.h>
Packit ffe0d2
#include <string.h>
Packit ffe0d2
#include <glib.h>
Packit ffe0d2
#include "jawtoplevel.h"
Packit ffe0d2
Packit ffe0d2
static void jaw_toplevel_class_init(JawToplevelClass *klass);
Packit ffe0d2
static void jaw_toplevel_init(JawToplevel *toplevel);
Packit ffe0d2
Packit ffe0d2
static void jaw_toplevel_initialize(AtkObject *accessible, gpointer data);
Packit ffe0d2
static void jaw_toplevel_object_finalize(GObject *obj);
Packit ffe0d2
Packit ffe0d2
/* override AtkObject function */
Packit ffe0d2
static const gchar* jaw_toplevel_get_name(AtkObject *obj);
Packit ffe0d2
static const gchar* jaw_toplevel_get_description(AtkObject *obj);
Packit ffe0d2
static gint jaw_toplevel_get_n_children(AtkObject *obj);
Packit ffe0d2
static gint jaw_toplevel_get_index_in_parent(AtkObject *obj);
Packit ffe0d2
static AtkRole jaw_toplevel_get_role(AtkObject *obj);
Packit ffe0d2
static AtkObject* jaw_toplevel_ref_child(AtkObject *obj, gint i);
Packit ffe0d2
static AtkObject* jaw_toplevel_get_parent(AtkObject *obj);
Packit ffe0d2
Packit ffe0d2
G_DEFINE_TYPE (JawToplevel, jaw_toplevel, ATK_TYPE_OBJECT)
Packit ffe0d2
Packit ffe0d2
static void
Packit ffe0d2
jaw_toplevel_class_init (JawToplevelClass *klass)
Packit ffe0d2
{
Packit ffe0d2
  AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS(klass);
Packit ffe0d2
  GObjectClass *g_object_class = G_OBJECT_CLASS(klass);
Packit ffe0d2
Packit ffe0d2
  atk_object_class->initialize = jaw_toplevel_initialize;
Packit ffe0d2
  atk_object_class->get_name = jaw_toplevel_get_name;
Packit ffe0d2
  atk_object_class->get_description = jaw_toplevel_get_description;
Packit ffe0d2
  atk_object_class->get_n_children = jaw_toplevel_get_n_children;
Packit ffe0d2
  atk_object_class->get_index_in_parent = jaw_toplevel_get_index_in_parent;
Packit ffe0d2
  atk_object_class->get_role = jaw_toplevel_get_role;
Packit ffe0d2
  atk_object_class->ref_child = jaw_toplevel_ref_child;
Packit ffe0d2
  atk_object_class->get_parent = jaw_toplevel_get_parent;
Packit ffe0d2
Packit ffe0d2
  g_object_class->finalize = jaw_toplevel_object_finalize;
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
static void
Packit ffe0d2
jaw_toplevel_init (JawToplevel *toplevel)
Packit ffe0d2
{
Packit ffe0d2
  toplevel->windows = NULL;
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
static void
Packit ffe0d2
jaw_toplevel_initialize(AtkObject *accessible, gpointer data)
Packit ffe0d2
{
Packit ffe0d2
 ATK_OBJECT_CLASS (jaw_toplevel_parent_class)->initialize(accessible, data);
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
static void
Packit ffe0d2
jaw_toplevel_object_finalize (GObject *obj)
Packit ffe0d2
{
Packit ffe0d2
  JawToplevel *jaw_toplevel = JAW_TOPLEVEL(obj);
Packit ffe0d2
  g_list_free(jaw_toplevel->windows);
Packit ffe0d2
Packit ffe0d2
  JawToplevelClass *klass = JAW_TOPLEVEL_GET_CLASS(obj);
Packit ffe0d2
  G_OBJECT_CLASS(klass)->finalize(obj);
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
static const gchar*
Packit ffe0d2
jaw_toplevel_get_name (AtkObject *obj)
Packit ffe0d2
{
Packit ffe0d2
  gint i;
Packit ffe0d2
  for(i = 0; i < atk_object_get_n_accessible_children(obj); i++)
Packit ffe0d2
  {
Packit ffe0d2
    AtkObject* child = atk_object_ref_accessible_child(obj, i);
Packit ffe0d2
    const gchar* name = atk_object_get_name(child);
Packit ffe0d2
    if (name && strlen(name) > 0)
Packit ffe0d2
    {
Packit ffe0d2
      g_object_unref(G_OBJECT(child));
Packit ffe0d2
      return name;
Packit ffe0d2
    }
Packit ffe0d2
    g_object_unref(G_OBJECT(child));
Packit ffe0d2
  }
Packit ffe0d2
Packit ffe0d2
  return "Java Application";
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
static const gchar*
Packit ffe0d2
jaw_toplevel_get_description (AtkObject *obj)
Packit ffe0d2
{
Packit ffe0d2
  return "Accessible Java application";
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
static gint
Packit ffe0d2
jaw_toplevel_get_n_children (AtkObject *obj)
Packit ffe0d2
{
Packit ffe0d2
  JawToplevel* jaw_toplevel = JAW_TOPLEVEL(obj);
Packit ffe0d2
  gint n = g_list_length(jaw_toplevel->windows);
Packit ffe0d2
Packit ffe0d2
  return n;
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
static gint
Packit ffe0d2
jaw_toplevel_get_index_in_parent (AtkObject *obj)
Packit ffe0d2
{
Packit ffe0d2
  JawToplevel *jaw_toplevel = JAW_TOPLEVEL(obj);
Packit ffe0d2
  gint i = g_list_index(jaw_toplevel->windows, obj);
Packit ffe0d2
Packit ffe0d2
  return i;
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
static AtkRole
Packit ffe0d2
jaw_toplevel_get_role (AtkObject *obj)
Packit ffe0d2
{
Packit ffe0d2
  return ATK_ROLE_APPLICATION;
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
static AtkObject*
Packit ffe0d2
jaw_toplevel_ref_child (AtkObject *obj, gint i)
Packit ffe0d2
{
Packit ffe0d2
  JawToplevel *jaw_toplevel = JAW_TOPLEVEL(obj);
Packit ffe0d2
  AtkObject* child = (AtkObject*)g_list_nth_data(jaw_toplevel->windows, i);
Packit ffe0d2
Packit ffe0d2
  if (G_OBJECT(child) != NULL)
Packit ffe0d2
    g_object_ref(G_OBJECT(child));
Packit ffe0d2
Packit ffe0d2
  return child;
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
static AtkObject*
Packit ffe0d2
jaw_toplevel_get_parent (AtkObject *obj)
Packit ffe0d2
{
Packit ffe0d2
  return NULL;
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
gint
Packit ffe0d2
jaw_toplevel_add_window (JawToplevel *toplevel, AtkObject *child)
Packit ffe0d2
{
Packit ffe0d2
  if (toplevel == NULL)
Packit ffe0d2
  {
Packit ffe0d2
    return -1;
Packit ffe0d2
  }
Packit ffe0d2
Packit ffe0d2
  if (g_list_index(toplevel->windows, child) != -1)
Packit ffe0d2
  {
Packit ffe0d2
    return -1;
Packit ffe0d2
  }
Packit ffe0d2
Packit ffe0d2
  toplevel->windows = g_list_append(toplevel->windows, child);
Packit ffe0d2
Packit ffe0d2
  return g_list_index(toplevel->windows, child);
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
gint jaw_toplevel_remove_window(JawToplevel *toplevel, AtkObject *child)
Packit ffe0d2
{
Packit ffe0d2
  gint index = -1;
Packit ffe0d2
Packit ffe0d2
  if (toplevel == NULL)
Packit ffe0d2
  {
Packit ffe0d2
    return index;
Packit ffe0d2
  }
Packit ffe0d2
Packit ffe0d2
  if ((index = g_list_index(toplevel->windows, child)) == -1)
Packit ffe0d2
  {
Packit ffe0d2
    return index;
Packit ffe0d2
  }
Packit ffe0d2
Packit ffe0d2
  toplevel->windows = g_list_remove(toplevel->windows, child);
Packit ffe0d2
Packit ffe0d2
  return index;
Packit ffe0d2
}
Packit ffe0d2
Packit ffe0d2
gint jaw_toplevel_get_child_index(JawToplevel *toplevel, AtkObject *child)
Packit ffe0d2
{
Packit ffe0d2
  gint i = g_list_index(toplevel->windows, child);
Packit ffe0d2
  return i;
Packit ffe0d2
}
Packit ffe0d2