Browse Source

Update access-kit to 0.17.0

Pāvels Nadtočajevs 1 month ago
parent
commit
3f757c41fc

+ 5 - 5
.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/[email protected]
         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

+ 5 - 5
.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/[email protected]
         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

+ 5 - 5
.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/[email protected]
         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

+ 29 - 5
doc/classes/DisplayServer.xml

@@ -2833,22 +2833,22 @@
 			Scroll backward action, callback argument is not set.
 		</constant>
 		<constant name="ACTION_SCROLL_DOWN" value="12" enum="AccessibilityAction">
-			Scroll down action, callback argument is not set.
+			Scroll down action, callback argument is set to [enum AccessibilityScrollUnit].
 		</constant>
 		<constant name="ACTION_SCROLL_FORWARD" value="13" enum="AccessibilityAction">
 			Scroll forward action, callback argument is not set.
 		</constant>
 		<constant name="ACTION_SCROLL_LEFT" value="14" enum="AccessibilityAction">
-			Scroll left action, callback argument is not set.
+			Scroll left action, callback argument is set to [enum AccessibilityScrollUnit].
 		</constant>
 		<constant name="ACTION_SCROLL_RIGHT" value="15" enum="AccessibilityAction">
-			Scroll right action, callback argument is not set.
+			Scroll right action, callback argument is set to [enum AccessibilityScrollUnit].
 		</constant>
 		<constant name="ACTION_SCROLL_UP" value="16" enum="AccessibilityAction">
-			Scroll up action, callback argument is not set.
+			Scroll up action, callback argument is set to [enum AccessibilityScrollUnit].
 		</constant>
 		<constant name="ACTION_SCROLL_INTO_VIEW" value="17" enum="AccessibilityAction">
-			Scroll into view action, callback argument is not set.
+			Scroll into view action, callback argument is set to [enum AccessibilityScrollHint].
 		</constant>
 		<constant name="ACTION_SCROLL_TO_POINT" value="18" enum="AccessibilityAction">
 			Scroll to point action, callback argument is set to [Vector2] with the relative point coordinates.
@@ -2874,6 +2874,30 @@
 		<constant name="LIVE_ASSERTIVE" value="2" enum="AccessibilityLiveMode">
 			Indicates that updates to the live region have the highest priority and should be presented immediately.
 		</constant>
+		<constant name="SCROLL_UNIT_ITEM" value="0" enum="AccessibilityScrollUnit">
+			The amount by which to scroll. A single item of a list, line of text.
+		</constant>
+		<constant name="SCROLL_UNIT_PAGE" value="1" enum="AccessibilityScrollUnit">
+			The amount by which to scroll. A single page.
+		</constant>
+		<constant name="SCROLL_HINT_TOP_LEFT" value="0" enum="AccessibilityScrollHint">
+			A preferred position for the node scrolled into view. Top-left edge of the scroll container.
+		</constant>
+		<constant name="SCROLL_HINT_BOTTOM_RIGHT" value="1" enum="AccessibilityScrollHint">
+			A preferred position for the node scrolled into view. Bottom-right edge of the scroll container.
+		</constant>
+		<constant name="SCROLL_HINT_TOP_EDGE" value="2" enum="AccessibilityScrollHint">
+			A preferred position for the node scrolled into view. Top edge of the scroll container.
+		</constant>
+		<constant name="SCROLL_HINT_BOTTOM_EDGE" value="3" enum="AccessibilityScrollHint">
+			A preferred position for the node scrolled into view. Bottom edge of the scroll container.
+		</constant>
+		<constant name="SCROLL_HINT_LEFT_EDGE" value="4" enum="AccessibilityScrollHint">
+			A preferred position for the node scrolled into view. Left edge of the scroll container.
+		</constant>
+		<constant name="SCROLL_HINT_RIGHT_EDGE" value="5" enum="AccessibilityScrollHint">
+			A preferred position for the node scrolled into view. Right edge of the scroll container.
+		</constant>
 		<constant name="MOUSE_MODE_VISIBLE" value="0" enum="MouseMode">
 			Makes the mouse cursor visible if it is hidden.
 		</constant>

+ 32 - 4
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;

+ 20 - 4
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) {

+ 10 - 2
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) {

+ 20 - 4
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) {

+ 20 - 4
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();
 }
 

+ 20 - 4
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) {

+ 10 - 0
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);

+ 16 - 0
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)

+ 1 - 1
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:

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