Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit e7020a6

Browse files
authored
[Linux] add missing AtkObject::get_index_in_parent implementation (#32499)
1 parent 98754a6 commit e7020a6

File tree

4 files changed

+24
-6
lines changed

4 files changed

+24
-6
lines changed

shell/platform/linux/fl_accessible_node.cc

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ struct _FlAccessibleNode {
7171

7272
int32_t id;
7373
gchar* name;
74+
gint index;
7475
gint x, y, width, height;
7576
GPtrArray* actions;
7677
gsize actions_length;
@@ -164,6 +165,12 @@ static AtkObject* fl_accessible_node_get_parent(AtkObject* accessible) {
164165
return self->parent;
165166
}
166167

168+
// Implements AtkObject::get_index_in_parent.
169+
static gint fl_accessible_node_get_index_in_parent(AtkObject* accessible) {
170+
FlAccessibleNode* self = FL_ACCESSIBLE_NODE(accessible);
171+
return self->index;
172+
}
173+
167174
// Implements AtkObject::get_n_children.
168175
static gint fl_accessible_node_get_n_children(AtkObject* accessible) {
169176
FlAccessibleNode* self = FL_ACCESSIBLE_NODE(accessible);
@@ -309,6 +316,8 @@ static void fl_accessible_node_class_init(FlAccessibleNodeClass* klass) {
309316
G_OBJECT_CLASS(klass)->dispose = fl_accessible_node_dispose;
310317
ATK_OBJECT_CLASS(klass)->get_name = fl_accessible_node_get_name;
311318
ATK_OBJECT_CLASS(klass)->get_parent = fl_accessible_node_get_parent;
319+
ATK_OBJECT_CLASS(klass)->get_index_in_parent =
320+
fl_accessible_node_get_index_in_parent;
312321
ATK_OBJECT_CLASS(klass)->get_n_children = fl_accessible_node_get_n_children;
313322
ATK_OBJECT_CLASS(klass)->ref_child = fl_accessible_node_ref_child;
314323
ATK_OBJECT_CLASS(klass)->get_role = fl_accessible_node_get_role;
@@ -346,9 +355,12 @@ FlAccessibleNode* fl_accessible_node_new(FlEngine* engine, int32_t id) {
346355
return self;
347356
}
348357

349-
void fl_accessible_node_set_parent(FlAccessibleNode* self, AtkObject* parent) {
358+
void fl_accessible_node_set_parent(FlAccessibleNode* self,
359+
AtkObject* parent,
360+
gint index) {
350361
g_return_if_fail(FL_IS_ACCESSIBLE_NODE(self));
351362
self->parent = parent;
363+
self->index = index;
352364
g_object_add_weak_pointer(G_OBJECT(self),
353365
reinterpret_cast<gpointer*>(&(self->parent)));
354366
}

shell/platform/linux/fl_accessible_node.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,13 @@ FlAccessibleNode* fl_accessible_node_new(FlEngine* engine, int32_t id);
4545
* fl_accessible_node_new:
4646
* @node: an #FlAccessibleNode.
4747
* @parent: an #AtkObject.
48+
* @index: the index of this node in the parent.
4849
*
4950
* Sets the parent of this node. The parent can be changed at any time.
5051
*/
51-
void fl_accessible_node_set_parent(FlAccessibleNode* node, AtkObject* parent);
52+
void fl_accessible_node_set_parent(FlAccessibleNode* node,
53+
AtkObject* parent,
54+
gint index);
5255

5356
/**
5457
* fl_accessible_node_new:

shell/platform/linux/fl_accessible_node_test.cc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,17 @@ TEST(FlAccessibleNodeTest, BuildTree) {
1414

1515
g_autoptr(FlAccessibleNode) root = fl_accessible_node_new(engine, 0);
1616
g_autoptr(FlAccessibleNode) child1 = fl_accessible_node_new(engine, 1);
17-
fl_accessible_node_set_parent(child1, ATK_OBJECT(root));
17+
fl_accessible_node_set_parent(child1, ATK_OBJECT(root), 0);
1818
g_autoptr(FlAccessibleNode) child2 = fl_accessible_node_new(engine, 1);
19-
fl_accessible_node_set_parent(child2, ATK_OBJECT(root));
19+
fl_accessible_node_set_parent(child2, ATK_OBJECT(root), 1);
2020
g_autoptr(GPtrArray) children =
2121
g_ptr_array_new_with_free_func(g_object_unref);
2222
g_ptr_array_add(children, g_object_ref(child1));
2323
g_ptr_array_add(children, g_object_ref(child2));
2424
fl_accessible_node_set_children(root, children);
2525

2626
EXPECT_EQ(atk_object_get_n_accessible_children(ATK_OBJECT(root)), 2);
27+
EXPECT_EQ(atk_object_get_index_in_parent(ATK_OBJECT(root)), 0);
2728
g_autoptr(AtkObject) c1 =
2829
atk_object_ref_accessible_child(ATK_OBJECT(root), 0);
2930
EXPECT_EQ(ATK_OBJECT(child1), c1);
@@ -33,9 +34,11 @@ TEST(FlAccessibleNodeTest, BuildTree) {
3334
EXPECT_EQ(atk_object_get_parent(ATK_OBJECT(root)), nullptr);
3435

3536
EXPECT_EQ(atk_object_get_parent(ATK_OBJECT(child1)), ATK_OBJECT(root));
37+
EXPECT_EQ(atk_object_get_index_in_parent(ATK_OBJECT(child1)), 0);
3638
EXPECT_EQ(atk_object_get_n_accessible_children(ATK_OBJECT(child1)), 0);
3739

3840
EXPECT_EQ(atk_object_get_parent(ATK_OBJECT(child2)), ATK_OBJECT(root));
41+
EXPECT_EQ(atk_object_get_index_in_parent(ATK_OBJECT(child2)), 1);
3942
EXPECT_EQ(atk_object_get_n_accessible_children(ATK_OBJECT(child2)), 0);
4043
}
4144

shell/platform/linux/fl_view_accessible.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ static FlAccessibleNode* get_node(FlViewAccessible* self, int32_t id) {
2929
FlView* view = FL_VIEW(gtk_accessible_get_widget(GTK_ACCESSIBLE(self)));
3030
node = fl_accessible_node_new(fl_view_get_engine(view), id);
3131
if (id == 0) {
32-
fl_accessible_node_set_parent(node, ATK_OBJECT(self));
32+
fl_accessible_node_set_parent(node, ATK_OBJECT(self), 0);
3333
}
3434
g_hash_table_insert(self->semantics_nodes_by_id, GINT_TO_POINTER(id),
3535
reinterpret_cast<gpointer>(node));
@@ -91,7 +91,7 @@ void fl_view_accessible_handle_update_semantics_node(
9191
for (size_t i = 0; i < node->child_count; i++) {
9292
FlAccessibleNode* child =
9393
get_node(self, node->children_in_traversal_order[i]);
94-
fl_accessible_node_set_parent(child, ATK_OBJECT(atk_node));
94+
fl_accessible_node_set_parent(child, ATK_OBJECT(atk_node), i);
9595
g_ptr_array_add(children, child);
9696
}
9797
fl_accessible_node_set_children(atk_node, children);

0 commit comments

Comments
 (0)