From 3f757c41fc97e33834885c32e1b4bb3c60b19662 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?=
<7645683+bruvzg@users.noreply.github.com>
Date: Thu, 24 Jul 2025 10:15:41 +0300
Subject: [PATCH] Update access-kit to 0.17.0
---
.github/workflows/linux_builds.yml | 10 +-
.github/workflows/macos_builds.yml | 10 +-
.github/workflows/windows_builds.yml | 10 +-
doc/classes/DisplayServer.xml | 34 +++++-
.../accessibility_driver_accesskit.cpp | 36 +++++-
scene/gui/item_list.cpp | 24 +++-
scene/gui/rich_text_label.cpp | 12 +-
scene/gui/scroll_container.cpp | 24 +++-
scene/gui/text_edit.cpp | 24 +++-
scene/gui/tree.cpp | 24 +++-
servers/display_server.cpp | 10 ++
servers/display_server.h | 16 +++
thirdparty/README.md | 2 +-
thirdparty/accesskit/include/accesskit.h | 103 ++++++++++++++++--
14 files changed, 289 insertions(+), 50 deletions(-)
diff --git a/.github/workflows/linux_builds.yml b/.github/workflows/linux_builds.yml
index 3707ae39f6d..3c7743790db 100644
--- a/.github/workflows/linux_builds.yml
+++ b/.github/workflows/linux_builds.yml
@@ -7,7 +7,7 @@ env:
SCONS_FLAGS: >-
dev_mode=yes
module_text_server_fb_enabled=yes
- "accesskit_sdk_path=${{ github.workspace }}/accesskit-c-0.16.0/"
+ "accesskit_sdk_path=${{ github.workspace }}/accesskit-c-0.17.0/"
GODOT_CPP_BRANCH: 4.4
DOTNET_NOLOGO: true
DOTNET_CLI_TELEMETRY_OPTOUT: true
@@ -162,12 +162,12 @@ jobs:
uses: dsaltares/fetch-gh-release-asset@1.1.2
with:
repo: AccessKit/accesskit-c
- version: tags/0.16.0
- file: accesskit-c-0.16.0.zip
- target: accesskit-c-0.16.0/accesskit_c.zip
+ version: tags/0.17.0
+ file: accesskit-c-0.17.0.zip
+ target: accesskit-c-0.17.0/accesskit_c.zip
- name: Extract pre-built AccessKit
- run: unzip -o accesskit-c-0.16.0/accesskit_c.zip
+ run: unzip -o accesskit-c-0.17.0/accesskit_c.zip
- name: Install mold linker
if: matrix.proj-test
diff --git a/.github/workflows/macos_builds.yml b/.github/workflows/macos_builds.yml
index b009d8a4a35..0cf2581a49c 100644
--- a/.github/workflows/macos_builds.yml
+++ b/.github/workflows/macos_builds.yml
@@ -7,7 +7,7 @@ env:
SCONS_FLAGS: >-
dev_mode=yes
module_text_server_fb_enabled=yes
- "accesskit_sdk_path=${{ github.workspace }}/accesskit-c-0.16.0/"
+ "accesskit_sdk_path=${{ github.workspace }}/accesskit-c-0.17.0/"
jobs:
build-macos:
@@ -51,12 +51,12 @@ jobs:
uses: dsaltares/fetch-gh-release-asset@1.1.2
with:
repo: AccessKit/accesskit-c
- version: tags/0.16.0
- file: accesskit-c-0.16.0.zip
- target: accesskit-c-0.16.0/accesskit_c.zip
+ version: tags/0.17.0
+ file: accesskit-c-0.17.0.zip
+ target: accesskit-c-0.17.0/accesskit_c.zip
- name: Extract pre-built AccessKit
- run: unzip -o accesskit-c-0.16.0/accesskit_c.zip
+ run: unzip -o accesskit-c-0.17.0/accesskit_c.zip
- name: Setup Vulkan SDK
id: vulkan-sdk
diff --git a/.github/workflows/windows_builds.yml b/.github/workflows/windows_builds.yml
index b27f252d3c0..556a87c3d14 100644
--- a/.github/workflows/windows_builds.yml
+++ b/.github/workflows/windows_builds.yml
@@ -10,7 +10,7 @@ env:
debug_symbols=no
d3d12=yes
"angle_libs=${{ github.workspace }}/"
- "accesskit_sdk_path=${{ github.workspace }}/accesskit-c-0.16.0/"
+ "accesskit_sdk_path=${{ github.workspace }}/accesskit-c-0.17.0/"
SCONS_CACHE_MSVC_CONFIG: true
PYTHONIOENCODING: utf8
@@ -90,12 +90,12 @@ jobs:
uses: dsaltares/fetch-gh-release-asset@1.1.2
with:
repo: AccessKit/accesskit-c
- version: tags/0.16.0
- file: accesskit-c-0.16.0.zip
- target: accesskit-c-0.16.0/accesskit_c.zip
+ version: tags/0.17.0
+ file: accesskit-c-0.17.0.zip
+ target: accesskit-c-0.17.0/accesskit_c.zip
- name: Extract pre-built AccessKit
- run: unzip -o accesskit-c-0.16.0/accesskit_c.zip
+ run: unzip -o accesskit-c-0.17.0/accesskit_c.zip
- name: Compilation
uses: ./.github/actions/godot-build
diff --git a/doc/classes/DisplayServer.xml b/doc/classes/DisplayServer.xml
index b9aca5afdf7..9884860c0b9 100644
--- a/doc/classes/DisplayServer.xml
+++ b/doc/classes/DisplayServer.xml
@@ -2833,22 +2833,22 @@
Scroll backward action, callback argument is not set.
- Scroll down action, callback argument is not set.
+ Scroll down action, callback argument is set to [enum AccessibilityScrollUnit].
Scroll forward action, callback argument is not set.
- Scroll left action, callback argument is not set.
+ Scroll left action, callback argument is set to [enum AccessibilityScrollUnit].
- Scroll right action, callback argument is not set.
+ Scroll right action, callback argument is set to [enum AccessibilityScrollUnit].
- Scroll up action, callback argument is not set.
+ Scroll up action, callback argument is set to [enum AccessibilityScrollUnit].
- Scroll into view action, callback argument is not set.
+ Scroll into view action, callback argument is set to [enum AccessibilityScrollHint].
Scroll to point action, callback argument is set to [Vector2] with the relative point coordinates.
@@ -2874,6 +2874,30 @@
Indicates that updates to the live region have the highest priority and should be presented immediately.
+
+ The amount by which to scroll. A single item of a list, line of text.
+
+
+ The amount by which to scroll. A single page.
+
+
+ A preferred position for the node scrolled into view. Top-left edge of the scroll container.
+
+
+ A preferred position for the node scrolled into view. Bottom-right edge of the scroll container.
+
+
+ A preferred position for the node scrolled into view. Top edge of the scroll container.
+
+
+ A preferred position for the node scrolled into view. Bottom edge of the scroll container.
+
+
+ A preferred position for the node scrolled into view. Left edge of the scroll container.
+
+
+ A preferred position for the node scrolled into view. Right edge of the scroll container.
+
Makes the mouse cursor visible if it is hidden.
diff --git a/drivers/accesskit/accessibility_driver_accesskit.cpp b/drivers/accesskit/accessibility_driver_accesskit.cpp
index 5047ae63830..a5b1214a401 100644
--- a/drivers/accesskit/accessibility_driver_accesskit.cpp
+++ b/drivers/accesskit/accessibility_driver_accesskit.cpp
@@ -136,8 +136,36 @@ void AccessibilityDriverAccessKit::_accessibility_action_callback(struct accessk
case ACCESSKIT_ACTION_DATA_NUMERIC_VALUE: {
rq_data = p_request->data.value.numeric_value;
} break;
- case ACCESSKIT_ACTION_DATA_SCROLL_TARGET_RECT: {
- rq_data = Rect2(p_request->data.value.scroll_target_rect.x0, p_request->data.value.scroll_target_rect.y0, p_request->data.value.scroll_target_rect.x1 - p_request->data.value.scroll_target_rect.x0, p_request->data.value.scroll_target_rect.y1 - p_request->data.value.scroll_target_rect.y0);
+ case ACCESSKIT_ACTION_DATA_SCROLL_HINT: {
+ switch (p_request->data.value.scroll_hint) {
+ case ACCESSKIT_SCROLL_HINT_TOP_LEFT: {
+ rq_data = DisplayServer::SCROLL_HINT_TOP_LEFT;
+ } break;
+ case ACCESSKIT_SCROLL_HINT_BOTTOM_RIGHT: {
+ rq_data = DisplayServer::SCROLL_HINT_BOTTOM_RIGHT;
+ } break;
+ case ACCESSKIT_SCROLL_HINT_TOP_EDGE: {
+ rq_data = DisplayServer::SCROLL_HINT_TOP_EDGE;
+ } break;
+ case ACCESSKIT_SCROLL_HINT_BOTTOM_EDGE: {
+ rq_data = DisplayServer::SCROLL_HINT_BOTTOM_EDGE;
+ } break;
+ case ACCESSKIT_SCROLL_HINT_LEFT_EDGE: {
+ rq_data = DisplayServer::SCROLL_HINT_LEFT_EDGE;
+ } break;
+ case ACCESSKIT_SCROLL_HINT_RIGHT_EDGE: {
+ rq_data = DisplayServer::SCROLL_HINT_RIGHT_EDGE;
+ } break;
+ default:
+ break;
+ }
+ } break;
+ case ACCESSKIT_ACTION_DATA_SCROLL_UNIT: {
+ if (p_request->data.value.scroll_unit == ACCESSKIT_SCROLL_UNIT_ITEM) {
+ rq_data = DisplayServer::SCROLL_UNIT_ITEM;
+ } else if (p_request->data.value.scroll_unit == ACCESSKIT_SCROLL_UNIT_PAGE) {
+ rq_data = DisplayServer::SCROLL_UNIT_PAGE;
+ }
} break;
case ACCESSKIT_ACTION_DATA_SCROLL_TO_POINT: {
rq_data = Point2(p_request->data.value.scroll_to_point.x, p_request->data.value.scroll_to_point.y);
@@ -1621,9 +1649,9 @@ AccessibilityDriverAccessKit::AccessibilityDriverAccessKit() {
//action_map[DisplayServer::AccessibilityAction::ACTION_LOAD_INLINE_TEXT_BOXES] = ACCESSKIT_ACTION_LOAD_INLINE_TEXT_BOXES;
action_map[DisplayServer::AccessibilityAction::ACTION_SET_TEXT_SELECTION] = ACCESSKIT_ACTION_SET_TEXT_SELECTION;
action_map[DisplayServer::AccessibilityAction::ACTION_REPLACE_SELECTED_TEXT] = ACCESSKIT_ACTION_REPLACE_SELECTED_TEXT;
- action_map[DisplayServer::AccessibilityAction::ACTION_SCROLL_BACKWARD] = ACCESSKIT_ACTION_SCROLL_BACKWARD;
+ action_map[DisplayServer::AccessibilityAction::ACTION_SCROLL_BACKWARD] = ACCESSKIT_ACTION_SCROLL_UP;
action_map[DisplayServer::AccessibilityAction::ACTION_SCROLL_DOWN] = ACCESSKIT_ACTION_SCROLL_DOWN;
- action_map[DisplayServer::AccessibilityAction::ACTION_SCROLL_FORWARD] = ACCESSKIT_ACTION_SCROLL_FORWARD;
+ action_map[DisplayServer::AccessibilityAction::ACTION_SCROLL_FORWARD] = ACCESSKIT_ACTION_SCROLL_DOWN;
action_map[DisplayServer::AccessibilityAction::ACTION_SCROLL_LEFT] = ACCESSKIT_ACTION_SCROLL_LEFT;
action_map[DisplayServer::AccessibilityAction::ACTION_SCROLL_RIGHT] = ACCESSKIT_ACTION_SCROLL_RIGHT;
action_map[DisplayServer::AccessibilityAction::ACTION_SCROLL_UP] = ACCESSKIT_ACTION_SCROLL_UP;
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp
index dc95c6f1d54..333ae07ab64 100644
--- a/scene/gui/item_list.cpp
+++ b/scene/gui/item_list.cpp
@@ -1204,19 +1204,35 @@ void ItemList::_accessibility_action_scroll_set(const Variant &p_data) {
}
void ItemList::_accessibility_action_scroll_up(const Variant &p_data) {
- scroll_bar_v->set_value(scroll_bar_v->get_value() - scroll_bar_v->get_page() / 4);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ scroll_bar_v->set_value(scroll_bar_v->get_value() - scroll_bar_v->get_page() / 4);
+ } else {
+ scroll_bar_v->set_value(scroll_bar_v->get_value() - scroll_bar_v->get_page());
+ }
}
void ItemList::_accessibility_action_scroll_down(const Variant &p_data) {
- scroll_bar_v->set_value(scroll_bar_v->get_value() + scroll_bar_v->get_page() / 4);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ scroll_bar_v->set_value(scroll_bar_v->get_value() + scroll_bar_v->get_page() / 4);
+ } else {
+ scroll_bar_v->set_value(scroll_bar_v->get_value() + scroll_bar_v->get_page());
+ }
}
void ItemList::_accessibility_action_scroll_left(const Variant &p_data) {
- scroll_bar_h->set_value(scroll_bar_h->get_value() - scroll_bar_h->get_page() / 4);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ scroll_bar_h->set_value(scroll_bar_h->get_value() - scroll_bar_h->get_page() / 4);
+ } else {
+ scroll_bar_h->set_value(scroll_bar_h->get_value() - scroll_bar_h->get_page());
+ }
}
void ItemList::_accessibility_action_scroll_right(const Variant &p_data) {
- scroll_bar_h->set_value(scroll_bar_h->get_value() + scroll_bar_h->get_page() / 4);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ scroll_bar_h->set_value(scroll_bar_h->get_value() + scroll_bar_h->get_page() / 4);
+ } else {
+ scroll_bar_h->set_value(scroll_bar_h->get_value() + scroll_bar_h->get_page());
+ }
}
void ItemList::_accessibility_action_scroll_into_view(const Variant &p_data, int p_index) {
diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp
index a628b9323db..89105bc998c 100644
--- a/scene/gui/rich_text_label.cpp
+++ b/scene/gui/rich_text_label.cpp
@@ -2174,11 +2174,19 @@ void RichTextLabel::_accessibility_action_menu(const Variant &p_data) {
}
void RichTextLabel::_accessibility_scroll_down(const Variant &p_data) {
- vscroll->set_value(vscroll->get_value() + vscroll->get_page() / 4);
+ if ((uint8_t)p_data == 0) {
+ vscroll->set_value(vscroll->get_value() + vscroll->get_page() / 4);
+ } else {
+ vscroll->set_value(vscroll->get_value() + vscroll->get_page());
+ }
}
void RichTextLabel::_accessibility_scroll_up(const Variant &p_data) {
- vscroll->set_value(vscroll->get_value() - vscroll->get_page() / 4);
+ if ((uint8_t)p_data == 0) {
+ vscroll->set_value(vscroll->get_value() - vscroll->get_page() / 4);
+ } else {
+ vscroll->set_value(vscroll->get_value() - vscroll->get_page());
+ }
}
void RichTextLabel::_accessibility_scroll_set(const Variant &p_data) {
diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp
index 94261318c91..30991f05aea 100644
--- a/scene/gui/scroll_container.cpp
+++ b/scene/gui/scroll_container.cpp
@@ -413,19 +413,35 @@ void ScrollContainer::_accessibility_action_scroll_set(const Variant &p_data) {
}
void ScrollContainer::_accessibility_action_scroll_up(const Variant &p_data) {
- v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / ScrollBar::PAGE_DIVISOR);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / ScrollBar::PAGE_DIVISOR);
+ } else {
+ v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page());
+ }
}
void ScrollContainer::_accessibility_action_scroll_down(const Variant &p_data) {
- v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / ScrollBar::PAGE_DIVISOR);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / ScrollBar::PAGE_DIVISOR);
+ } else {
+ v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page());
+ }
}
void ScrollContainer::_accessibility_action_scroll_left(const Variant &p_data) {
- h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() / ScrollBar::PAGE_DIVISOR);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() / ScrollBar::PAGE_DIVISOR);
+ } else {
+ h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page());
+ }
}
void ScrollContainer::_accessibility_action_scroll_right(const Variant &p_data) {
- h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() / ScrollBar::PAGE_DIVISOR);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() / ScrollBar::PAGE_DIVISOR);
+ } else {
+ h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page());
+ }
}
void ScrollContainer::_notification(int p_what) {
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 13a32cc0222..a38dd546dec 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -679,22 +679,38 @@ void TextEdit::_accessibility_action_menu(const Variant &p_data) {
}
void TextEdit::_accessibility_scroll_down(const Variant &p_data) {
- v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / 4);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / 4);
+ } else {
+ v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page());
+ }
queue_accessibility_update();
}
void TextEdit::_accessibility_scroll_left(const Variant &p_data) {
- h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() / 4);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() / 4);
+ } else {
+ h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page());
+ }
queue_accessibility_update();
}
void TextEdit::_accessibility_scroll_right(const Variant &p_data) {
- h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() / 4);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() / 4);
+ } else {
+ h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page());
+ }
queue_accessibility_update();
}
void TextEdit::_accessibility_scroll_up(const Variant &p_data) {
- v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / 4);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / 4);
+ } else {
+ v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page());
+ }
queue_accessibility_update();
}
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index 7c85239b7ed..7d6ca962083 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -4571,19 +4571,35 @@ PackedStringArray Tree::get_accessibility_configuration_warnings() const {
}
void Tree::_accessibility_action_scroll_down(const Variant &p_data) {
- v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / 4);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / 4);
+ } else {
+ v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page());
+ }
}
void Tree::_accessibility_action_scroll_left(const Variant &p_data) {
- h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() / 4);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() / 4);
+ } else {
+ h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page());
+ }
}
void Tree::_accessibility_action_scroll_right(const Variant &p_data) {
- h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() / 4);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() / 4);
+ } else {
+ h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page());
+ }
}
void Tree::_accessibility_action_scroll_up(const Variant &p_data) {
- v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / 4);
+ if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
+ v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / 4);
+ } else {
+ v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page());
+ }
}
void Tree::_accessibility_action_scroll_set(const Variant &p_data) {
diff --git a/servers/display_server.cpp b/servers/display_server.cpp
index fff048f1eb4..d2acfd8c983 100644
--- a/servers/display_server.cpp
+++ b/servers/display_server.cpp
@@ -1749,6 +1749,16 @@ void DisplayServer::_bind_methods() {
BIND_ENUM_CONSTANT(LIVE_POLITE);
BIND_ENUM_CONSTANT(LIVE_ASSERTIVE);
+ BIND_ENUM_CONSTANT(SCROLL_UNIT_ITEM);
+ BIND_ENUM_CONSTANT(SCROLL_UNIT_PAGE);
+
+ BIND_ENUM_CONSTANT(SCROLL_HINT_TOP_LEFT);
+ BIND_ENUM_CONSTANT(SCROLL_HINT_BOTTOM_RIGHT);
+ BIND_ENUM_CONSTANT(SCROLL_HINT_TOP_EDGE);
+ BIND_ENUM_CONSTANT(SCROLL_HINT_BOTTOM_EDGE);
+ BIND_ENUM_CONSTANT(SCROLL_HINT_LEFT_EDGE);
+ BIND_ENUM_CONSTANT(SCROLL_HINT_RIGHT_EDGE);
+
BIND_ENUM_CONSTANT(MOUSE_MODE_VISIBLE);
BIND_ENUM_CONSTANT(MOUSE_MODE_HIDDEN);
BIND_ENUM_CONSTANT(MOUSE_MODE_CAPTURED);
diff --git a/servers/display_server.h b/servers/display_server.h
index 7f6634ec727..6283edc45f9 100644
--- a/servers/display_server.h
+++ b/servers/display_server.h
@@ -653,6 +653,20 @@ public:
LIVE_ASSERTIVE,
};
+ enum AccessibilityScrollUnit {
+ SCROLL_UNIT_ITEM,
+ SCROLL_UNIT_PAGE,
+ };
+
+ enum AccessibilityScrollHint {
+ SCROLL_HINT_TOP_LEFT,
+ SCROLL_HINT_BOTTOM_RIGHT,
+ SCROLL_HINT_TOP_EDGE,
+ SCROLL_HINT_BOTTOM_EDGE,
+ SCROLL_HINT_LEFT_EDGE,
+ SCROLL_HINT_RIGHT_EDGE,
+ };
+
static AccessibilityMode accessibility_get_mode() { return accessibility_mode; }
static void accessibility_set_mode(AccessibilityMode p_mode) { accessibility_mode = p_mode; }
@@ -981,6 +995,8 @@ VARIANT_ENUM_CAST(DisplayServer::AccessibilityFlags)
VARIANT_ENUM_CAST(DisplayServer::AccessibilityLiveMode)
VARIANT_ENUM_CAST(DisplayServer::AccessibilityPopupType)
VARIANT_ENUM_CAST(DisplayServer::AccessibilityRole)
+VARIANT_ENUM_CAST(DisplayServer::AccessibilityScrollUnit)
+VARIANT_ENUM_CAST(DisplayServer::AccessibilityScrollHint)
VARIANT_ENUM_CAST(DisplayServer::WindowEvent)
VARIANT_ENUM_CAST(DisplayServer::Feature)
diff --git a/thirdparty/README.md b/thirdparty/README.md
index 7b8091d44d9..f67d81e5880 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -8,7 +8,7 @@ readability.
## accesskit
- Upstream: https://github.com/AccessKit/accesskit-c
-- Version: 0.16.0 (06c1779473ff4304f42ea254f77fef2e33f982b0, 2025)
+- Version: 0.17.0 (f69571eca23151be07a41bf493ca48a2b44b6a8b, 2025)
- License: MIT
Files extracted from upstream source:
diff --git a/thirdparty/accesskit/include/accesskit.h b/thirdparty/accesskit/include/accesskit.h
index 3b9f43e3544..bbadff371be 100644
--- a/thirdparty/accesskit/include/accesskit.h
+++ b/thirdparty/accesskit/include/accesskit.h
@@ -53,16 +53,25 @@ enum accesskit_action
* Requires [`ActionRequest::data`] to be set to [`ActionData::Value`].
*/
ACCESSKIT_ACTION_REPLACE_SELECTED_TEXT,
- ACCESSKIT_ACTION_SCROLL_BACKWARD,
+ /**
+ * Scroll down by the specified unit.
+ */
ACCESSKIT_ACTION_SCROLL_DOWN,
- ACCESSKIT_ACTION_SCROLL_FORWARD,
+ /**
+ * Scroll left by the specified unit.
+ */
ACCESSKIT_ACTION_SCROLL_LEFT,
+ /**
+ * Scroll right by the specified unit.
+ */
ACCESSKIT_ACTION_SCROLL_RIGHT,
+ /**
+ * Scroll up by the specified unit.
+ */
ACCESSKIT_ACTION_SCROLL_UP,
/**
- * Scroll any scrollable containers to make the target object visible
- * on the screen. Optionally set [`ActionRequest::data`] to
- * [`ActionData::ScrollTargetRect`].
+ * Scroll any scrollable containers to make the target node visible.
+ * Optionally set [`ActionRequest::data`] to [`ActionData::ScrollHint`].
*/
ACCESSKIT_ACTION_SCROLL_INTO_VIEW,
/**
@@ -439,6 +448,50 @@ enum accesskit_role
typedef uint8_t accesskit_role;
#endif // __cplusplus
+/**
+ * A suggestion about where the node being scrolled into view should be
+ * positioned relative to the edges of the scrollable container.
+ */
+enum accesskit_scroll_hint
+#ifdef __cplusplus
+ : uint8_t
+#endif // __cplusplus
+{
+ ACCESSKIT_SCROLL_HINT_TOP_LEFT,
+ ACCESSKIT_SCROLL_HINT_BOTTOM_RIGHT,
+ ACCESSKIT_SCROLL_HINT_TOP_EDGE,
+ ACCESSKIT_SCROLL_HINT_BOTTOM_EDGE,
+ ACCESSKIT_SCROLL_HINT_LEFT_EDGE,
+ ACCESSKIT_SCROLL_HINT_RIGHT_EDGE,
+};
+#ifndef __cplusplus
+typedef uint8_t accesskit_scroll_hint;
+#endif // __cplusplus
+
+/**
+ * The amount by which to scroll in the direction specified by one of the
+ * `Scroll` actions.
+ */
+enum accesskit_scroll_unit
+#ifdef __cplusplus
+ : uint8_t
+#endif // __cplusplus
+{
+ /**
+ * A single item of a list, line of text (for vertical scrolling),
+ * character (for horizontal scrolling), or an approximation of
+ * one of these.
+ */
+ ACCESSKIT_SCROLL_UNIT_ITEM,
+ /**
+ * The amount of content that fits in the viewport.
+ */
+ ACCESSKIT_SCROLL_UNIT_PAGE,
+};
+#ifndef __cplusplus
+typedef uint8_t accesskit_scroll_unit;
+#endif // __cplusplus
+
enum accesskit_sort_direction
#ifdef __cplusplus
: uint8_t
@@ -849,7 +902,13 @@ typedef enum accesskit_action_data_Tag {
ACCESSKIT_ACTION_DATA_CUSTOM_ACTION,
ACCESSKIT_ACTION_DATA_VALUE,
ACCESSKIT_ACTION_DATA_NUMERIC_VALUE,
- ACCESSKIT_ACTION_DATA_SCROLL_TARGET_RECT,
+ ACCESSKIT_ACTION_DATA_SCROLL_UNIT,
+ /**
+ * Optional suggestion for `ACCESSKIT_ACTION_SCROLL_INTO_VIEW`, specifying
+ * the preferred position of the target node relative to the scrollable
+ * container's viewport.
+ */
+ ACCESSKIT_ACTION_DATA_SCROLL_HINT,
ACCESSKIT_ACTION_DATA_SCROLL_TO_POINT,
ACCESSKIT_ACTION_DATA_SET_SCROLL_OFFSET,
ACCESSKIT_ACTION_DATA_SET_TEXT_SELECTION,
@@ -868,7 +927,10 @@ typedef struct accesskit_action_data {
double numeric_value;
};
struct {
- struct accesskit_rect scroll_target_rect;
+ accesskit_scroll_unit scroll_unit;
+ };
+ struct {
+ accesskit_scroll_hint scroll_hint;
};
struct {
struct accesskit_point scroll_to_point;
@@ -982,6 +1044,33 @@ void accesskit_node_remove_action(struct accesskit_node *node,
void accesskit_node_clear_actions(struct accesskit_node *node);
+/**
+ * Return whether the specified action is in the set supported on this node's
+ * direct children in the filtered tree.
+ */
+bool accesskit_node_child_supports_action(const struct accesskit_node *node,
+ accesskit_action action);
+
+/**
+ * Add the specified action to the set supported on this node's direct
+ * children in the filtered tree.
+ */
+void accesskit_node_add_child_action(struct accesskit_node *node,
+ accesskit_action action);
+
+/**
+ * Remove the specified action from the set supported on this node's direct
+ * children in the filtered tree.
+ */
+void accesskit_node_remove_child_action(struct accesskit_node *node,
+ accesskit_action action);
+
+/**
+ * Clear the set of actions supported on this node's direct children in the
+ * filtered tree.
+ */
+void accesskit_node_clear_child_actions(struct accesskit_node *node);
+
bool accesskit_node_is_hidden(const struct accesskit_node *node);
void accesskit_node_set_hidden(struct accesskit_node *node);