From 209a2d1ba02e17ad56af4c56293129686d4ca96c Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 1 Jul 2011 12:38:39 -0400 Subject: [PATCH] Convert GailCheck(Sub)MenuItem to GtkAccessible classes This is along the same lines as the previous commit, with the same caveat. --- gtk/a11y/Makefile.am | 8 +- gtk/a11y/gail.c | 3 - gtk/a11y/gailcheckmenuitem.h | 53 -------- gtk/a11y/gailchecksubmenuitem.h | 53 -------- ...enuitem.c => gtkcheckmenuitemaccessible.c} | 114 ++++++------------ gtk/a11y/gtkcheckmenuitemaccessible.h | 51 ++++++++ ...item.c => gtkchecksubmenuitemaccessible.c} | 110 ++++++----------- gtk/a11y/gtkchecksubmenuitemaccessible.h | 51 ++++++++ gtk/a11y/gtkradiomenuitemaccessible.c | 12 +- gtk/a11y/gtkradiomenuitemaccessible.h | 6 +- gtk/a11y/gtkradiosubmenuitemaccessible.c | 13 +- gtk/a11y/gtkradiosubmenuitemaccessible.h | 6 +- gtk/gtkcheckmenuitem.c | 24 +++- gtk/gtkradiomenuitem.c | 2 - 14 files changed, 235 insertions(+), 271 deletions(-) delete mode 100644 gtk/a11y/gailcheckmenuitem.h delete mode 100644 gtk/a11y/gailchecksubmenuitem.h rename gtk/a11y/{gailcheckmenuitem.c => gtkcheckmenuitemaccessible.c} (52%) create mode 100644 gtk/a11y/gtkcheckmenuitemaccessible.h rename gtk/a11y/{gailchecksubmenuitem.c => gtkchecksubmenuitemaccessible.c} (52%) create mode 100644 gtk/a11y/gtkchecksubmenuitemaccessible.h diff --git a/gtk/a11y/Makefile.am b/gtk/a11y/Makefile.am index a68d3c9b3..f3103050b 100644 --- a/gtk/a11y/Makefile.am +++ b/gtk/a11y/Makefile.am @@ -10,8 +10,8 @@ gail_c_sources = \ gailbutton.c \ gailcell.c \ gailcellparent.c \ - gailcheckmenuitem.c \ - gailchecksubmenuitem.c \ + gtkcheckmenuitemaccessible.c \ + gtkchecksubmenuitemaccessible.c \ gtkcomboboxaccessible.c \ gailcontainer.c \ gailcontainercell.c \ @@ -61,8 +61,8 @@ gail_private_h_sources = \ gailbutton.h \ gailcell.h \ gailcellparent.h \ - gailcheckmenuitem.h \ - gailchecksubmenuitem.h \ + gtkcheckmenuitemaccessible.h \ + gtkchecksubmenuitemaccessible.h \ gtkcomboboxaccessible.h \ gailcontainercell.h \ gailcontainer.h \ diff --git a/gtk/a11y/gail.c b/gtk/a11y/gail.c index 92b35007a..bcb867b67 100644 --- a/gtk/a11y/gail.c +++ b/gtk/a11y/gail.c @@ -26,7 +26,6 @@ #include "gailbooleancell.h" #include "gailbutton.h" #include "gailcell.h" -#include "gailcheckmenuitem.h" #include "gailcontainer.h" #include "gailcontainercell.h" #include "gailimagecell.h" @@ -91,7 +90,6 @@ GAIL_IMPLEMENT_FACTORY_WITH_FUNC (GAIL_TYPE_MENU_ITEM, GailMenuItem, gail_menu_i GAIL_IMPLEMENT_FACTORY (GAIL_TYPE_MENU_SHELL, GailMenuShell, gail_menu_shell, GTK_TYPE_MENU_SHELL) 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_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) @@ -847,7 +845,6 @@ gail_accessibility_module_init (void) GAIL_WIDGET_SET_FACTORY (GTK_TYPE_CELL_RENDERER_TOGGLE, gail_boolean_cell); 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); atk_focus_tracker_init (gail_focus_tracker_init); focus_tracker_id = atk_add_focus_tracker (gail_focus_tracker); diff --git a/gtk/a11y/gailcheckmenuitem.h b/gtk/a11y/gailcheckmenuitem.h deleted file mode 100644 index c62f988aa..000000000 --- a/gtk/a11y/gailcheckmenuitem.h +++ /dev/null @@ -1,53 +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_CHECK_MENU_ITEM_H__ -#define __GAIL_CHECK_MENU_ITEM_H__ - -#include "gailmenuitem.h" - -G_BEGIN_DECLS - -#define GAIL_TYPE_CHECK_MENU_ITEM (gail_check_menu_item_get_type ()) -#define GAIL_CHECK_MENU_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAIL_TYPE_CHECK_MENU_ITEM, GailCheckMenuItem)) -#define GAIL_CHECK_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAIL_TYPE_CHECK_MENU_ITEM, GailCheckMenuItemClass)) -#define GAIL_IS_CHECK_MENU_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAIL_TYPE_CHECK_MENU_ITEM)) -#define GAIL_IS_CHECK_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAIL_TYPE_CHECK_MENU_ITEM)) -#define GAIL_CHECK_MENU_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GAIL_TYPE_CHECK_MENU_ITEM, GailCheckMenuItemClass)) - -typedef struct _GailCheckMenuItem GailCheckMenuItem; -typedef struct _GailCheckMenuItemClass GailCheckMenuItemClass; - -struct _GailCheckMenuItem -{ - GailMenuItem parent; -}; - -GType gail_check_menu_item_get_type (void); - -struct _GailCheckMenuItemClass -{ - GailMenuItemClass parent_class; -}; - -AtkObject* gail_check_menu_item_new (GtkWidget *widget); - -G_END_DECLS - -#endif /* __GAIL_CHECK_MENU_ITEM_H__ */ diff --git a/gtk/a11y/gailchecksubmenuitem.h b/gtk/a11y/gailchecksubmenuitem.h deleted file mode 100644 index 4f77b9858..000000000 --- a/gtk/a11y/gailchecksubmenuitem.h +++ /dev/null @@ -1,53 +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_CHECK_SUB_MENU_ITEM_H__ -#define __GAIL_CHECK_SUB_MENU_ITEM_H__ - -#include "gailsubmenuitem.h" - -G_BEGIN_DECLS - -#define GAIL_TYPE_CHECK_SUB_MENU_ITEM (gail_check_sub_menu_item_get_type ()) -#define GAIL_CHECK_SUB_MENU_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAIL_TYPE_CHECK_SUB_MENU_ITEM, GailCheckSubMenuItem)) -#define GAIL_CHECK_SUB_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAIL_TYPE_CHECK_SUB_MENU_ITEM, GailCheckSubMenuItemClass)) -#define GAIL_IS_CHECK_SUB_MENU_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAIL_TYPE_CHECK_SUB_MENU_ITEM)) -#define GAIL_IS_CHECK_SUB_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAIL_TYPE_CHECK_SUB_MENU_ITEM)) -#define GAIL_CHECK_SUB_MENU_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GAIL_TYPE_CHECK_SUB_MENU_ITEM, GailCheckSubMenuItemClass)) - -typedef struct _GailCheckSubMenuItem GailCheckSubMenuItem; -typedef struct _GailCheckSubMenuItemClass GailCheckSubMenuItemClass; - -struct _GailCheckSubMenuItem -{ - GailSubMenuItem parent; -}; - -GType gail_check_sub_menu_item_get_type (void); - -struct _GailCheckSubMenuItemClass -{ - GailSubMenuItemClass parent_class; -}; - -AtkObject* gail_check_sub_menu_item_new (GtkWidget *widget); - -G_END_DECLS - -#endif /* __GAIL_CHECK_SUB_MENU_ITEM_H__ */ diff --git a/gtk/a11y/gailcheckmenuitem.c b/gtk/a11y/gtkcheckmenuitemaccessible.c similarity index 52% rename from gtk/a11y/gailcheckmenuitem.c rename to gtk/a11y/gtkcheckmenuitemaccessible.c index 52b588f1a..7eb9b0f05 100644 --- a/gtk/a11y/gailcheckmenuitem.c +++ b/gtk/a11y/gtkcheckmenuitemaccessible.c @@ -20,101 +20,48 @@ #include "config.h" #include -#include "gailcheckmenuitem.h" -#include "gailchecksubmenuitem.h" +#include "gtkcheckmenuitemaccessible.h" -static void gail_check_menu_item_class_init (GailCheckMenuItemClass *klass); -static void gail_check_menu_item_init (GailCheckMenuItem *item); - -static void gail_check_menu_item_toggled_gtk (GtkWidget *widget); - -static void gail_check_menu_item_real_notify_gtk (GObject *obj, - GParamSpec *pspec); - -static void gail_check_menu_item_real_initialize (AtkObject *obj, - gpointer data); - -static AtkStateSet* gail_check_menu_item_ref_state_set (AtkObject *accessible); - -G_DEFINE_TYPE (GailCheckMenuItem, gail_check_menu_item, GAIL_TYPE_MENU_ITEM) +G_DEFINE_TYPE (GtkCheckMenuItemAccessible, gtk_check_menu_item_accessible, GAIL_TYPE_MENU_ITEM) static void -gail_check_menu_item_class_init (GailCheckMenuItemClass *klass) +toggled_cb (GtkWidget *widget) { - GailWidgetClass *widget_class; - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - widget_class = (GailWidgetClass*)klass; - widget_class->notify_gtk = gail_check_menu_item_real_notify_gtk; - - class->ref_state_set = gail_check_menu_item_ref_state_set; - class->initialize = gail_check_menu_item_real_initialize; -} - -static void -gail_check_menu_item_init (GailCheckMenuItem *item) -{ -} - -AtkObject* -gail_check_menu_item_new (GtkWidget *widget) -{ - GObject *object; AtkObject *accessible; + GtkCheckMenuItem *check_menu_item; + gboolean active; - g_return_val_if_fail (GTK_IS_CHECK_MENU_ITEM (widget), NULL); - - if (gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget))) - return gail_check_sub_menu_item_new (widget); - - object = g_object_new (GAIL_TYPE_CHECK_MENU_ITEM, NULL); + check_menu_item = GTK_CHECK_MENU_ITEM (widget); + active = gtk_check_menu_item_get_active (check_menu_item); - accessible = ATK_OBJECT (object); - atk_object_initialize (accessible, widget); - - return accessible; + accessible = gtk_widget_get_accessible (widget); + atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, active); } static void -gail_check_menu_item_real_initialize (AtkObject *obj, - gpointer data) +gtk_check_menu_item_accessible_initialize (AtkObject *obj, + gpointer data) { - ATK_OBJECT_CLASS (gail_check_menu_item_parent_class)->initialize (obj, data); + ATK_OBJECT_CLASS (gtk_check_menu_item_accessible_parent_class)->initialize (obj, data); - g_signal_connect (data, - "toggled", - G_CALLBACK (gail_check_menu_item_toggled_gtk), - NULL); + g_signal_connect (data, "toggled", G_CALLBACK (toggled_cb), NULL); obj->role = ATK_ROLE_CHECK_MENU_ITEM; } -static void -gail_check_menu_item_toggled_gtk (GtkWidget *widget) -{ - AtkObject *accessible; - GtkCheckMenuItem *check_menu_item; - - check_menu_item = GTK_CHECK_MENU_ITEM (widget); - - accessible = gtk_widget_get_accessible (widget); - atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, - gtk_check_menu_item_get_active (check_menu_item)); -} - -static AtkStateSet* -gail_check_menu_item_ref_state_set (AtkObject *accessible) +static AtkStateSet * +gtk_check_menu_item_accessible_ref_state_set (AtkObject *accessible) { AtkStateSet *state_set; GtkCheckMenuItem *check_menu_item; GtkWidget *widget; - state_set = ATK_OBJECT_CLASS (gail_check_menu_item_parent_class)->ref_state_set (accessible); widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return state_set; + return NULL; + + state_set = ATK_OBJECT_CLASS (gtk_check_menu_item_accessible_parent_class)->ref_state_set (accessible); check_menu_item = GTK_CHECK_MENU_ITEM (widget); @@ -126,13 +73,13 @@ gail_check_menu_item_ref_state_set (AtkObject *accessible) atk_state_set_remove_state (state_set, ATK_STATE_ENABLED); atk_state_set_add_state (state_set, ATK_STATE_INDETERMINATE); } - + return state_set; } static void -gail_check_menu_item_real_notify_gtk (GObject *obj, - GParamSpec *pspec) +gtk_check_menu_item_accessible_notify_gtk (GObject *obj, + GParamSpec *pspec) { GtkCheckMenuItem *check_menu_item = GTK_CHECK_MENU_ITEM (obj); AtkObject *atk_obj; @@ -155,5 +102,22 @@ gail_check_menu_item_real_notify_gtk (GObject *obj, atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED, (sensitive && !inconsistent)); } else - GAIL_WIDGET_CLASS (gail_check_menu_item_parent_class)->notify_gtk (obj, pspec); + GAIL_WIDGET_CLASS (gtk_check_menu_item_accessible_parent_class)->notify_gtk (obj, pspec); +} + +static void +gtk_check_menu_item_accessible_class_init (GtkCheckMenuItemAccessibleClass *klass) +{ + GailWidgetClass *widget_class = (GailWidgetClass*)klass; + AtkObjectClass *class = ATK_OBJECT_CLASS (klass); + + widget_class->notify_gtk = gtk_check_menu_item_accessible_notify_gtk; + + class->ref_state_set = gtk_check_menu_item_accessible_ref_state_set; + class->initialize = gtk_check_menu_item_accessible_initialize; +} + +static void +gtk_check_menu_item_accessible_init (GtkCheckMenuItemAccessible *item) +{ } diff --git a/gtk/a11y/gtkcheckmenuitemaccessible.h b/gtk/a11y/gtkcheckmenuitemaccessible.h new file mode 100644 index 000000000..8749030df --- /dev/null +++ b/gtk/a11y/gtkcheckmenuitemaccessible.h @@ -0,0 +1,51 @@ +/* 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_CHECK_MENU_ITEM_ACCESSIBLE_H__ +#define __GTK_CHECK_MENU_ITEM_ACCESSIBLE_H__ + +#include "gailmenuitem.h" + +G_BEGIN_DECLS + +#define GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE (gtk_check_menu_item_accessible_get_type ()) +#define GTK_CHECK_MENU_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE, GtkCheckMenuItemAccessible)) +#define GTK_CHECK_MENU_ITEM_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE, GtkCheckMenuItemAccessibleClass)) +#define GTK_IS_CHECK_MENU_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE)) +#define GTK_IS_CHECK_MENU_ITEM_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE)) +#define GTK_CHECK_MENU_ITEM_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE, GtkCheckMenuItemAccessibleClass)) + +typedef struct _GtkCheckMenuItemAccessible GtkCheckMenuItemAccessible; +typedef struct _GtkCheckMenuItemAccessibleClass GtkCheckMenuItemAccessibleClass; + +struct _GtkCheckMenuItemAccessible +{ + GailMenuItem parent; +}; + +struct _GtkCheckMenuItemAccessibleClass +{ + GailMenuItemClass parent_class; +}; + +GType gtk_check_menu_item_accessible_get_type (void); + +G_END_DECLS + +#endif /* __GTK_CHECK_MENU_ITEM_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gailchecksubmenuitem.c b/gtk/a11y/gtkchecksubmenuitemaccessible.c similarity index 52% rename from gtk/a11y/gailchecksubmenuitem.c rename to gtk/a11y/gtkchecksubmenuitemaccessible.c index a9e22f551..fe6681b87 100644 --- a/gtk/a11y/gailchecksubmenuitem.c +++ b/gtk/a11y/gtkchecksubmenuitemaccessible.c @@ -21,97 +21,48 @@ #include #include -#include "gailchecksubmenuitem.h" +#include "gtkchecksubmenuitemaccessible.h" -static void gail_check_sub_menu_item_class_init (GailCheckSubMenuItemClass *klass); -static void gail_check_sub_menu_item_init (GailCheckSubMenuItem *item); - -static void gail_check_sub_menu_item_toggled_gtk (GtkWidget *widget); - -static void gail_check_sub_menu_item_real_notify_gtk (GObject *obj, - GParamSpec *pspec); - -static void gail_check_sub_menu_item_real_initialize (AtkObject *obj, - gpointer data); - -static AtkStateSet* gail_check_sub_menu_item_ref_state_set (AtkObject *accessible); - -G_DEFINE_TYPE (GailCheckSubMenuItem, gail_check_sub_menu_item, GAIL_TYPE_SUB_MENU_ITEM) +G_DEFINE_TYPE (GtkCheckSubmenuItemAccessible, gtk_check_submenu_item_accessible, GAIL_TYPE_SUB_MENU_ITEM) static void -gail_check_sub_menu_item_class_init (GailCheckSubMenuItemClass *klass) +toggled_cb (GtkWidget *widget) { - GailWidgetClass *widget_class; - AtkObjectClass *class = ATK_OBJECT_CLASS (klass); - - widget_class = (GailWidgetClass*)klass; - widget_class->notify_gtk = gail_check_sub_menu_item_real_notify_gtk; - - class->ref_state_set = gail_check_sub_menu_item_ref_state_set; - class->initialize = gail_check_sub_menu_item_real_initialize; -} - -static void -gail_check_sub_menu_item_init (GailCheckSubMenuItem *item) -{ -} - -AtkObject* -gail_check_sub_menu_item_new (GtkWidget *widget) -{ - GObject *object; AtkObject *accessible; + GtkCheckMenuItem *check_menu_item; + gboolean active; - g_return_val_if_fail (GTK_IS_CHECK_MENU_ITEM (widget), NULL); - - object = g_object_new (GAIL_TYPE_CHECK_SUB_MENU_ITEM, NULL); - - accessible = ATK_OBJECT (object); - atk_object_initialize (accessible, widget); + check_menu_item = GTK_CHECK_MENU_ITEM (widget); + active = gtk_check_menu_item_get_active (check_menu_item); - return accessible; + accessible = gtk_widget_get_accessible (widget); + atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, active); } static void -gail_check_sub_menu_item_real_initialize (AtkObject *obj, - gpointer data) +gtk_check_submenu_item_accessible_initialize (AtkObject *obj, + gpointer data) { - ATK_OBJECT_CLASS (gail_check_sub_menu_item_parent_class)->initialize (obj, data); + ATK_OBJECT_CLASS (gtk_check_submenu_item_accessible_parent_class)->initialize (obj, data); - g_signal_connect (data, - "toggled", - G_CALLBACK (gail_check_sub_menu_item_toggled_gtk), - NULL); + g_signal_connect (data, "toggled", G_CALLBACK (toggled_cb), NULL); obj->role = ATK_ROLE_CHECK_MENU_ITEM; } -static void -gail_check_sub_menu_item_toggled_gtk (GtkWidget *widget) -{ - AtkObject *accessible; - GtkCheckMenuItem *check_menu_item; - - check_menu_item = GTK_CHECK_MENU_ITEM (widget); - - accessible = gtk_widget_get_accessible (widget); - atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, - gtk_check_menu_item_get_active (check_menu_item)); -} - -static AtkStateSet* -gail_check_sub_menu_item_ref_state_set (AtkObject *accessible) +static AtkStateSet * +gtk_check_submenu_item_accessible_ref_state_set (AtkObject *accessible) { AtkStateSet *state_set; GtkCheckMenuItem *check_menu_item; GtkWidget *widget; - state_set = ATK_OBJECT_CLASS (gail_check_sub_menu_item_parent_class)->ref_state_set (accessible); widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible)); - if (widget == NULL) - return state_set; + return NULL; + + state_set = ATK_OBJECT_CLASS (gtk_check_submenu_item_accessible_parent_class)->ref_state_set (accessible); check_menu_item = GTK_CHECK_MENU_ITEM (widget); @@ -123,13 +74,13 @@ gail_check_sub_menu_item_ref_state_set (AtkObject *accessible) atk_state_set_remove_state (state_set, ATK_STATE_ENABLED); atk_state_set_add_state (state_set, ATK_STATE_INDETERMINATE); } - + return state_set; } static void -gail_check_sub_menu_item_real_notify_gtk (GObject *obj, - GParamSpec *pspec) +gtk_check_submenu_item_accessible_notify_gtk (GObject *obj, + GParamSpec *pspec) { GtkCheckMenuItem *check_menu_item = GTK_CHECK_MENU_ITEM (obj); AtkObject *atk_obj; @@ -152,5 +103,22 @@ gail_check_sub_menu_item_real_notify_gtk (GObject *obj, atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED, (sensitive && !inconsistent)); } else - GAIL_WIDGET_CLASS (gail_check_sub_menu_item_parent_class)->notify_gtk (obj, pspec); + GAIL_WIDGET_CLASS (gtk_check_submenu_item_accessible_parent_class)->notify_gtk (obj, pspec); +} + +static void +gtk_check_submenu_item_accessible_class_init (GtkCheckSubmenuItemAccessibleClass *klass) +{ + AtkObjectClass *class = ATK_OBJECT_CLASS (klass); + GailWidgetClass *widget_class = (GailWidgetClass*)klass; + + widget_class->notify_gtk = gtk_check_submenu_item_accessible_notify_gtk; + + class->ref_state_set = gtk_check_submenu_item_accessible_ref_state_set; + class->initialize = gtk_check_submenu_item_accessible_initialize; +} + +static void +gtk_check_submenu_item_accessible_init (GtkCheckSubmenuItemAccessible *item) +{ } diff --git a/gtk/a11y/gtkchecksubmenuitemaccessible.h b/gtk/a11y/gtkchecksubmenuitemaccessible.h new file mode 100644 index 000000000..91065fcf1 --- /dev/null +++ b/gtk/a11y/gtkchecksubmenuitemaccessible.h @@ -0,0 +1,51 @@ +/* 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_CHECK_SUBMENU_ITEM_ACCESSIBLE_H__ +#define __GTK_CHECK_SUBMENU_ITEM_ACCESSIBLE_H__ + +#include "gailsubmenuitem.h" + +G_BEGIN_DECLS + +#define GTK_TYPE_CHECK_SUBMENU_ITEM_ACCESSIBLE (gtk_check_submenu_item_accessible_get_type ()) +#define GTK_CHECK_SUBMENU_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CHECK_SUBMENU_ITEM_ACCESSIBLE, GtkCheckSubmenuItemAccessible)) +#define GTK_CHECK_SUBMENU_ITEM_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CHECK_SUBMENU_ITEM_ACCESSIBLE, GtkCheckSubmenuItemAccessibleClass)) +#define GTK_IS_CHECK_SUBMENU_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CHECK_SUBMENU_ITEM_ACCESSIBLE)) +#define GTK_IS_CHECK_SUBMENU_ITEM_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CHECK_SUBMENU_ITEM_ACCESSIBLE)) +#define GTK_CHECK_SUBMENU_ITEM_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CHECK_SUBMENU_ITEM_ACCESSIBLE, GtkCheckSubmenuItemAccessibleClass)) + +typedef struct _GtkCheckSubmenuItemAccessible GtkCheckSubmenuItemAccessible; +typedef struct _GtkCheckSubmenuItemAccessibleClass GtkCheckSubmenuItemAccessibleClass; + +struct _GtkCheckSubmenuItemAccessible +{ + GailSubMenuItem parent; +}; + +struct _GtkCheckSubmenuItemAccessibleClass +{ + GailSubMenuItemClass parent_class; +}; + +GType gtk_check_submenu_item_accessible_get_type (void); + +G_END_DECLS + +#endif /* __GTK_CHECK_SUBMENU_ITEM_ACCESSIBLE_H__ */ diff --git a/gtk/a11y/gtkradiomenuitemaccessible.c b/gtk/a11y/gtkradiomenuitemaccessible.c index 330fd9bb2..3c1ad4c4c 100644 --- a/gtk/a11y/gtkradiomenuitemaccessible.c +++ b/gtk/a11y/gtkradiomenuitemaccessible.c @@ -24,7 +24,7 @@ #include "gtkradiosubmenuitemaccessible.h" -G_DEFINE_TYPE (GtkRadioMenuItemAccessible, gtk_radio_menu_item_accessible, GAIL_TYPE_CHECK_MENU_ITEM) +G_DEFINE_TYPE (GtkRadioMenuItemAccessible, gtk_radio_menu_item_accessible, GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE) AtkRelationSet * gtk_radio_menu_item_accessible_ref_relation_set (AtkObject *obj) @@ -88,12 +88,22 @@ gtk_radio_menu_item_accessible_ref_relation_set (AtkObject *obj) return relation_set; } +static void +gtk_radio_menu_item_accessible_initialize (AtkObject *obj, + gpointer data) +{ + ATK_OBJECT_CLASS (gtk_radio_menu_item_accessible_parent_class)->initialize (obj, data); + + obj->role = ATK_ROLE_RADIO_MENU_ITEM; +} + 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; + class->initialize = gtk_radio_menu_item_accessible_initialize; } static void diff --git a/gtk/a11y/gtkradiomenuitemaccessible.h b/gtk/a11y/gtkradiomenuitemaccessible.h index 2efcf0a2e..b174fd74e 100644 --- a/gtk/a11y/gtkradiomenuitemaccessible.h +++ b/gtk/a11y/gtkradiomenuitemaccessible.h @@ -20,7 +20,7 @@ #ifndef __GTK_RADIO_MENU_ITEM_ACCESSIBLE_H__ #define __GTK_RADIO_MENU_ITEM_ACCESSIBLE_H__ -#include "gailcheckmenuitem.h" +#include "gtkcheckmenuitemaccessible.h" G_BEGIN_DECLS @@ -36,14 +36,14 @@ typedef struct _GtkRadioMenuItemAccessibleClass GtkRadioMenuItemAccessibleClass; struct _GtkRadioMenuItemAccessible { - GailCheckMenuItem parent; + GtkCheckMenuItemAccessible parent; GSList *old_group; }; struct _GtkRadioMenuItemAccessibleClass { - GailCheckMenuItemClass parent_class; + GtkCheckMenuItemAccessibleClass parent_class; }; GType gtk_radio_menu_item_accessible_get_type (void); diff --git a/gtk/a11y/gtkradiosubmenuitemaccessible.c b/gtk/a11y/gtkradiosubmenuitemaccessible.c index 27e76ebab..1e037c45e 100644 --- a/gtk/a11y/gtkradiosubmenuitemaccessible.c +++ b/gtk/a11y/gtkradiosubmenuitemaccessible.c @@ -23,7 +23,7 @@ #include "gtkradiosubmenuitemaccessible.h" -G_DEFINE_TYPE (GtkRadioSubmenuItemAccessible, gtk_radio_submenu_item_accessible, GAIL_TYPE_CHECK_SUB_MENU_ITEM) +G_DEFINE_TYPE (GtkRadioSubmenuItemAccessible, gtk_radio_submenu_item_accessible, GTK_TYPE_CHECK_SUBMENU_ITEM_ACCESSIBLE) AtkRelationSet * @@ -87,12 +87,23 @@ gtk_radio_submenu_item_accessible_ref_relation_set (AtkObject *obj) return relation_set; } + +static void +gtk_radio_submenu_item_accessible_initialize (AtkObject *obj, + gpointer data) +{ + ATK_OBJECT_CLASS (gtk_radio_submenu_item_accessible_parent_class)->initialize (obj, data); + + obj->role = ATK_ROLE_RADIO_MENU_ITEM; +} + 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; + class->initialize = gtk_radio_submenu_item_accessible_initialize; } static void diff --git a/gtk/a11y/gtkradiosubmenuitemaccessible.h b/gtk/a11y/gtkradiosubmenuitemaccessible.h index f614df3ff..70666ce2a 100644 --- a/gtk/a11y/gtkradiosubmenuitemaccessible.h +++ b/gtk/a11y/gtkradiosubmenuitemaccessible.h @@ -20,7 +20,7 @@ #ifndef __GTK_RADIO_SUBMENU_ITEM_ACCESSIBLE_H__ #define __GTK_RADIO_SUBMENU_ITEM_ACCESSIBLE_H__ -#include "gailchecksubmenuitem.h" +#include "gtkchecksubmenuitemaccessible.h" G_BEGIN_DECLS @@ -36,14 +36,14 @@ typedef struct _GtkRadioSubmenuItemAccessibleClass GtkRadioSubmenuItemAccessible struct _GtkRadioSubmenuItemAccessible { - GailCheckSubMenuItem parent; + GtkCheckSubmenuItemAccessible parent; GSList *old_group; }; struct _GtkRadioSubmenuItemAccessibleClass { - GailCheckSubMenuItemClass parent_class; + GtkCheckSubmenuItemAccessibleClass parent_class; }; GType gtk_radio_submenu_item_accessible_get_type (void); diff --git a/gtk/gtkcheckmenuitem.c b/gtk/gtkcheckmenuitem.c index 614e15d95..27465f503 100644 --- a/gtk/gtkcheckmenuitem.c +++ b/gtk/gtkcheckmenuitem.c @@ -33,7 +33,8 @@ #include "gtkmarshalers.h" #include "gtkprivate.h" #include "gtkintl.h" - +#include "a11y/gtkcheckmenuitemaccessible.h" +#include "a11y/gtkchecksubmenuitemaccessible.h" /** * SECTION:gtkcheckmenuitem @@ -102,6 +103,24 @@ G_DEFINE_TYPE_WITH_CODE (GtkCheckMenuItem, gtk_check_menu_item, GTK_TYPE_MENU_IT G_IMPLEMENT_INTERFACE (GTK_TYPE_ACTIVATABLE, gtk_check_menu_item_activatable_interface_init)) +static AtkObject * +gtk_check_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_CHECK_SUBMENU_ITEM_ACCESSIBLE, NULL); + else + object = g_object_new (GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE, NULL); + + accessible = ATK_OBJECT (object); + atk_object_initialize (accessible, widget); + + return accessible; +} + static void gtk_check_menu_item_class_init (GtkCheckMenuItemClass *klass) { @@ -150,7 +169,8 @@ gtk_check_menu_item_class_init (GtkCheckMenuItemClass *klass) GTK_PARAM_READABLE)); widget_class->draw = gtk_check_menu_item_draw; - + widget_class->get_accessible = gtk_check_menu_item_get_accessible; + menu_item_class->activate = gtk_check_menu_item_activate; menu_item_class->hide_on_activate = FALSE; menu_item_class->toggle_size_request = gtk_check_menu_item_toggle_size_request; diff --git a/gtk/gtkradiomenuitem.c b/gtk/gtkradiomenuitem.c index af2ab5f52..a17a0ee2e 100644 --- a/gtk/gtkradiomenuitem.c +++ b/gtk/gtkradiomenuitem.c @@ -409,8 +409,6 @@ gtk_radio_menu_item_get_accessible (GtkWidget *widget) accessible = ATK_OBJECT (object); atk_object_initialize (accessible, widget); - accessible->role = ATK_ROLE_RADIO_MENU_ITEM; - return accessible; } -- 2.43.2