Move accessibility methods/enums from DisplayServer to the AccessibilityServer dedicated singleton.
This commit is contained in:
parent
4683f3806f
commit
1306221592
88 changed files with 3156 additions and 1551 deletions
|
|
@ -71,6 +71,7 @@
|
|||
#include "servers/audio/audio_driver_dummy.h"
|
||||
#include "servers/audio/audio_server.h"
|
||||
#include "servers/camera/camera_server.h"
|
||||
#include "servers/display/accessibility_server.h"
|
||||
#include "servers/display/display_server.h"
|
||||
#include "servers/movie_writer/movie_writer.h"
|
||||
#include "servers/register_server_types.h"
|
||||
|
|
@ -175,6 +176,7 @@ static SteamTracker *steam_tracker = nullptr;
|
|||
// Initialized in setup2()
|
||||
static AudioServer *audio_server = nullptr;
|
||||
static CameraServer *camera_server = nullptr;
|
||||
static AccessibilityServer *accessibility_server = nullptr;
|
||||
static DisplayServer *display_server = nullptr;
|
||||
static RenderingServer *rendering_server = nullptr;
|
||||
static TextServerManager *tsman = nullptr;
|
||||
|
|
@ -203,7 +205,8 @@ static int audio_driver_idx = -1;
|
|||
|
||||
// Engine config/tools
|
||||
|
||||
static DisplayServer::AccessibilityMode accessibility_mode = DisplayServer::AccessibilityMode::ACCESSIBILITY_AUTO;
|
||||
static AccessibilityServerEnums::AccessibilityMode accessibility_mode = AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_AUTO;
|
||||
static String accessibility_driver_name;
|
||||
static bool accessibility_mode_set = false;
|
||||
static bool single_window = false;
|
||||
static bool editor = false;
|
||||
|
|
@ -408,6 +411,7 @@ void finalize_display() {
|
|||
memdelete(rendering_server);
|
||||
|
||||
memdelete(display_server);
|
||||
memdelete(accessibility_server);
|
||||
}
|
||||
|
||||
void initialize_theme_db() {
|
||||
|
|
@ -634,6 +638,7 @@ void Main::print_help(const char *p_binary) {
|
|||
#endif
|
||||
print_help_option("--wid <window_id>", "Request parented to window.\n");
|
||||
print_help_option("--accessibility <mode>", "Select accessibility mode ['auto' (when screen reader is running, default), 'always', 'disabled'].\n");
|
||||
print_help_option("--accessibility-driver <driver>", "Select accessibility driver ['accesskit', 'dummy'].\n");
|
||||
|
||||
print_help_title("Debug options");
|
||||
print_help_option("-d, --debug", "Debug (local stdout debugger).\n");
|
||||
|
|
@ -1364,13 +1369,13 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|||
if (N) {
|
||||
String string = N->get();
|
||||
if (string == "auto") {
|
||||
accessibility_mode = DisplayServer::AccessibilityMode::ACCESSIBILITY_AUTO;
|
||||
accessibility_mode = AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_AUTO;
|
||||
accessibility_mode_set = true;
|
||||
} else if (string == "always") {
|
||||
accessibility_mode = DisplayServer::AccessibilityMode::ACCESSIBILITY_ALWAYS;
|
||||
accessibility_mode = AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_ALWAYS;
|
||||
accessibility_mode_set = true;
|
||||
} else if (string == "disabled") {
|
||||
accessibility_mode = DisplayServer::AccessibilityMode::ACCESSIBILITY_DISABLED;
|
||||
accessibility_mode = AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_DISABLED;
|
||||
accessibility_mode_set = true;
|
||||
} else {
|
||||
OS::get_singleton()->print("Accessibility mode argument not recognized, aborting.\n");
|
||||
|
|
@ -1381,6 +1386,15 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|||
OS::get_singleton()->print("Missing accessibility mode argument, aborting.\n");
|
||||
goto error;
|
||||
}
|
||||
} else if (arg == "--accessibility-driver") {
|
||||
if (N) {
|
||||
String string = N->get();
|
||||
accessibility_driver_name = string;
|
||||
N = N->next();
|
||||
} else {
|
||||
OS::get_singleton()->print("Missing accessibility driver argument, aborting.\n");
|
||||
goto error;
|
||||
}
|
||||
} else if (arg == "-t" || arg == "--always-on-top") { // force always-on-top window
|
||||
|
||||
init_always_on_top = true;
|
||||
|
|
@ -3236,18 +3250,67 @@ Error Main::setup2(bool p_show_boot_logo) {
|
|||
if (!accessibility_mode_set) {
|
||||
#ifdef TOOLS_ENABLED
|
||||
if (editor || project_manager || cmdline_tool) {
|
||||
accessibility_mode = (DisplayServer::AccessibilityMode)accessibility_mode_editor;
|
||||
accessibility_mode = (AccessibilityServerEnums::AccessibilityMode)accessibility_mode_editor;
|
||||
} else {
|
||||
#else
|
||||
{
|
||||
#endif
|
||||
accessibility_mode = (DisplayServer::AccessibilityMode)GLOBAL_GET("accessibility/general/accessibility_support").operator int64_t();
|
||||
accessibility_mode = (AccessibilityServerEnums::AccessibilityMode)GLOBAL_GET("accessibility/general/accessibility_support").operator int64_t();
|
||||
}
|
||||
}
|
||||
DisplayServer::accessibility_set_mode(accessibility_mode);
|
||||
if (accessibility_driver_name.is_empty()) {
|
||||
if (!editor && !project_manager) {
|
||||
accessibility_driver_name = GLOBAL_GET("accessibility/general/accessibility_driver");
|
||||
} else {
|
||||
accessibility_driver_name = "accesskit";
|
||||
}
|
||||
}
|
||||
if (display_driver == NULL_DISPLAY_DRIVER || display_driver == EMBEDDED_DISPLAY_DRIVER || accessibility_mode == AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_DISABLED) {
|
||||
accessibility_driver_name = "dummy";
|
||||
}
|
||||
int accessibility_driver_idx = -1;
|
||||
|
||||
if (accessibility_driver_name.is_empty() || accessibility_driver_name == "default") {
|
||||
accessibility_driver_idx = 0;
|
||||
} else {
|
||||
for (int i = 0; i < AccessibilityServer::get_create_function_count(); i++) {
|
||||
String name = AccessibilityServer::get_create_function_name(i);
|
||||
if (accessibility_driver_name == name) {
|
||||
accessibility_driver_idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (accessibility_driver_idx < 0) {
|
||||
// If the requested driver wasn't found, pick the first entry.
|
||||
// If all else failed it would be the headless server.
|
||||
accessibility_driver_idx = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Error err;
|
||||
accessibility_server = AccessibilityServer::create(accessibility_driver_idx, err);
|
||||
if (err != OK || accessibility_server == nullptr) {
|
||||
String last_name = AccessibilityServer::get_create_function_name(accessibility_driver_idx);
|
||||
|
||||
for (int i = 0; i < AccessibilityServer::get_create_function_count() - 1; i++) {
|
||||
if (i == accessibility_driver_idx) {
|
||||
continue; // Don't try the same twice.
|
||||
}
|
||||
String name = AccessibilityServer::get_create_function_name(i);
|
||||
WARN_PRINT(vformat("Accessibility driver %s failed, falling back to %s.", last_name, name));
|
||||
|
||||
accessibility_server = AccessibilityServer::create(i, err);
|
||||
if (err == OK && accessibility_server != nullptr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (accessibility_server) {
|
||||
accessibility_server->set_mode(accessibility_mode);
|
||||
}
|
||||
|
||||
String rendering_driver = OS::get_singleton()->get_current_rendering_driver_name();
|
||||
Error err;
|
||||
display_server = DisplayServer::create(display_driver_idx, rendering_driver, window_mode, window_vsync_mode, window_flags, window_position, window_size, init_screen, context, init_embed_parent_window_id, err);
|
||||
if (err != OK || display_server == nullptr) {
|
||||
String last_name = DisplayServer::get_create_function_name(display_driver_idx);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue