a11y: Fix GtkListview's selection interface implementation

When determining the number of selected children, we were properly
counting only items, but in the rest, we were confused by row headers.
Because the GtkListItemBase methods did not throw a warning on inappropriate
pointer type passed, we happily passed the row headers, got some private
data object as the wrong type, and then returned nonsense, for example, 2
for gtk_list_item_base_get_selected.
This commit is contained in:
Lukáš Tyrychtr
2024-10-15 14:25:14 +02:00
committed by Matthias Clasen
parent 13cf7c2256
commit d6ddcb5b93

View File

@@ -256,6 +256,8 @@ listview_handle_method (GDBusConnection *connection,
child;
child = gtk_widget_get_next_sibling (child))
{
if (!GTK_IS_LIST_ITEM_BASE (child))
continue;
if (gtk_list_item_base_get_selected (GTK_LIST_ITEM_BASE (child)))
{
if (idx == 0)
@@ -288,6 +290,8 @@ listview_handle_method (GDBusConnection *connection,
child;
child = gtk_widget_get_next_sibling (child))
{
if (!GTK_IS_LIST_ITEM_BASE (child))
continue;
if (idx == 0)
break;
idx--;
@@ -320,6 +324,8 @@ listview_handle_method (GDBusConnection *connection,
child;
child = gtk_widget_get_next_sibling (child))
{
if (!GTK_IS_LIST_ITEM_BASE (child))
continue;
if (idx == 0)
break;
idx--;
@@ -353,6 +359,8 @@ listview_handle_method (GDBusConnection *connection,
child;
child = gtk_widget_get_next_sibling (child))
{
if (!GTK_IS_LIST_ITEM_BASE (child))
continue;
if (gtk_list_item_base_get_selected (GTK_LIST_ITEM_BASE (child)))
{
if (idx == 0)
@@ -388,6 +396,8 @@ listview_handle_method (GDBusConnection *connection,
child;
child = gtk_widget_get_next_sibling (child))
{
if (!GTK_IS_LIST_ITEM_BASE (child))
continue;
if (idx == 0)
break;
idx--;