|
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 |
|