-/* GAIL - The GNOME Accessibility Implementation Library
+/* GTK+ - accessibility implementations
* Copyright 2001, 2002, 2003 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "config.h"
+
+#include <glib/gi18n-lib.h>
#include <string.h>
#include <gtk/gtk.h>
#include "gtkmenuitemaccessible.h"
+#include "gtkwidgetaccessibleprivate.h"
#include "gtk/gtkmenuitemprivate.h"
+struct _GtkMenuItemAccessiblePrivate
+{
+ gchar *text;
+ gboolean selected;
+};
+
#define KEYBINDING_SEPARATOR ";"
static void menu_item_select (GtkMenuItem *item);
static void atk_action_interface_init (AtkActionIface *iface);
static void atk_selection_interface_init (AtkSelectionIface *iface);
-G_DEFINE_TYPE_WITH_CODE (GtkMenuItemAccessible, _gtk_menu_item_accessible, GTK_TYPE_CONTAINER_ACCESSIBLE,
+G_DEFINE_TYPE_WITH_CODE (GtkMenuItemAccessible, gtk_menu_item_accessible, GTK_TYPE_CONTAINER_ACCESSIBLE,
G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init);
G_IMPLEMENT_INTERFACE (ATK_TYPE_SELECTION, atk_selection_interface_init))
GtkWidget *parent;
GtkWidget *menu;
- ATK_OBJECT_CLASS (_gtk_menu_item_accessible_parent_class)->initialize (obj, data);
+ ATK_OBJECT_CLASS (gtk_menu_item_accessible_parent_class)->initialize (obj, data);
g_signal_connect (data, "select", G_CALLBACK (menu_item_select), NULL);
g_signal_connect (data, "deselect", G_CALLBACK (menu_item_deselect), NULL);
atk_object_set_parent (obj, gtk_widget_get_accessible (parent_widget));
}
- GTK_WIDGET_ACCESSIBLE (obj)->layer = ATK_LAYER_POPUP;
+ _gtk_widget_accessible_set_layer (GTK_WIDGET_ACCESSIBLE (obj), ATK_LAYER_POPUP);
obj->role = ATK_ROLE_MENU_ITEM;
AtkObject *menu_item;
AtkStateSet *state_set, *parent_state_set;
- state_set = ATK_OBJECT_CLASS (_gtk_menu_item_accessible_parent_class)->ref_state_set (obj);
+ state_set = ATK_OBJECT_CLASS (gtk_menu_item_accessible_parent_class)->ref_state_set (obj);
+
+ atk_state_set_add_state (state_set, ATK_STATE_SELECTABLE);
+ if (GTK_MENU_ITEM_ACCESSIBLE (obj)->priv->selected)
+ atk_state_set_add_state (state_set, ATK_STATE_SELECTED);
menu_item = atk_object_get_parent (obj);
gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget)))
return ATK_ROLE_MENU;
- return ATK_OBJECT_CLASS (_gtk_menu_item_accessible_parent_class)->get_role (obj);
+ return ATK_OBJECT_CLASS (gtk_menu_item_accessible_parent_class)->get_role (obj);
}
static const gchar *
if (widget == NULL)
return NULL;
- name = ATK_OBJECT_CLASS (_gtk_menu_item_accessible_parent_class)->get_name (obj);
+ name = ATK_OBJECT_CLASS (gtk_menu_item_accessible_parent_class)->get_name (obj);
if (name)
return name;
accessible = GTK_MENU_ITEM_ACCESSIBLE (obj);
label = get_label_from_container (widget);
- g_free (accessible->text);
- accessible->text = get_text_from_label_widget (label);
+ g_free (accessible->priv->text);
+ accessible->priv->text = get_text_from_label_widget (label);
- return accessible->text;
+ return accessible->priv->text;
}
static void
{
GtkMenuItemAccessible *accessible = GTK_MENU_ITEM_ACCESSIBLE (object);
- g_free (accessible->text);
+ g_free (accessible->priv->text);
- G_OBJECT_CLASS (_gtk_menu_item_accessible_parent_class)->finalize (object);
+ G_OBJECT_CLASS (gtk_menu_item_accessible_parent_class)->finalize (object);
}
static void
g_signal_emit_by_name (atk_obj, "visible-data-changed");
}
else
- GTK_WIDGET_ACCESSIBLE_CLASS (_gtk_menu_item_accessible_parent_class)->notify_gtk (obj, pspec);
+ GTK_WIDGET_ACCESSIBLE_CLASS (gtk_menu_item_accessible_parent_class)->notify_gtk (obj, pspec);
}
static void
-_gtk_menu_item_accessible_class_init (GtkMenuItemAccessibleClass *klass)
+gtk_menu_item_accessible_class_init (GtkMenuItemAccessibleClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
class->initialize = gtk_menu_item_accessible_initialize;
class->get_name = gtk_menu_item_accessible_get_name;
class->get_role = gtk_menu_item_accessible_get_role;
+
+ g_type_class_add_private (klass, sizeof (GtkMenuItemAccessiblePrivate));
}
static void
-_gtk_menu_item_accessible_init (GtkMenuItemAccessible *menu_item)
+gtk_menu_item_accessible_init (GtkMenuItemAccessible *menu_item)
{
+ menu_item->priv = G_TYPE_INSTANCE_GET_PRIVATE (menu_item,
+ GTK_TYPE_MENU_ITEM_ACCESSIBLE,
+ GtkMenuItemAccessiblePrivate);
}
static GtkWidget *
gtk_menu_item_accessible_action_get_name (AtkAction *action,
gint i)
{
- if (i != 0 || gtk_menu_item_accessible_get_n_actions (action) == 0)
- return NULL;
+ if (i == 0 && gtk_menu_item_accessible_get_n_actions (action) > 0)
+ return "click";
+ return NULL;
+}
- return "click";
+static const gchar *
+gtk_menu_item_accessible_action_get_localized_name (AtkAction *action,
+ gint i)
+{
+ if (i == 0 && gtk_menu_item_accessible_get_n_actions (action) > 0)
+ return C_("Action name", "Click");
+ return NULL;
+}
+
+static const gchar *
+gtk_menu_item_accessible_action_get_description (AtkAction *action,
+ gint i)
+{
+ if (i == 0 && gtk_menu_item_accessible_get_n_actions (action) > 0)
+ return C_("Action description", "Clicks the menuitem");
+ return NULL;
}
static gboolean
iface->do_action = gtk_menu_item_accessible_do_action;
iface->get_n_actions = gtk_menu_item_accessible_get_n_actions;
iface->get_name = gtk_menu_item_accessible_action_get_name;
+ iface->get_localized_name = gtk_menu_item_accessible_action_get_localized_name;
+ iface->get_description = gtk_menu_item_accessible_action_get_description;
iface->get_keybinding = gtk_menu_item_accessible_get_keybinding;
}
gint i;
obj = gtk_widget_get_accessible (GTK_WIDGET (item));
+ GTK_MENU_ITEM_ACCESSIBLE (obj)->priv->selected = selected;
atk_object_notify_state_change (obj, ATK_STATE_SELECTED, selected);
for (i = 0; i < atk_object_get_n_accessible_children (obj); i++)
parent_widget = gtk_menu_get_attach_widget (GTK_MENU (container));
if (GTK_IS_MENU_ITEM (parent_widget))
{
- GTK_CONTAINER_ACCESSIBLE_CLASS (_gtk_menu_item_accessible_parent_class)->add_gtk (container, widget, gtk_widget_get_accessible (parent_widget));
+ GTK_CONTAINER_ACCESSIBLE_CLASS (gtk_menu_item_accessible_parent_class)->add_gtk (container, widget, gtk_widget_get_accessible (parent_widget));
}
return 1;
parent_widget = gtk_menu_get_attach_widget (GTK_MENU (container));
if (GTK_IS_MENU_ITEM (parent_widget))
{
- GTK_CONTAINER_ACCESSIBLE_CLASS (_gtk_menu_item_accessible_parent_class)->remove_gtk (container, widget, gtk_widget_get_accessible (parent_widget));
+ GTK_CONTAINER_ACCESSIBLE_CLASS (gtk_menu_item_accessible_parent_class)->remove_gtk (container, widget, gtk_widget_get_accessible (parent_widget));
}
return 1;
}