[gtk+] a11y: Split out renderer<->atk state matching
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] a11y: Split out renderer<->atk state matching
- Date: Fri, 16 Dec 2011 03:56:43 +0000 (UTC)
commit 90f04b56a700e43ccc45717226c25e627977f93b
Author: Benjamin Otte <otte redhat com>
Date: Sun Dec 11 05:02:36 2011 +0100
a11y: Split out renderer<->atk state matching
We now keep a state map. This makes adding new states easier, and
doesn't introduce bugs with state change emissions.
gtk/a11y/gtkcellaccessible.c | 53 ++++++++++++++++++++++-------------------
1 files changed, 28 insertions(+), 25 deletions(-)
---
diff --git a/gtk/a11y/gtkcellaccessible.c b/gtk/a11y/gtkcellaccessible.c
index eda4518..a4f1792 100644
--- a/gtk/a11y/gtkcellaccessible.c
+++ b/gtk/a11y/gtkcellaccessible.c
@@ -32,6 +32,20 @@ struct _ActionInfo {
void (*do_action_func) (GtkCellAccessible *cell);
};
+static const struct {
+ AtkState atk_state;
+ GtkCellRendererState renderer_state;
+ gboolean invert;
+} state_map[] = {
+ { ATK_STATE_SENSITIVE, GTK_CELL_RENDERER_INSENSITIVE, TRUE },
+ { ATK_STATE_ENABLED, GTK_CELL_RENDERER_INSENSITIVE, TRUE },
+ { ATK_STATE_SELECTED, GTK_CELL_RENDERER_SELECTED, FALSE },
+ /* XXX: why do we map ACTIVE here? */
+ { ATK_STATE_ACTIVE, GTK_CELL_RENDERER_FOCUSED, FALSE },
+ { ATK_STATE_FOCUSED, GTK_CELL_RENDERER_FOCUSED, FALSE },
+ { ATK_STATE_EXPANDABLE,GTK_CELL_RENDERER_EXPANDABLE, FALSE },
+ { ATK_STATE_EXPANDED, GTK_CELL_RENDERER_EXPANDED, FALSE },
+};
static void atk_action_interface_init (AtkActionIface *iface);
static void atk_component_interface_init (AtkComponentIface *iface);
@@ -109,6 +123,7 @@ gtk_cell_accessible_ref_state_set (AtkObject *accessible)
GtkCellAccessible *cell_accessible;
AtkStateSet *state_set;
GtkCellRendererState flags;
+ guint i;
cell_accessible = GTK_CELL_ACCESSIBLE (accessible);
@@ -123,38 +138,26 @@ gtk_cell_accessible_ref_state_set (AtkObject *accessible)
flags = _gtk_cell_accessible_get_state (cell_accessible);
atk_state_set_add_state (state_set, ATK_STATE_TRANSIENT);
+ atk_state_set_add_state (state_set, ATK_STATE_SELECTABLE);
+ atk_state_set_add_state (state_set, ATK_STATE_VISIBLE);
- if (!(flags & GTK_CELL_RENDERER_INSENSITIVE))
+ for (i = 0; i < G_N_ELEMENTS (state_map); i++)
{
- atk_state_set_add_state (state_set, ATK_STATE_SENSITIVE);
- atk_state_set_add_state (state_set, ATK_STATE_ENABLED);
+ if (flags & state_map[i].renderer_state)
+ {
+ if (!state_map[i].invert)
+ atk_state_set_add_state (state_set, state_map[i].atk_state);
+ }
+ else
+ {
+ if (state_map[i].invert)
+ atk_state_set_add_state (state_set, state_map[i].atk_state);
+ }
}
- 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);
- /* 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);
- }
-
- if (flags & GTK_CELL_RENDERER_EXPANDABLE)
- atk_state_set_add_state (state_set, ATK_STATE_EXPANDABLE);
- if (flags & GTK_CELL_RENDERER_EXPANDED)
- atk_state_set_add_state (state_set, ATK_STATE_EXPANDED);
-
return state_set;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]