forked from AuroraMiddleware/gtk
a11y: Only emit expandable/expanded for expander column
We don't want to emit state changes for all the cells in a row, just for the cell in the expander column. It's the only one that reports EXPANDED or EXPANDABLE states, after all. Also, contains refactoring of the affected functions for all the special cases. https://bugzilla.gnome.org/show_bug.cgi?id=694059
This commit is contained in:
parent
73cee58d23
commit
76670734f4
@ -1896,6 +1896,7 @@ _gtk_tree_view_accessible_add_state (GtkTreeView *treeview,
|
||||
GtkCellRendererState state)
|
||||
{
|
||||
GtkTreeViewAccessible *accessible;
|
||||
GtkTreeViewColumn *single_column;
|
||||
AtkObject *obj;
|
||||
guint i;
|
||||
|
||||
@ -1907,36 +1908,38 @@ _gtk_tree_view_accessible_add_state (GtkTreeView *treeview,
|
||||
|
||||
if (state == GTK_CELL_RENDERER_FOCUSED)
|
||||
{
|
||||
GtkTreeViewColumn *focus_column;
|
||||
|
||||
focus_column = get_effective_focus_column (treeview, _gtk_tree_view_get_focus_column (treeview));
|
||||
|
||||
if (focus_column)
|
||||
{
|
||||
GtkCellAccessible *cell;
|
||||
|
||||
cell = peek_cell (accessible, tree, node, focus_column);
|
||||
if (cell != NULL)
|
||||
_gtk_cell_accessible_state_changed (cell, 0, state);
|
||||
else
|
||||
cell = create_cell (treeview, accessible, tree, node, focus_column);
|
||||
|
||||
g_signal_emit_by_name (accessible, "active-descendant-changed", cell);
|
||||
}
|
||||
|
||||
return;
|
||||
single_column = get_effective_focus_column (treeview, _gtk_tree_view_get_focus_column (treeview));
|
||||
}
|
||||
else if (state == GTK_CELL_RENDERER_EXPANDED ||
|
||||
state == GTK_CELL_RENDERER_EXPANDABLE)
|
||||
{
|
||||
single_column = gtk_tree_view_get_expander_column (treeview);
|
||||
}
|
||||
else
|
||||
single_column = NULL;
|
||||
|
||||
for (i = 0; i < gtk_tree_view_get_n_columns (treeview); i++)
|
||||
if (single_column)
|
||||
{
|
||||
GtkCellAccessible *cell = peek_cell (accessible,
|
||||
tree, node,
|
||||
gtk_tree_view_get_column (treeview, i));
|
||||
single_column);
|
||||
|
||||
if (cell == NULL)
|
||||
continue;
|
||||
if (cell != NULL)
|
||||
_gtk_cell_accessible_state_changed (cell, state, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < gtk_tree_view_get_n_columns (treeview); i++)
|
||||
{
|
||||
GtkCellAccessible *cell = peek_cell (accessible,
|
||||
tree, node,
|
||||
gtk_tree_view_get_column (treeview, i));
|
||||
|
||||
_gtk_cell_accessible_state_changed (cell, state, 0);
|
||||
if (cell == NULL)
|
||||
continue;
|
||||
|
||||
_gtk_cell_accessible_state_changed (cell, state, 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (state == GTK_CELL_RENDERER_SELECTED)
|
||||
@ -1950,6 +1953,7 @@ _gtk_tree_view_accessible_remove_state (GtkTreeView *treeview,
|
||||
GtkCellRendererState state)
|
||||
{
|
||||
GtkTreeViewAccessible *accessible;
|
||||
GtkTreeViewColumn *single_column;
|
||||
AtkObject *obj;
|
||||
guint i;
|
||||
|
||||
@ -1961,33 +1965,38 @@ _gtk_tree_view_accessible_remove_state (GtkTreeView *treeview,
|
||||
|
||||
if (state == GTK_CELL_RENDERER_FOCUSED)
|
||||
{
|
||||
GtkTreeViewColumn *focus_column;
|
||||
|
||||
focus_column = get_effective_focus_column (treeview, _gtk_tree_view_get_focus_column (treeview));
|
||||
|
||||
if (focus_column)
|
||||
{
|
||||
GtkCellAccessible *cell = peek_cell (accessible,
|
||||
tree, node,
|
||||
focus_column);
|
||||
|
||||
if (cell != NULL)
|
||||
_gtk_cell_accessible_state_changed (cell, 0, state);
|
||||
}
|
||||
|
||||
return;
|
||||
single_column = get_effective_focus_column (treeview, _gtk_tree_view_get_focus_column (treeview));
|
||||
}
|
||||
else if (state == GTK_CELL_RENDERER_EXPANDED ||
|
||||
state == GTK_CELL_RENDERER_EXPANDABLE)
|
||||
{
|
||||
single_column = gtk_tree_view_get_expander_column (treeview);
|
||||
}
|
||||
else
|
||||
single_column = NULL;
|
||||
|
||||
for (i = 0; i < gtk_tree_view_get_n_columns (treeview); i++)
|
||||
if (single_column)
|
||||
{
|
||||
GtkCellAccessible *cell = peek_cell (accessible,
|
||||
tree, node,
|
||||
gtk_tree_view_get_column (treeview, i));
|
||||
single_column);
|
||||
|
||||
if (cell == NULL)
|
||||
continue;
|
||||
if (cell != NULL)
|
||||
_gtk_cell_accessible_state_changed (cell, 0, state);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < gtk_tree_view_get_n_columns (treeview); i++)
|
||||
{
|
||||
GtkCellAccessible *cell = peek_cell (accessible,
|
||||
tree, node,
|
||||
gtk_tree_view_get_column (treeview, i));
|
||||
|
||||
_gtk_cell_accessible_state_changed (cell, 0, state);
|
||||
if (cell == NULL)
|
||||
continue;
|
||||
|
||||
_gtk_cell_accessible_state_changed (cell, 0, state);
|
||||
}
|
||||
}
|
||||
|
||||
if (state == GTK_CELL_RENDERER_SELECTED)
|
||||
|
Loading…
Reference in New Issue
Block a user