]> Pileus Git - ~andy/gtk/commitdiff
GtkMenuItemAccessible: implement selectable/selected states
authorMatthias Clasen <mclasen@redhat.com>
Tue, 18 Dec 2012 04:58:24 +0000 (23:58 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 18 Dec 2012 04:58:24 +0000 (23:58 -0500)
The automatic handling for this was removed in atk, so
we need to do it ourselves now.

gtk/a11y/gtkmenuitemaccessible.c

index 2e5a4369e599c67f354b88a5c82abcd9b31904a2..43896395724476a1cc8dd1f22f6f4b960eb7c7b3 100644 (file)
@@ -23,6 +23,7 @@
 struct _GtkMenuItemAccessiblePrivate
 {
   gchar *text;
+  gboolean selected;
 };
 
 #define KEYBINDING_SEPARATOR ";"
@@ -147,6 +148,10 @@ gtk_menu_item_accessible_ref_state_set (AtkObject *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);
 
   if (menu_item)
@@ -620,6 +625,7 @@ menu_item_selection (GtkMenuItem  *item,
   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++)