forked from AuroraMiddleware/gtk
Convert GailRadio(Sub)MenuItem to GtkAccessible classes
The way submenus are handled here isn't really right, since they can come and go at runtime, but I've left it like this for now. A side-effect is that we can't use gtk_widget_class_set_accessible_type here, but have to override get_accessible.
This commit is contained in:
parent
2d655446ba
commit
64b9599866
@ -31,8 +31,8 @@ gail_c_sources = \
|
||||
gtkpanedaccessible.c \
|
||||
gtkprogressbaraccessible.c \
|
||||
gtkradiobuttonaccessible.c \
|
||||
gailradiomenuitem.c \
|
||||
gailradiosubmenuitem.c \
|
||||
gtkradiomenuitemaccessible.c \
|
||||
gtkradiosubmenuitemaccessible.c \
|
||||
gtkrangeaccessible.c \
|
||||
gailrenderercell.c \
|
||||
gtkscaleaccessible.c \
|
||||
@ -83,8 +83,8 @@ gail_private_h_sources = \
|
||||
gtkpanedaccessible.h \
|
||||
gtkprogressbaraccessible.h \
|
||||
gtkradiobuttonaccessible.h \
|
||||
gailradiomenuitem.h \
|
||||
gailradiosubmenuitem.h \
|
||||
gtkradiomenuitemaccessible.h \
|
||||
gtkradiosubmenuitemaccesisble.h \
|
||||
gtkrangeaccessible.h \
|
||||
gailrenderercell.h \
|
||||
gtkscaleaccessible.h \
|
||||
|
@ -33,7 +33,6 @@
|
||||
#include "gailmenu.h"
|
||||
#include "gailmenushell.h"
|
||||
#include "gailmenuitem.h"
|
||||
#include "gailradiomenuitem.h"
|
||||
#include "gailrenderercell.h"
|
||||
#include "gailtextcell.h"
|
||||
#include "gailtoplevel.h"
|
||||
@ -93,7 +92,6 @@ GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_MENU_SHELL, GailMenuShell, gail_menu_shell, GT
|
||||
GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_MENU, GailMenu, gail_menu, GTK_TYPE_MENU)
|
||||
GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_WINDOW, GailWindow, gail_window, GTK_TYPE_BIN)
|
||||
GAIL_IMPLEMENT_FACTORY_WITH_FUNC (GAIL_TYPE_CHECK_MENU_ITEM, GailCheckMenuItem, gail_check_menu_item, gail_check_menu_item_new)
|
||||
GAIL_IMPLEMENT_FACTORY_WITH_FUNC (GAIL_TYPE_RADIO_MENU_ITEM, GailRadioMenuItem, gail_radio_menu_item, gail_radio_menu_item_new)
|
||||
GAIL_IMPLEMENT_FACTORY_WITH_FUNC_DUMMY (GAIL_TYPE_RENDERER_CELL, GailRendererCell, gail_renderer_cell, GTK_TYPE_CELL_RENDERER, gail_renderer_cell_new)
|
||||
GAIL_IMPLEMENT_FACTORY_WITH_FUNC_DUMMY (GAIL_TYPE_BOOLEAN_CELL, GailBooleanCell, gail_boolean_cell, GTK_TYPE_CELL_RENDERER_TOGGLE, gail_boolean_cell_new)
|
||||
GAIL_IMPLEMENT_FACTORY_WITH_FUNC_DUMMY (GAIL_TYPE_IMAGE_CELL, GailImageCell, gail_image_cell, GTK_TYPE_CELL_RENDERER_PIXBUF, gail_image_cell_new)
|
||||
@ -850,7 +848,6 @@ gail_accessibility_module_init (void)
|
||||
GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CELL_RENDERER_PIXBUF, gail_image_cell);
|
||||
GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CELL_RENDERER, gail_renderer_cell);
|
||||
GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CHECK_MENU_ITEM, gail_check_menu_item);
|
||||
GAIL_WIDGET_SET_FACTORY (GTK_TYPE_RADIO_MENU_ITEM, gail_radio_menu_item);
|
||||
|
||||
atk_focus_tracker_init (gail_focus_tracker_init);
|
||||
focus_tracker_id = atk_add_focus_tracker (gail_focus_tracker);
|
||||
|
@ -1,139 +0,0 @@
|
||||
/* GAIL - The GNOME Accessibility Implementation Library
|
||||
* Copyright 2002 Sun Microsystems Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include "gailradiomenuitem.h"
|
||||
#include "gailradiosubmenuitem.h"
|
||||
|
||||
static void gail_radio_menu_item_class_init (GailRadioMenuItemClass *klass);
|
||||
static void gail_radio_menu_item_init (GailRadioMenuItem *radio_menu_item);
|
||||
|
||||
static AtkRelationSet* gail_radio_menu_item_ref_relation_set (AtkObject *obj);
|
||||
|
||||
G_DEFINE_TYPE (GailRadioMenuItem, gail_radio_menu_item, GAIL_TYPE_CHECK_MENU_ITEM)
|
||||
|
||||
static void
|
||||
gail_radio_menu_item_class_init (GailRadioMenuItemClass *klass)
|
||||
{
|
||||
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
|
||||
|
||||
class->ref_relation_set = gail_radio_menu_item_ref_relation_set;
|
||||
}
|
||||
|
||||
AtkObject*
|
||||
gail_radio_menu_item_new (GtkWidget *widget)
|
||||
{
|
||||
GObject *object;
|
||||
AtkObject *accessible;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_RADIO_MENU_ITEM (widget), NULL);
|
||||
|
||||
if (gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget)))
|
||||
return gail_radio_sub_menu_item_new (widget);
|
||||
|
||||
object = g_object_new (GAIL_TYPE_RADIO_MENU_ITEM, NULL);
|
||||
|
||||
accessible = ATK_OBJECT (object);
|
||||
atk_object_initialize (accessible, widget);
|
||||
|
||||
accessible->role = ATK_ROLE_RADIO_MENU_ITEM;
|
||||
return accessible;
|
||||
}
|
||||
|
||||
static void
|
||||
gail_radio_menu_item_init (GailRadioMenuItem *radio_menu_item)
|
||||
{
|
||||
radio_menu_item->old_group = NULL;
|
||||
}
|
||||
|
||||
AtkRelationSet*
|
||||
gail_radio_menu_item_ref_relation_set (AtkObject *obj)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
AtkRelationSet *relation_set;
|
||||
GSList *list;
|
||||
GailRadioMenuItem *radio_menu_item;
|
||||
|
||||
g_return_val_if_fail (GAIL_IS_RADIO_MENU_ITEM (obj), NULL);
|
||||
|
||||
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
|
||||
if (widget == NULL)
|
||||
{
|
||||
/*
|
||||
* State is defunct
|
||||
*/
|
||||
return NULL;
|
||||
}
|
||||
radio_menu_item = GAIL_RADIO_MENU_ITEM (obj);
|
||||
|
||||
relation_set = ATK_OBJECT_CLASS (gail_radio_menu_item_parent_class)->ref_relation_set (obj);
|
||||
|
||||
/*
|
||||
* If the radio menu_item'group has changed remove the relation
|
||||
*/
|
||||
list = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (widget));
|
||||
|
||||
if (radio_menu_item->old_group != list)
|
||||
{
|
||||
AtkRelation *relation;
|
||||
|
||||
relation = atk_relation_set_get_relation_by_type (relation_set, ATK_RELATION_MEMBER_OF);
|
||||
atk_relation_set_remove (relation_set, relation);
|
||||
}
|
||||
|
||||
if (!atk_relation_set_contains (relation_set, ATK_RELATION_MEMBER_OF))
|
||||
{
|
||||
/*
|
||||
* Get the members of the menu_item group
|
||||
*/
|
||||
|
||||
radio_menu_item->old_group = list;
|
||||
if (list)
|
||||
{
|
||||
AtkObject **accessible_array;
|
||||
guint list_length;
|
||||
AtkRelation* relation;
|
||||
gint i = 0;
|
||||
|
||||
list_length = g_slist_length (list);
|
||||
accessible_array = (AtkObject**) g_malloc (sizeof (AtkObject *) *
|
||||
list_length);
|
||||
while (list != NULL)
|
||||
{
|
||||
GtkWidget* list_item = list->data;
|
||||
|
||||
accessible_array[i++] = gtk_widget_get_accessible (list_item);
|
||||
|
||||
list = list->next;
|
||||
}
|
||||
relation = atk_relation_new (accessible_array, list_length,
|
||||
ATK_RELATION_MEMBER_OF);
|
||||
g_free (accessible_array);
|
||||
|
||||
atk_relation_set_add (relation_set, relation);
|
||||
/*
|
||||
* Unref the relation so that it is not leaked.
|
||||
*/
|
||||
g_object_unref (relation);
|
||||
}
|
||||
}
|
||||
return relation_set;
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
/* GAIL - The GNOME Accessibility Implementation Library
|
||||
* Copyright 2002 Sun Microsystems Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __GAIL_RADIO_MENU_ITEM_H__
|
||||
#define __GAIL_RADIO_MENU_ITEM_H__
|
||||
|
||||
#include "gailcheckmenuitem.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GAIL_TYPE_RADIO_MENU_ITEM (gail_radio_menu_item_get_type ())
|
||||
#define GAIL_RADIO_MENU_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAIL_TYPE_RADIO_MENU_ITEM, GailRadioMenuItem))
|
||||
#define GAIL_RADIO_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAIL_TYPE_RADIO_MENU_ITEM, GailRadioMenuItemClass))
|
||||
#define GAIL_IS_RADIO_MENU_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAIL_TYPE_RADIO_MENU_ITEM))
|
||||
#define GAIL_IS_RADIO_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAIL_TYPE_RADIO_MENU_ITEM))
|
||||
#define GAIL_RADIO_MENU_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GAIL_TYPE_RADIO_MENU_ITEM, GailRadioMenuItemClass))
|
||||
|
||||
typedef struct _GailRadioMenuItem GailRadioMenuItem;
|
||||
typedef struct _GailRadioMenuItemClass GailRadioMenuItemClass;
|
||||
|
||||
struct _GailRadioMenuItem
|
||||
{
|
||||
GailCheckMenuItem parent;
|
||||
|
||||
GSList *old_group;
|
||||
};
|
||||
|
||||
GType gail_radio_menu_item_get_type (void);
|
||||
|
||||
struct _GailRadioMenuItemClass
|
||||
{
|
||||
GailCheckMenuItemClass parent_class;
|
||||
};
|
||||
|
||||
AtkObject* gail_radio_menu_item_new (GtkWidget *widget);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GAIL_RADIO_MENU_ITEM_H__ */
|
@ -1,135 +0,0 @@
|
||||
/* GAIL - The GNOME Accessibility Implementation Library
|
||||
* Copyright 2002 Sun Microsystems Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include "gailradiosubmenuitem.h"
|
||||
|
||||
static void gail_radio_sub_menu_item_class_init (GailRadioSubMenuItemClass *klass);
|
||||
static void gail_radio_sub_menu_item_init (GailRadioSubMenuItem *radio_menu_item);
|
||||
|
||||
static AtkRelationSet* gail_radio_sub_menu_item_ref_relation_set (AtkObject *obj);
|
||||
|
||||
G_DEFINE_TYPE (GailRadioSubMenuItem, gail_radio_sub_menu_item, GAIL_TYPE_CHECK_SUB_MENU_ITEM)
|
||||
|
||||
static void
|
||||
gail_radio_sub_menu_item_class_init (GailRadioSubMenuItemClass *klass)
|
||||
{
|
||||
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
|
||||
|
||||
class->ref_relation_set = gail_radio_sub_menu_item_ref_relation_set;
|
||||
}
|
||||
|
||||
AtkObject*
|
||||
gail_radio_sub_menu_item_new (GtkWidget *widget)
|
||||
{
|
||||
GObject *object;
|
||||
AtkObject *accessible;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_RADIO_MENU_ITEM (widget), NULL);
|
||||
|
||||
object = g_object_new (GAIL_TYPE_RADIO_SUB_MENU_ITEM, NULL);
|
||||
|
||||
accessible = ATK_OBJECT (object);
|
||||
atk_object_initialize (accessible, widget);
|
||||
|
||||
accessible->role = ATK_ROLE_RADIO_MENU_ITEM;
|
||||
return accessible;
|
||||
}
|
||||
|
||||
static void
|
||||
gail_radio_sub_menu_item_init (GailRadioSubMenuItem *radio_menu_item)
|
||||
{
|
||||
radio_menu_item->old_group = NULL;
|
||||
}
|
||||
|
||||
AtkRelationSet*
|
||||
gail_radio_sub_menu_item_ref_relation_set (AtkObject *obj)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
AtkRelationSet *relation_set;
|
||||
GSList *list;
|
||||
GailRadioSubMenuItem *radio_menu_item;
|
||||
|
||||
g_return_val_if_fail (GAIL_IS_RADIO_SUB_MENU_ITEM (obj), NULL);
|
||||
|
||||
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
|
||||
if (widget == NULL)
|
||||
{
|
||||
/*
|
||||
* State is defunct
|
||||
*/
|
||||
return NULL;
|
||||
}
|
||||
radio_menu_item = GAIL_RADIO_SUB_MENU_ITEM (obj);
|
||||
|
||||
relation_set = ATK_OBJECT_CLASS (gail_radio_sub_menu_item_parent_class)->ref_relation_set (obj);
|
||||
|
||||
/*
|
||||
* If the radio menu_item'group has changed remove the relation
|
||||
*/
|
||||
list = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (widget));
|
||||
|
||||
if (radio_menu_item->old_group != list)
|
||||
{
|
||||
AtkRelation *relation;
|
||||
|
||||
relation = atk_relation_set_get_relation_by_type (relation_set, ATK_RELATION_MEMBER_OF);
|
||||
atk_relation_set_remove (relation_set, relation);
|
||||
}
|
||||
|
||||
if (!atk_relation_set_contains (relation_set, ATK_RELATION_MEMBER_OF))
|
||||
{
|
||||
/*
|
||||
* Get the members of the menu_item group
|
||||
*/
|
||||
|
||||
radio_menu_item->old_group = list;
|
||||
if (list)
|
||||
{
|
||||
AtkObject **accessible_array;
|
||||
guint list_length;
|
||||
AtkRelation* relation;
|
||||
gint i = 0;
|
||||
|
||||
list_length = g_slist_length (list);
|
||||
accessible_array = (AtkObject**) g_malloc (sizeof (AtkObject *) *
|
||||
list_length);
|
||||
while (list != NULL)
|
||||
{
|
||||
GtkWidget* list_item = list->data;
|
||||
|
||||
accessible_array[i++] = gtk_widget_get_accessible (list_item);
|
||||
|
||||
list = list->next;
|
||||
}
|
||||
relation = atk_relation_new (accessible_array, list_length,
|
||||
ATK_RELATION_MEMBER_OF);
|
||||
g_free (accessible_array);
|
||||
|
||||
atk_relation_set_add (relation_set, relation);
|
||||
/*
|
||||
* Unref the relation so that it is not leaked.
|
||||
*/
|
||||
g_object_unref (relation);
|
||||
}
|
||||
}
|
||||
return relation_set;
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
/* GAIL - The GNOME Accessibility Implementation Library
|
||||
* Copyright 2002 Sun Microsystems Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __GAIL_RADIO_SUB_MENU_ITEM_H__
|
||||
#define __GAIL_RADIO_SUB_MENU_ITEM_H__
|
||||
|
||||
#include "gailchecksubmenuitem.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GAIL_TYPE_RADIO_SUB_MENU_ITEM (gail_radio_sub_menu_item_get_type ())
|
||||
#define GAIL_RADIO_SUB_MENU_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAIL_TYPE_RADIO_SUB_MENU_ITEM, GailRadioSubMenuItem))
|
||||
#define GAIL_RADIO_SUB_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAIL_TYPE_RADIO_SUB_MENU_ITEM, GailRadioSubMenuItemClass))
|
||||
#define GAIL_IS_RADIO_SUB_MENU_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAIL_TYPE_RADIO_SUB_MENU_ITEM))
|
||||
#define GAIL_IS_RADIO_SUB_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAIL_TYPE_RADIO_SUB_MENU_ITEM))
|
||||
#define GAIL_RADIO_SUB_MENU_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GAIL_TYPE_RADIO_SUB_MENU_ITEM, GailRadioSubMenuItemClass))
|
||||
|
||||
typedef struct _GailRadioSubMenuItem GailRadioSubMenuItem;
|
||||
typedef struct _GailRadioSubMenuItemClass GailRadioSubMenuItemClass;
|
||||
|
||||
struct _GailRadioSubMenuItem
|
||||
{
|
||||
GailCheckSubMenuItem parent;
|
||||
|
||||
GSList *old_group;
|
||||
};
|
||||
|
||||
GType gail_radio_sub_menu_item_get_type (void);
|
||||
|
||||
struct _GailRadioSubMenuItemClass
|
||||
{
|
||||
GailCheckSubMenuItemClass parent_class;
|
||||
};
|
||||
|
||||
AtkObject* gail_radio_sub_menu_item_new (GtkWidget *widget);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GAIL_RADIO_SUB_MENU_ITEM_H__ */
|
102
gtk/a11y/gtkradiomenuitemaccessible.c
Normal file
102
gtk/a11y/gtkradiomenuitemaccessible.c
Normal file
@ -0,0 +1,102 @@
|
||||
/* GAIL - The GNOME Accessibility Implementation Library
|
||||
* Copyright 2002 Sun Microsystems Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include "gtkradiomenuitemaccessible.h"
|
||||
#include "gtkradiosubmenuitemaccessible.h"
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GtkRadioMenuItemAccessible, gtk_radio_menu_item_accessible, GAIL_TYPE_CHECK_MENU_ITEM)
|
||||
|
||||
AtkRelationSet *
|
||||
gtk_radio_menu_item_accessible_ref_relation_set (AtkObject *obj)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
AtkRelationSet *relation_set;
|
||||
GSList *list;
|
||||
GtkRadioMenuItemAccessible *radio_menu_item;
|
||||
|
||||
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
|
||||
if (widget == NULL)
|
||||
return NULL;
|
||||
|
||||
radio_menu_item = GTK_RADIO_MENU_ITEM_ACCESSIBLE (obj);
|
||||
|
||||
relation_set = ATK_OBJECT_CLASS (gtk_radio_menu_item_accessible_parent_class)->ref_relation_set (obj);
|
||||
|
||||
/* If the radio menu_item'group has changed remove the relation */
|
||||
list = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (widget));
|
||||
if (radio_menu_item->old_group != list)
|
||||
{
|
||||
AtkRelation *relation;
|
||||
|
||||
relation = atk_relation_set_get_relation_by_type (relation_set, ATK_RELATION_MEMBER_OF);
|
||||
atk_relation_set_remove (relation_set, relation);
|
||||
}
|
||||
|
||||
if (!atk_relation_set_contains (relation_set, ATK_RELATION_MEMBER_OF))
|
||||
{
|
||||
/* Get the members of the menu_item group */
|
||||
|
||||
radio_menu_item->old_group = list;
|
||||
if (list)
|
||||
{
|
||||
AtkObject **accessible_array;
|
||||
guint list_length;
|
||||
AtkRelation* relation;
|
||||
gint i = 0;
|
||||
|
||||
list_length = g_slist_length (list);
|
||||
accessible_array = g_new (AtkObject *, list_length);
|
||||
while (list != NULL)
|
||||
{
|
||||
GtkWidget* list_item = list->data;
|
||||
|
||||
accessible_array[i++] = gtk_widget_get_accessible (list_item);
|
||||
|
||||
list = list->next;
|
||||
}
|
||||
relation = atk_relation_new (accessible_array, list_length,
|
||||
ATK_RELATION_MEMBER_OF);
|
||||
g_free (accessible_array);
|
||||
|
||||
atk_relation_set_add (relation_set, relation);
|
||||
|
||||
/* Unref the relation so that it is not leaked */
|
||||
g_object_unref (relation);
|
||||
}
|
||||
}
|
||||
|
||||
return relation_set;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_radio_menu_item_accessible_class_init (GtkRadioMenuItemAccessibleClass *klass)
|
||||
{
|
||||
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
|
||||
|
||||
class->ref_relation_set = gtk_radio_menu_item_accessible_ref_relation_set;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_radio_menu_item_accessible_init (GtkRadioMenuItemAccessible *radio_menu_item)
|
||||
{
|
||||
}
|
53
gtk/a11y/gtkradiomenuitemaccessible.h
Normal file
53
gtk/a11y/gtkradiomenuitemaccessible.h
Normal file
@ -0,0 +1,53 @@
|
||||
/* GAIL - The GNOME Accessibility Implementation Library
|
||||
* Copyright 2002 Sun Microsystems Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __GTK_RADIO_MENU_ITEM_ACCESSIBLE_H__
|
||||
#define __GTK_RADIO_MENU_ITEM_ACCESSIBLE_H__
|
||||
|
||||
#include "gailcheckmenuitem.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GTK_TYPE_RADIO_MENU_ITEM_ACCESSIBLE (gtk_radio_menu_item_accessible_get_type ())
|
||||
#define GTK_RADIO_MENU_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_RADIO_MENU_ITEM_ACCESSIBLE, GtkRadioMenuItemAccessible))
|
||||
#define GTK_RADIO_MENU_ITEM_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_RADIO_MENU_ITEM_ACCESSIBLE, GtkRadioMenuItemAccessibleClass))
|
||||
#define GTK_IS_RADIO_MENU_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_RADIO_MENU_ITEM_ACCESSIBLE))
|
||||
#define GTK_IS_RADIO_MENU_ITEM_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_RADIO_MENU_ITEM_ACCESSIBLE))
|
||||
#define GTK_RADIO_MENU_ITEM_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_RADIO_MENU_ITEM_ACCESSIBLE, GtkRadioMenuItemAccessibleClass))
|
||||
|
||||
typedef struct _GtkRadioMenuItemAccessible GtkRadioMenuItemAccessible;
|
||||
typedef struct _GtkRadioMenuItemAccessibleClass GtkRadioMenuItemAccessibleClass;
|
||||
|
||||
struct _GtkRadioMenuItemAccessible
|
||||
{
|
||||
GailCheckMenuItem parent;
|
||||
|
||||
GSList *old_group;
|
||||
};
|
||||
|
||||
struct _GtkRadioMenuItemAccessibleClass
|
||||
{
|
||||
GailCheckMenuItemClass parent_class;
|
||||
};
|
||||
|
||||
GType gtk_radio_menu_item_accessible_get_type (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_RADIO_MENU_ITEM_ACCESSIBLE_H__ */
|
102
gtk/a11y/gtkradiosubmenuitemaccessible.c
Normal file
102
gtk/a11y/gtkradiosubmenuitemaccessible.c
Normal file
@ -0,0 +1,102 @@
|
||||
/* GAIL - The GNOME Accessibility Implementation Library
|
||||
* Copyright 2002 Sun Microsystems Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include "gtkradiosubmenuitemaccessible.h"
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GtkRadioSubmenuItemAccessible, gtk_radio_submenu_item_accessible, GAIL_TYPE_CHECK_SUB_MENU_ITEM)
|
||||
|
||||
|
||||
AtkRelationSet *
|
||||
gtk_radio_submenu_item_accessible_ref_relation_set (AtkObject *obj)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
AtkRelationSet *relation_set;
|
||||
GSList *list;
|
||||
GtkRadioSubmenuItemAccessible *radio_menu_item;
|
||||
|
||||
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
|
||||
if (widget == NULL)
|
||||
return NULL;
|
||||
|
||||
radio_menu_item = GTK_RADIO_SUBMENU_ITEM_ACCESSIBLE (obj);
|
||||
|
||||
relation_set = ATK_OBJECT_CLASS (gtk_radio_submenu_item_accessible_parent_class)->ref_relation_set (obj);
|
||||
|
||||
/* If the radio menu_item's group has changed remove the relation */
|
||||
list = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (widget));
|
||||
|
||||
if (radio_menu_item->old_group != list)
|
||||
{
|
||||
AtkRelation *relation;
|
||||
|
||||
relation = atk_relation_set_get_relation_by_type (relation_set, ATK_RELATION_MEMBER_OF);
|
||||
atk_relation_set_remove (relation_set, relation);
|
||||
}
|
||||
|
||||
if (!atk_relation_set_contains (relation_set, ATK_RELATION_MEMBER_OF))
|
||||
{
|
||||
/* Get the members of the menu_item group */
|
||||
radio_menu_item->old_group = list;
|
||||
if (list)
|
||||
{
|
||||
AtkObject **accessible_array;
|
||||
guint list_length;
|
||||
AtkRelation* relation;
|
||||
gint i = 0;
|
||||
|
||||
list_length = g_slist_length (list);
|
||||
accessible_array = g_new (AtkObject *, list_length);
|
||||
while (list != NULL)
|
||||
{
|
||||
GtkWidget* list_item = list->data;
|
||||
|
||||
accessible_array[i++] = gtk_widget_get_accessible (list_item);
|
||||
|
||||
list = list->next;
|
||||
}
|
||||
relation = atk_relation_new (accessible_array, list_length,
|
||||
ATK_RELATION_MEMBER_OF);
|
||||
g_free (accessible_array);
|
||||
|
||||
atk_relation_set_add (relation_set, relation);
|
||||
|
||||
/* Unref the relation so that it is not leaked */
|
||||
g_object_unref (relation);
|
||||
}
|
||||
}
|
||||
|
||||
return relation_set;
|
||||
}
|
||||
static void
|
||||
gtk_radio_submenu_item_accessible_class_init (GtkRadioSubmenuItemAccessibleClass *klass)
|
||||
{
|
||||
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
|
||||
|
||||
class->ref_relation_set = gtk_radio_submenu_item_accessible_ref_relation_set;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_radio_submenu_item_accessible_init (GtkRadioSubmenuItemAccessible *radio_menu_item)
|
||||
{
|
||||
radio_menu_item->old_group = NULL;
|
||||
}
|
53
gtk/a11y/gtkradiosubmenuitemaccessible.h
Normal file
53
gtk/a11y/gtkradiosubmenuitemaccessible.h
Normal file
@ -0,0 +1,53 @@
|
||||
/* GAIL - The GNOME Accessibility Implementation Library
|
||||
* Copyright 2002 Sun Microsystems Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __GTK_RADIO_SUBMENU_ITEM_ACCESSIBLE_H__
|
||||
#define __GTK_RADIO_SUBMENU_ITEM_ACCESSIBLE_H__
|
||||
|
||||
#include "gailchecksubmenuitem.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GTK_TYPE_RADIO_SUBMENU_ITEM_ACCESSIBLE (gtk_radio_submenu_item_accessible_get_type ())
|
||||
#define GTK_RADIO_SUBMENU_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_RADIO_SUBMENU_ITEM_ACCESSIBLE, GtkRadioSubmenuItemAccessible))
|
||||
#define GTK_RADIO_SUBMENU_ITEM_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_RADIO_SUBMENU_ITEM_ACCESSIBLE, GtkRadioSubmenuItemAccessibleClass))
|
||||
#define GTK_IS_RADIO_SUBMENU_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_RADIO_SUBMENU_ITEM_ACCESSIBLE))
|
||||
#define GTK_IS_RADIO_SUBMENU_ITEM_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_RADIO_SUBMENU_ITEM_ACCESSIBLE))
|
||||
#define GTK_RADIO_SUBMENU_ITEM_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_RADIO_SUBMENU_ITEM_ACCESSIBLE, GtkRadioSubmenuItemAccessibleClass))
|
||||
|
||||
typedef struct _GtkRadioSubmenuItemAccessible GtkRadioSubmenuItemAccessible;
|
||||
typedef struct _GtkRadioSubmenuItemAccessibleClass GtkRadioSubmenuItemAccessibleClass;
|
||||
|
||||
struct _GtkRadioSubmenuItemAccessible
|
||||
{
|
||||
GailCheckSubMenuItem parent;
|
||||
|
||||
GSList *old_group;
|
||||
};
|
||||
|
||||
struct _GtkRadioSubmenuItemAccessibleClass
|
||||
{
|
||||
GailCheckSubMenuItemClass parent_class;
|
||||
};
|
||||
|
||||
GType gtk_radio_submenu_item_accessible_get_type (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_RADIO_SUBMENU_ITEM_ACCESSIBLE_H__ */
|
@ -31,7 +31,8 @@
|
||||
#include "gtkactivatable.h"
|
||||
#include "gtkprivate.h"
|
||||
#include "gtkintl.h"
|
||||
|
||||
#include "a11y/gtkradiomenuitemaccessible.h"
|
||||
#include "a11y/gtkradiosubmenuitemaccessible.h"
|
||||
|
||||
/**
|
||||
* SECTION:gtkradiomenuitem
|
||||
@ -393,11 +394,30 @@ gtk_radio_menu_item_get_group (GtkRadioMenuItem *radio_menu_item)
|
||||
return radio_menu_item->priv->group;
|
||||
}
|
||||
|
||||
static AtkObject *
|
||||
gtk_radio_menu_item_get_accessible (GtkWidget *widget)
|
||||
{
|
||||
GObject *object;
|
||||
AtkObject *accessible;
|
||||
|
||||
/* FIXME this is not really right, submenus can come and go */
|
||||
if (gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget)))
|
||||
object = g_object_new (GTK_TYPE_RADIO_SUBMENU_ITEM_ACCESSIBLE, NULL);
|
||||
else
|
||||
object = g_object_new (GTK_TYPE_RADIO_MENU_ITEM_ACCESSIBLE, NULL);
|
||||
|
||||
accessible = ATK_OBJECT (object);
|
||||
atk_object_initialize (accessible, widget);
|
||||
|
||||
accessible->role = ATK_ROLE_RADIO_MENU_ITEM;
|
||||
|
||||
return accessible;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_radio_menu_item_class_init (GtkRadioMenuItemClass *klass)
|
||||
{
|
||||
GObjectClass *gobject_class;
|
||||
GObjectClass *gobject_class;
|
||||
GtkWidgetClass *widget_class;
|
||||
GtkMenuItemClass *menu_item_class;
|
||||
|
||||
@ -409,6 +429,7 @@ gtk_radio_menu_item_class_init (GtkRadioMenuItemClass *klass)
|
||||
gobject_class->get_property = gtk_radio_menu_item_get_property;
|
||||
|
||||
widget_class->destroy = gtk_radio_menu_item_destroy;
|
||||
widget_class->get_accessible = gtk_radio_menu_item_get_accessible;
|
||||
|
||||
menu_item_class->activate = gtk_radio_menu_item_activate;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user