The previous default of CanBeUsedOnAnyThread() proved unsafe since some output devices can safely be used on any thread but cannot safely be used during a crash. CanBeUsedOnAnyThread() was used pre-5.1 to control serialization to an output device during a crash, but optimizations in 5.1 have uncovered that some of these were never safe.
#preflight 62856506614041edb7a6de4b
#rb Zousar.Shaker
#rnx
[CL 20280354 by Devin Doucette in ue5-main branch]
#p4v-cherrypick 19897004
#ROBOMERGE-AUTHOR: james.doverspike
#ROBOMERGE-SOURCE: CL 19896998 via CL 19897000 via CL 19897003 via CL 19897308 via CL 19897311
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v940-19807014)
[CL 19897438 by james doverspike in ue5-main branch]
#rb none
#ROBOMERGE-AUTHOR: john.barrett
#ROBOMERGE-SOURCE: CL 19573269 via CL 19573278 via CL 19573287 via CL 19573292
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v938-19570697)
[CL 19575899 by john barrett in ue5-main branch]
- Moved FAccessibleEventArgs out of FGenericAccessibleMessageHandler to avoid the need to include GenericAccessibleInterfaces.h in header files where all
they really need is a forward declaration of the struct.
- Removed instances of FGenericAccessibleMessageHandler::FAccessibleEventArgs to FAccessibleEventArgs.
- Updated API for IAccessibleWidget and IAccessibleWindow that deal with getting and setting focus to also take a user index parameter. This facilitates multiple accessible users for the same application.
-Updated platform files that leverage the old IAccessibleWidget and IAccessibleWindow focus API
- Introduced FGenericAccessibleUser and FGenericAccessibleUserRegistry to GenericAccessibleInterfaces.h. An FGenericAccessibleUser is meant to be analogous to FSlateUser that keeps track of hardware users' focus. An FGenericAccessibleUserRegistry is a registry of FGenericAccessibleUsers. These interfaces are meant to insulate FGenericAccessibleMessageHandler from storing and tracking
focus etc when that should be an implementation detail by other modules.
- Refactored how FSlateCoreAccessibleWidgets set focus in the application. Accessible focus is now unified to a single code path that starts from FSlateAccessibleMessageHandler. Requests to shift accessible focus should be done by raising a Slate accessible event or through IAccessibleWidget::SetUserFocus()
- Introduced finer grain querying of focus capabilities for an IAccessibleWidget. Users can now check if an AccessibleWidget supports regular focus (keyboard/gamepad), if it supports accessible focus and if the widget can currently accept regular or accessible focus.
-Updated platforms to use the new FGenericAccessibleUser and FGenericAccessibleUserRegistry ApI to update and retrieve user focus.
#preflight: 61af2481813adc3fbb2ca7d5
[CL 18396441 by Leon Huang in ue5-main branch]
around for modules that require more accessibility information such as User/Controller Id.
#rnx
#rb: Patrick.Boutot
#preflight: 617b17e05aecf4000120a61a
#ROBOMERGE-AUTHOR: leon.huang
#ROBOMERGE-SOURCE: CL 17974834 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v885-17909292)
[CL 17974837 by leon huang in ue5-release-engine-test branch]
This represents UE4/Main @17911760, Release-5.0 @17915875 and Dev-PerfTest @17914035
[CL 17918595 by aurel cordonnier in ue5-release-engine-test branch]
the Windows UIA dll is used.
#rnx
#rb: David.Harvey
#preflight: 614470ce81695600012d14f9
[FYI] Jason.Stasik
#ROBOMERGE-AUTHOR: leon.huang
#ROBOMERGE-SOURCE: CL 17558697 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17558711 by leon huang in ue5-release-engine-test branch]
This is a defensive change to more uniformly gate conditions of various pathways that want to "nice" CPU consumption when the application is not the foreground application (doesn't "Have Focus"). In benchmarking scenarios we don't want a focus-grabbing application to cause change in behavior while taking performance measurements. This could be in local workstation benchmarking where other foreground apps will naturally come to the front or in data center build where antics that might otherwise be completely unknowable could impact benchmark measurements.
This change was formulated after finding some "nice" CPU conditionals that were instrumented, but not all of them are. This change aims to prevent having to instrument, profile, and mitigate each condition separately.
#rnx
#jira none
#rb francis.hurteau, brandon.schaefer
#preflight 611ec9248ff55400018d5018
#ROBOMERGE-AUTHOR: geoff.evans
#ROBOMERGE-SOURCE: CL 17463345 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)
[CL 17463757 by geoff evans in ue5-release-engine-test branch]
#jira UE-86062
#rb Emil.Persson
#ROBOMERGE-SOURCE: CL 12470734 in //UE4/Release-4.25/... via CL 12470736 via CL 12470747
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v672-12450963)
[CL 12470765 by kenzo terelst in Main branch]
#jira UE-90236
#rb Matt.kuhlenchmidt
[CODEREVIEW] Rex.Hill
#ROBOMERGE-SOURCE: CL 12097713 via CL 12097714 via CL 12097717
#ROBOMERGE-BOT: (v657-12064184)
[CL 12097718 by chris gagnon in Main branch]
#jira UE-90236
#rb Matt.Kuhlenschmidt
[CODEREVIEW] Rex.Hill
#ROBOMERGE-SOURCE: CL 12003895 via CL 12003912 via CL 12003921 via CL 12006263
#ROBOMERGE-BOT: (v656-11643781)
[CL 12048839 by chris gagnon in Main branch]
[CODEREVIEW] rex.hill, chris.gagnon
#ROBOMERGE-SOURCE: CL 11931544 via CL 11931546 via CL 11931547
#ROBOMERGE-BOT: (v656-11643781)
[CL 11931548 by matt kuhlenschmidt in Main branch]