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
parent 3349996af5
commit d60630ea8d

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--;