]> Pileus Git - ~andy/gtk/commitdiff
a11y: Implement ref_state_set using the new APIs
authorBenjamin Otte <otte@redhat.com>
Thu, 24 Nov 2011 00:59:18 +0000 (01:59 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 24 Nov 2011 17:29:45 +0000 (18:29 +0100)
Various tiny semantic changes in here.

The big fix is that we consider every cell as visible and as showing if
the treeview is mapped.
This was also fixed in the tree dump test.

gtk/a11y/gtkcellaccessible.c
gtk/a11y/gtkcellaccessible.h
gtk/a11y/gtkrenderercellaccessible.c
gtk/a11y/gtktextcellaccessible.c
tests/a11y/tree.txt

index 47c5f97314a19783e24afa24e71ada182214bbaa..802d054b81c3526e4f5598a78eebea7b1368fce5 100644 (file)
@@ -61,9 +61,6 @@ gtk_cell_accessible_object_finalize (GObject *obj)
   gpointer target_object;
   gint i;
 
-  if (cell->state_set)
-    g_object_unref (cell->state_set);
-
   if (cell->action_list)
     g_list_free_full (cell->action_list, destroy_action_info);
 
@@ -107,15 +104,62 @@ gtk_cell_accessible_get_index_in_parent (AtkObject *obj)
 }
 
 static AtkStateSet *
-gtk_cell_accessible_ref_state_set (AtkObject *obj)
+gtk_cell_accessible_ref_state_set (AtkObject *accessible)
 {
-  GtkCellAccessible *cell = GTK_CELL_ACCESSIBLE (obj);
+  GtkCellAccessible *cell_accessible;
+  AtkStateSet *state_set;
+  GtkCellRendererState flags;
+  gboolean expandable, expanded;
+
+  cell_accessible = GTK_CELL_ACCESSIBLE (accessible);
+
+  state_set = atk_state_set_new ();
+
+  if (cell_accessible->widget == NULL)
+    {
+      atk_state_set_add_state (state_set, ATK_STATE_DEFUNCT);
+      return state_set;
+    }
+
+  flags = _gtk_cell_accessible_get_state (cell_accessible, &expandable, &expanded);
+
+  atk_state_set_add_state (state_set, ATK_STATE_TRANSIENT);
+
+  if (!(flags & GTK_CELL_RENDERER_INSENSITIVE))
+    {
+      atk_state_set_add_state (state_set, ATK_STATE_SENSITIVE);
+      atk_state_set_add_state (state_set, ATK_STATE_ENABLED);
+    }
+
+  atk_state_set_add_state (state_set, ATK_STATE_SELECTABLE);
+  if (flags & GTK_CELL_RENDERER_SELECTED)
+    atk_state_set_add_state (state_set, ATK_STATE_SELECTED);
+
+  atk_state_set_add_state (state_set, ATK_STATE_VISIBLE);
+  if (gtk_widget_get_mapped (cell_accessible->widget))
+    atk_state_set_add_state (state_set, ATK_STATE_SHOWING);
 
-  g_object_ref (cell->state_set);
+  /* This is not completely right. We should be tracking the
+   * focussed cell renderer, but that involves diving into
+   * cell areas...
+   */
+  atk_state_set_add_state (state_set, ATK_STATE_FOCUSABLE);
+  if (flags & GTK_CELL_RENDERER_FOCUSED)
+    {
+      /* XXX: Why do we set ACTIVE here? */
+      atk_state_set_add_state (state_set, ATK_STATE_ACTIVE);
+      atk_state_set_add_state (state_set, ATK_STATE_FOCUSED);
+    }
 
-  return cell->state_set;
+  if (expandable)
+    atk_state_set_add_state (state_set, ATK_STATE_EXPANDABLE);
+  if (expanded)
+    atk_state_set_add_state (state_set, ATK_STATE_EXPANDED);
+  
+  return state_set;
 }
 
+
 static void
 _gtk_cell_accessible_class_init (GtkCellAccessibleClass *klass)
 {
@@ -133,11 +177,6 @@ _gtk_cell_accessible_init (GtkCellAccessible *cell)
 {
   cell->widget = NULL;
   cell->action_list = NULL;
-  cell->state_set = atk_state_set_new ();
-  atk_state_set_add_state (cell->state_set, ATK_STATE_TRANSIENT);
-  atk_state_set_add_state (cell->state_set, ATK_STATE_ENABLED);
-  atk_state_set_add_state (cell->state_set, ATK_STATE_SENSITIVE);
-  atk_state_set_add_state (cell->state_set, ATK_STATE_SELECTABLE);
 }
 
 static void
@@ -164,14 +203,8 @@ _gtk_cell_accessible_add_state (GtkCellAccessible *cell,
                                 AtkStateType       state_type,
                                 gboolean           emit_signal)
 {
-  gboolean rc;
   AtkObject *parent;
 
-  if (atk_state_set_contains_state (cell->state_set, state_type))
-    return FALSE;
-
-  rc = atk_state_set_add_state (cell->state_set, state_type);
-
   /* The signal should only be generated if the value changed,
    * not when the cell is set up. So states that are set
    * initially should pass FALSE as the emit_signal argument.
@@ -191,7 +224,7 @@ _gtk_cell_accessible_add_state (GtkCellAccessible *cell,
   if (GTK_IS_CONTAINER_CELL_ACCESSIBLE (parent))
     _gtk_cell_accessible_add_state (GTK_CELL_ACCESSIBLE (parent), state_type, emit_signal);
 
-  return rc;
+  return TRUE;
 }
 
 gboolean
@@ -199,16 +232,10 @@ _gtk_cell_accessible_remove_state (GtkCellAccessible *cell,
                                    AtkStateType       state_type,
                                    gboolean           emit_signal)
 {
-  gboolean rc;
   AtkObject *parent;
 
-  if (!atk_state_set_contains_state (cell->state_set, state_type))
-    return FALSE;
-
   parent = atk_object_get_parent (ATK_OBJECT (cell));
 
-  rc = atk_state_set_remove_state (cell->state_set, state_type);
-
   /* The signal should only be generated if the value changed,
    * not when the cell is set up.  So states that are set
    * initially should pass FALSE as the emit_signal argument.
@@ -227,7 +254,7 @@ _gtk_cell_accessible_remove_state (GtkCellAccessible *cell,
   if (GTK_IS_CONTAINER_CELL_ACCESSIBLE (parent))
     _gtk_cell_accessible_remove_state (GTK_CELL_ACCESSIBLE (parent), state_type, emit_signal);
 
-  return rc;
+  return TRUE;
 }
 
 gboolean
index 84cd4bff2b7f3124d76b3b64184fe28d435151ba..597f26233912e0055143feea47e80ef5d292be49 100644 (file)
@@ -39,7 +39,6 @@ struct _GtkCellAccessible
   AtkObject parent;
 
   GtkWidget    *widget;
-  AtkStateSet *state_set;
   GList       *action_list;
 };
 
index c38856d11f3ce47a8f814ccffb9e9b95373e3cee..1fa4ea0fe500663d70b026df126e0f6a30420a57 100644 (file)
@@ -25,7 +25,6 @@
 
 G_DEFINE_TYPE (GtkRendererCellAccessible, _gtk_renderer_cell_accessible, GTK_TYPE_CELL_ACCESSIBLE)
 
-
 static void
 gtk_renderer_cell_accessible_finalize (GObject *object)
 {
index c6214b994c897ace823b4aa5bd0d27c70c3d5deb..f289f931ed29319ef853b6e4c37183d9521cfe71 100644 (file)
@@ -125,6 +125,17 @@ static void atk_text_interface_init (AtkTextIface *iface);
 G_DEFINE_TYPE_WITH_CODE (GtkTextCellAccessible, _gtk_text_cell_accessible, GTK_TYPE_RENDERER_CELL_ACCESSIBLE,
                          G_IMPLEMENT_INTERFACE (ATK_TYPE_TEXT, atk_text_interface_init))
 
+static AtkStateSet *
+gtk_text_cell_accessible_ref_state_set (AtkObject *accessible)
+{
+  AtkStateSet *state_set;
+
+  state_set = ATK_OBJECT_CLASS (_gtk_text_cell_accessible_parent_class)->ref_state_set (accessible);
+
+  atk_state_set_add_state (state_set, ATK_STATE_SINGLE_LINE);
+
+  return state_set;
+}
 
 static void
 gtk_text_cell_accessible_finalize (GObject *object)
@@ -221,6 +232,7 @@ _gtk_text_cell_accessible_class_init (GtkTextCellAccessibleClass *klass)
   renderer_cell_class->property_list = property_list;
 
   atk_object_class->get_name = gtk_text_cell_accessible_get_name;
+  atk_object_class->ref_state_set = gtk_text_cell_accessible_ref_state_set;
 
   gobject_class->finalize = gtk_text_cell_accessible_finalize;
 }
@@ -231,8 +243,6 @@ _gtk_text_cell_accessible_init (GtkTextCellAccessible *text_cell)
   text_cell->cell_text = NULL;
   text_cell->caret_pos = 0;
   text_cell->cell_length = 0;
-  atk_state_set_add_state (GTK_CELL_ACCESSIBLE (text_cell)->state_set,
-                           ATK_STATE_SINGLE_LINE);
 }
 
 AtkObject *
index 8296929acb6ed2f3078f6823b4571d7dc122ec66..cefba665c7c8d07c6a219357b29d8deef078ac33 100644 (file)
@@ -66,7 +66,7 @@ window1
       parent: tree1
       index: 2
       name: One
-      state: enabled focusable focused selectable selected sensitive single-line transient visible
+      state: enabled focusable selectable selected sensitive showing single-line transient visible
       <AtkComponent>
       layer: widget
       alpha: 1
@@ -146,7 +146,7 @@ window1
       parent: tree1
       index: 4
       name: Three
-      state: enabled focusable selectable sensitive single-line transient visible
+      state: enabled focusable selectable sensitive showing single-line transient visible
       <AtkComponent>
       layer: widget
       alpha: 1
@@ -226,7 +226,7 @@ window1
       parent: tree1
       index: 6
       name: Five
-      state: enabled focusable selectable sensitive single-line transient visible
+      state: enabled focusable selectable sensitive showing single-line transient visible
       <AtkComponent>
       layer: widget
       alpha: 1
@@ -306,7 +306,7 @@ window1
       parent: tree1
       index: 8
       name: Seven
-      state: enabled focusable selectable sensitive single-line transient visible
+      state: enabled focusable selectable sensitive showing single-line transient visible
       <AtkComponent>
       layer: widget
       alpha: 1