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