mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-01 00:11:29 +00:00
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.
This commit is contained in:
parent
acfb3b3d88
commit
90f04b56a7
@ -32,6 +32,20 @@ struct _ActionInfo {
|
|||||||
void (*do_action_func) (GtkCellAccessible *cell);
|
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_action_interface_init (AtkActionIface *iface);
|
||||||
static void atk_component_interface_init (AtkComponentIface *iface);
|
static void atk_component_interface_init (AtkComponentIface *iface);
|
||||||
@ -109,6 +123,7 @@ gtk_cell_accessible_ref_state_set (AtkObject *accessible)
|
|||||||
GtkCellAccessible *cell_accessible;
|
GtkCellAccessible *cell_accessible;
|
||||||
AtkStateSet *state_set;
|
AtkStateSet *state_set;
|
||||||
GtkCellRendererState flags;
|
GtkCellRendererState flags;
|
||||||
|
guint i;
|
||||||
|
|
||||||
cell_accessible = GTK_CELL_ACCESSIBLE (accessible);
|
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);
|
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_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);
|
if (flags & state_map[i].renderer_state)
|
||||||
atk_state_set_add_state (state_set, ATK_STATE_ENABLED);
|
{
|
||||||
|
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))
|
if (gtk_widget_get_mapped (cell_accessible->widget))
|
||||||
atk_state_set_add_state (state_set, ATK_STATE_SHOWING);
|
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;
|
return state_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user