Browse Source

Update access-kit to 0.17.0

Pāvels Nadtočajevs 1 tháng trước cách đây
mục cha
commit
3f757c41fc

+ 5 - 5
.github/workflows/linux_builds.yml

@@ -7,7 +7,7 @@ env:
   SCONS_FLAGS: >-
   SCONS_FLAGS: >-
     dev_mode=yes
     dev_mode=yes
     module_text_server_fb_enabled=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
   GODOT_CPP_BRANCH: 4.4
   DOTNET_NOLOGO: true
   DOTNET_NOLOGO: true
   DOTNET_CLI_TELEMETRY_OPTOUT: true
   DOTNET_CLI_TELEMETRY_OPTOUT: true
@@ -162,12 +162,12 @@ jobs:
         uses: dsaltares/[email protected]
         uses: dsaltares/[email protected]
         with:
         with:
           repo: AccessKit/accesskit-c
           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
       - 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
       - name: Install mold linker
         if: matrix.proj-test
         if: matrix.proj-test

+ 5 - 5
.github/workflows/macos_builds.yml

@@ -7,7 +7,7 @@ env:
   SCONS_FLAGS: >-
   SCONS_FLAGS: >-
     dev_mode=yes
     dev_mode=yes
     module_text_server_fb_enabled=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:
 jobs:
   build-macos:
   build-macos:
@@ -51,12 +51,12 @@ jobs:
         uses: dsaltares/[email protected]
         uses: dsaltares/[email protected]
         with:
         with:
           repo: AccessKit/accesskit-c
           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
       - 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
       - name: Setup Vulkan SDK
         id: vulkan-sdk
         id: vulkan-sdk

+ 5 - 5
.github/workflows/windows_builds.yml

@@ -10,7 +10,7 @@ env:
     debug_symbols=no
     debug_symbols=no
     d3d12=yes
     d3d12=yes
     "angle_libs=${{ github.workspace }}/"
     "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
   SCONS_CACHE_MSVC_CONFIG: true
   PYTHONIOENCODING: utf8
   PYTHONIOENCODING: utf8
 
 
@@ -90,12 +90,12 @@ jobs:
         uses: dsaltares/[email protected]
         uses: dsaltares/[email protected]
         with:
         with:
           repo: AccessKit/accesskit-c
           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
       - 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
       - name: Compilation
         uses: ./.github/actions/godot-build
         uses: ./.github/actions/godot-build

+ 29 - 5
doc/classes/DisplayServer.xml

@@ -2833,22 +2833,22 @@
 			Scroll backward action, callback argument is not set.
 			Scroll backward action, callback argument is not set.
 		</constant>
 		</constant>
 		<constant name="ACTION_SCROLL_DOWN" value="12" enum="AccessibilityAction">
 		<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>
 		<constant name="ACTION_SCROLL_FORWARD" value="13" enum="AccessibilityAction">
 		<constant name="ACTION_SCROLL_FORWARD" value="13" enum="AccessibilityAction">
 			Scroll forward action, callback argument is not set.
 			Scroll forward action, callback argument is not set.
 		</constant>
 		</constant>
 		<constant name="ACTION_SCROLL_LEFT" value="14" enum="AccessibilityAction">
 		<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>
 		<constant name="ACTION_SCROLL_RIGHT" value="15" enum="AccessibilityAction">
 		<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>
 		<constant name="ACTION_SCROLL_UP" value="16" enum="AccessibilityAction">
 		<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>
 		<constant name="ACTION_SCROLL_INTO_VIEW" value="17" enum="AccessibilityAction">
 		<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>
 		<constant name="ACTION_SCROLL_TO_POINT" value="18" enum="AccessibilityAction">
 		<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.
 			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">
 		<constant name="LIVE_ASSERTIVE" value="2" enum="AccessibilityLiveMode">
 			Indicates that updates to the live region have the highest priority and should be presented immediately.
 			Indicates that updates to the live region have the highest priority and should be presented immediately.
 		</constant>
 		</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">
 		<constant name="MOUSE_MODE_VISIBLE" value="0" enum="MouseMode">
 			Makes the mouse cursor visible if it is hidden.
 			Makes the mouse cursor visible if it is hidden.
 		</constant>
 		</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: {
 					case ACCESSKIT_ACTION_DATA_NUMERIC_VALUE: {
 						rq_data = p_request->data.value.numeric_value;
 						rq_data = p_request->data.value.numeric_value;
 					} break;
 					} 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;
 					} break;
 					case ACCESSKIT_ACTION_DATA_SCROLL_TO_POINT: {
 					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);
 						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_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_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_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_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_LEFT] = ACCESSKIT_ACTION_SCROLL_LEFT;
 	action_map[DisplayServer::AccessibilityAction::ACTION_SCROLL_RIGHT] = ACCESSKIT_ACTION_SCROLL_RIGHT;
 	action_map[DisplayServer::AccessibilityAction::ACTION_SCROLL_RIGHT] = ACCESSKIT_ACTION_SCROLL_RIGHT;
 	action_map[DisplayServer::AccessibilityAction::ACTION_SCROLL_UP] = ACCESSKIT_ACTION_SCROLL_UP;
 	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) {
 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) {
 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) {
 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) {
 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) {
 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) {
 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) {
 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) {
 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) {
 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) {
 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) {
 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) {
 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) {
 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) {
 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();
 	queue_accessibility_update();
 }
 }
 
 
 void TextEdit::_accessibility_scroll_left(const Variant &p_data) {
 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();
 	queue_accessibility_update();
 }
 }
 
 
 void TextEdit::_accessibility_scroll_right(const Variant &p_data) {
 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();
 	queue_accessibility_update();
 }
 }
 
 
 void TextEdit::_accessibility_scroll_up(const Variant &p_data) {
 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();
 	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) {
 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) {
 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) {
 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) {
 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) {
 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_POLITE);
 	BIND_ENUM_CONSTANT(LIVE_ASSERTIVE);
 	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_VISIBLE);
 	BIND_ENUM_CONSTANT(MOUSE_MODE_HIDDEN);
 	BIND_ENUM_CONSTANT(MOUSE_MODE_HIDDEN);
 	BIND_ENUM_CONSTANT(MOUSE_MODE_CAPTURED);
 	BIND_ENUM_CONSTANT(MOUSE_MODE_CAPTURED);

+ 16 - 0
servers/display_server.h

@@ -653,6 +653,20 @@ public:
 		LIVE_ASSERTIVE,
 		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 AccessibilityMode accessibility_get_mode() { return accessibility_mode; }
 	static void accessibility_set_mode(AccessibilityMode p_mode) { accessibility_mode = p_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::AccessibilityLiveMode)
 VARIANT_ENUM_CAST(DisplayServer::AccessibilityPopupType)
 VARIANT_ENUM_CAST(DisplayServer::AccessibilityPopupType)
 VARIANT_ENUM_CAST(DisplayServer::AccessibilityRole)
 VARIANT_ENUM_CAST(DisplayServer::AccessibilityRole)
+VARIANT_ENUM_CAST(DisplayServer::AccessibilityScrollUnit)
+VARIANT_ENUM_CAST(DisplayServer::AccessibilityScrollHint)
 
 
 VARIANT_ENUM_CAST(DisplayServer::WindowEvent)
 VARIANT_ENUM_CAST(DisplayServer::WindowEvent)
 VARIANT_ENUM_CAST(DisplayServer::Feature)
 VARIANT_ENUM_CAST(DisplayServer::Feature)

+ 1 - 1
thirdparty/README.md

@@ -8,7 +8,7 @@ readability.
 ## accesskit
 ## accesskit
 
 
 - Upstream: https://github.com/AccessKit/accesskit-c
 - Upstream: https://github.com/AccessKit/accesskit-c
-- Version: 0.16.0 (06c1779473ff4304f42ea254f77fef2e33f982b0, 2025)
+- Version: 0.17.0 (f69571eca23151be07a41bf493ca48a2b44b6a8b, 2025)
 - License: MIT
 - License: MIT
 
 
 Files extracted from upstream source:
 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`].
    * Requires [`ActionRequest::data`] to be set to [`ActionData::Value`].
    */
    */
   ACCESSKIT_ACTION_REPLACE_SELECTED_TEXT,
   ACCESSKIT_ACTION_REPLACE_SELECTED_TEXT,
-  ACCESSKIT_ACTION_SCROLL_BACKWARD,
+  /**
+   * Scroll down by the specified unit.
+   */
   ACCESSKIT_ACTION_SCROLL_DOWN,
   ACCESSKIT_ACTION_SCROLL_DOWN,
-  ACCESSKIT_ACTION_SCROLL_FORWARD,
+  /**
+   * Scroll left by the specified unit.
+   */
   ACCESSKIT_ACTION_SCROLL_LEFT,
   ACCESSKIT_ACTION_SCROLL_LEFT,
+  /**
+   * Scroll right by the specified unit.
+   */
   ACCESSKIT_ACTION_SCROLL_RIGHT,
   ACCESSKIT_ACTION_SCROLL_RIGHT,
+  /**
+   * Scroll up by the specified unit.
+   */
   ACCESSKIT_ACTION_SCROLL_UP,
   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,
   ACCESSKIT_ACTION_SCROLL_INTO_VIEW,
   /**
   /**
@@ -439,6 +448,50 @@ enum accesskit_role
 typedef uint8_t accesskit_role;
 typedef uint8_t accesskit_role;
 #endif  // __cplusplus
 #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
 enum accesskit_sort_direction
 #ifdef __cplusplus
 #ifdef __cplusplus
     : uint8_t
     : uint8_t
@@ -849,7 +902,13 @@ typedef enum accesskit_action_data_Tag {
   ACCESSKIT_ACTION_DATA_CUSTOM_ACTION,
   ACCESSKIT_ACTION_DATA_CUSTOM_ACTION,
   ACCESSKIT_ACTION_DATA_VALUE,
   ACCESSKIT_ACTION_DATA_VALUE,
   ACCESSKIT_ACTION_DATA_NUMERIC_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_SCROLL_TO_POINT,
   ACCESSKIT_ACTION_DATA_SET_SCROLL_OFFSET,
   ACCESSKIT_ACTION_DATA_SET_SCROLL_OFFSET,
   ACCESSKIT_ACTION_DATA_SET_TEXT_SELECTION,
   ACCESSKIT_ACTION_DATA_SET_TEXT_SELECTION,
@@ -868,7 +927,10 @@ typedef struct accesskit_action_data {
       double numeric_value;
       double numeric_value;
     };
     };
     struct {
     struct {
-      struct accesskit_rect scroll_target_rect;
+      accesskit_scroll_unit scroll_unit;
+    };
+    struct {
+      accesskit_scroll_hint scroll_hint;
     };
     };
     struct {
     struct {
       struct accesskit_point scroll_to_point;
       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);
 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);
 bool accesskit_node_is_hidden(const struct accesskit_node *node);
 
 
 void accesskit_node_set_hidden(struct accesskit_node *node);
 void accesskit_node_set_hidden(struct accesskit_node *node);