[DisplayServer] Add error messages and descriptions to callbacks.

This commit is contained in:
bruvzg 2024-03-01 09:52:21 +02:00
parent be56cab58c
commit 714effdf07
No known key found for this signature in database
GPG Key ID: 7960FCF39844EC38
11 changed files with 77 additions and 15 deletions

View File

@ -63,6 +63,7 @@
<param index="2" name="callback" type="Callable" /> <param index="2" name="callback" type="Callable" />
<description> <description>
Creates a new application status indicator with the specified icon, tooltip, and activation callback. Creates a new application status indicator with the specified icon, tooltip, and activation callback.
[param callback] should take two arguments: the pressed mouse button (one of the [enum MouseButton] constants) and the click position in screen coordinates (a [Vector2i]).
</description> </description>
</method> </method>
<method name="cursor_get_shape" qualifiers="const"> <method name="cursor_get_shape" qualifiers="const">
@ -875,7 +876,7 @@
<param index="1" name="open_callback" type="Callable" /> <param index="1" name="open_callback" type="Callable" />
<param index="2" name="close_callback" type="Callable" /> <param index="2" name="close_callback" type="Callable" />
<description> <description>
Registers callables to emit when the menu is respectively about to show or closed. Registers callables to emit when the menu is respectively about to show or closed. Callback methods should have zero arguments.
</description> </description>
</method> </method>
<method name="has_feature" qualifiers="const"> <method name="has_feature" qualifiers="const">
@ -1187,7 +1188,7 @@
<param index="0" name="id" type="int" /> <param index="0" name="id" type="int" />
<param index="1" name="callback" type="Callable" /> <param index="1" name="callback" type="Callable" />
<description> <description>
Sets the application status indicator activation callback. Sets the application status indicator activation callback. [param callback] should take two arguments: [int] mouse button index (one of [enum MouseButton] values) and [Vector2i] click position in screen coordinates.
[b]Note:[/b] This method is implemented on macOS and Windows. [b]Note:[/b] This method is implemented on macOS and Windows.
</description> </description>
</method> </method>
@ -1568,7 +1569,7 @@
<param index="0" name="callback" type="Callable" /> <param index="0" name="callback" type="Callable" />
<param index="1" name="window_id" type="int" default="0" /> <param index="1" name="window_id" type="int" default="0" />
<description> <description>
Sets the [param callback] that should be called when files are dropped from the operating system's file manager to the window specified by [param window_id]. Sets the [param callback] that should be called when files are dropped from the operating system's file manager to the window specified by [param window_id]. [param callback] should take one [PackedStringArray] argument, which is the list of dropped files.
[b]Warning:[/b] Advanced users only! Adding such a callback to a [Window] node will override its default implementation, which can introduce bugs. [b]Warning:[/b] Advanced users only! Adding such a callback to a [Window] node will override its default implementation, which can introduce bugs.
[b]Note:[/b] This method is implemented on Windows, macOS, Linux (X11/Wayland), and Web. [b]Note:[/b] This method is implemented on Windows, macOS, Linux (X11/Wayland), and Web.
</description> </description>

View File

@ -671,7 +671,7 @@ void EditorNode::_notification(int p_what) {
callable_mp(this, &EditorNode::_begin_first_scan).call_deferred(); callable_mp(this, &EditorNode::_begin_first_scan).call_deferred();
DisplayServer::get_singleton()->set_system_theme_change_callback(callable_mp(this, &EditorNode::_update_theme)); DisplayServer::get_singleton()->set_system_theme_change_callback(callable_mp(this, &EditorNode::_update_theme).bind(false));
/* DO NOT LOAD SCENES HERE, WAIT FOR FILE SCANNING AND REIMPORT TO COMPLETE */ /* DO NOT LOAD SCENES HERE, WAIT FOR FILE SCANNING AND REIMPORT TO COMPLETE */
} break; } break;

View File

@ -399,7 +399,12 @@ void DisplayServerIOS::set_system_theme_change_callback(const Callable &p_callab
void DisplayServerIOS::emit_system_theme_changed() { void DisplayServerIOS::emit_system_theme_changed() {
if (system_theme_changed.is_valid()) { if (system_theme_changed.is_valid()) {
system_theme_changed.call(); Variant ret;
Callable::CallError ce;
system_theme_changed.callp(nullptr, 0, ret, ce);
if (ce.error != Callable::CallError::CALL_OK) {
ERR_PRINT(vformat("Failed to execute system theme changed callback: %s.", Variant::get_callable_error_text(system_theme_changed, nullptr, 0, ce)));
}
} }
} }

View File

@ -597,7 +597,12 @@ void FreeDesktopPortalDesktop::_thread_monitor(void *p_ud) {
void FreeDesktopPortalDesktop::_system_theme_changed_callback() { void FreeDesktopPortalDesktop::_system_theme_changed_callback() {
if (system_theme_changed.is_valid()) { if (system_theme_changed.is_valid()) {
system_theme_changed.call(); Variant ret;
Callable::CallError ce;
system_theme_changed.callp(nullptr, 0, ret, ce);
if (ce.error != Callable::CallError::CALL_OK) {
ERR_PRINT(vformat("Failed to execute system theme changed callback: %s.", Variant::get_callable_error_text(system_theme_changed, nullptr, 0, ce)));
}
} }
} }

View File

@ -1137,7 +1137,14 @@ void DisplayServerWayland::process_events() {
WindowData wd = main_window; WindowData wd = main_window;
if (wd.drop_files_callback.is_valid()) { if (wd.drop_files_callback.is_valid()) {
wd.drop_files_callback.call(dropfiles_msg->files); Variant v_files = dropfiles_msg->files;
const Variant *v_args[1] = { &v_files };
Variant ret;
Callable::CallError ce;
wd.drop_files_callback.callp((const Variant **)&v_args, 1, ret, ce);
if (ce.error != Callable::CallError::CALL_OK) {
ERR_PRINT(vformat("Failed to execute drop files callback: %s.", Variant::get_callable_error_text(wd.drop_files_callback, v_args, 1, ce)));
}
} }
} }
} }

View File

@ -5008,7 +5008,14 @@ void DisplayServerX11::process_events() {
} }
if (windows[window_id].drop_files_callback.is_valid()) { if (windows[window_id].drop_files_callback.is_valid()) {
windows[window_id].drop_files_callback.call(files); Variant v_files = files;
const Variant *v_args[1] = { &v_files };
Variant ret;
Callable::CallError ce;
windows[window_id].drop_files_callback.callp((const Variant **)&v_args, 1, ret, ce);
if (ce.error != Callable::CallError::CALL_OK) {
ERR_PRINT(vformat("Failed to execute drop files callback: %s.", Variant::get_callable_error_text(windows[window_id].drop_files_callback, v_args, 1, ce)));
}
} }
//Reply that all is well. //Reply that all is well.

View File

@ -907,7 +907,12 @@ void DisplayServerMacOS::set_system_theme_change_callback(const Callable &p_call
void DisplayServerMacOS::emit_system_theme_changed() { void DisplayServerMacOS::emit_system_theme_changed() {
if (system_theme_changed.is_valid()) { if (system_theme_changed.is_valid()) {
system_theme_changed.call(); Variant ret;
Callable::CallError ce;
system_theme_changed.callp(nullptr, 0, ret, ce);
if (ce.error != Callable::CallError::CALL_OK) {
ERR_PRINT(vformat("Failed to execute system theme changed callback: %s.", Variant::get_callable_error_text(system_theme_changed, nullptr, 0, ce)));
}
} }
} }

View File

@ -323,7 +323,14 @@
NSString *file = [NSURL URLWithString:url].path; NSString *file = [NSURL URLWithString:url].path;
files.push_back(String::utf8([file UTF8String])); files.push_back(String::utf8([file UTF8String]));
} }
wd.drop_files_callback.call(files); Variant v_files = files;
const Variant *v_args[1] = { &v_files };
Variant ret;
Callable::CallError ce;
wd.drop_files_callback.callp((const Variant **)&v_args, 1, ret, ce);
if (ce.error != Callable::CallError::CALL_OK) {
ERR_PRINT(vformat("Failed to execute drop files callback: %s.", Variant::get_callable_error_text(wd.drop_files_callback, v_args, 1, ce)));
}
} }
return NO; return NO;

View File

@ -66,10 +66,13 @@
if (cb.is_valid()) { if (cb.is_valid()) {
Variant v_button = index; Variant v_button = index;
Variant v_pos = ds->mouse_get_position(); Variant v_pos = ds->mouse_get_position();
Variant *v_args[2] = { &v_button, &v_pos }; const Variant *v_args[2] = { &v_button, &v_pos };
Variant ret; Variant ret;
Callable::CallError ce; Callable::CallError ce;
cb.callp((const Variant **)&v_args, 2, ret, ce); cb.callp((const Variant **)&v_args, 2, ret, ce);
if (ce.error != Callable::CallError::CALL_OK) {
ERR_PRINT(vformat("Failed to execute status indicator callback: %s.", Variant::get_callable_error_text(cb, v_args, 2, ce)));
}
} }
} }

View File

@ -112,7 +112,14 @@ void DisplayServerWeb::_drop_files_js_callback(const Vector<String> &p_files) {
if (!ds->drop_files_callback.is_valid()) { if (!ds->drop_files_callback.is_valid()) {
return; return;
} }
ds->drop_files_callback.call(p_files); Variant v_files = p_files;
const Variant *v_args[1] = { &v_files };
Variant ret;
Callable::CallError ce;
ds->drop_files_callback.callp((const Variant **)&v_args, 1, ret, ce);
if (ce.error != Callable::CallError::CALL_OK) {
ERR_PRINT(vformat("Failed to execute drop files callback: %s.", Variant::get_callable_error_text(ds->drop_files_callback, v_args, 1, ce)));
}
} }
// Web quit request callback. // Web quit request callback.

View File

@ -3842,7 +3842,12 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
} }
} }
if (system_theme_changed.is_valid()) { if (system_theme_changed.is_valid()) {
system_theme_changed.call(); Variant ret;
Callable::CallError ce;
system_theme_changed.callp(nullptr, 0, ret, ce);
if (ce.error != Callable::CallError::CALL_OK) {
ERR_PRINT(vformat("Failed to execute system theme changed callback: %s.", Variant::get_callable_error_text(system_theme_changed, nullptr, 0, ce)));
}
} }
} break; } break;
case WM_THEMECHANGED: { case WM_THEMECHANGED: {
@ -3897,10 +3902,13 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
} else if (indicators[iid].callback.is_valid()) { } else if (indicators[iid].callback.is_valid()) {
Variant v_button = mb; Variant v_button = mb;
Variant v_pos = mouse_get_position(); Variant v_pos = mouse_get_position();
Variant *v_args[2] = { &v_button, &v_pos }; const Variant *v_args[2] = { &v_button, &v_pos };
Variant ret; Variant ret;
Callable::CallError ce; Callable::CallError ce;
indicators[iid].callback.callp((const Variant **)&v_args, 2, ret, ce); indicators[iid].callback.callp((const Variant **)&v_args, 2, ret, ce);
if (ce.error != Callable::CallError::CALL_OK) {
ERR_PRINT(vformat("Failed to execute status indicator callback: %s.", Variant::get_callable_error_text(indicators[iid].callback, v_args, 2, ce)));
}
} }
} }
return 0; return 0;
@ -4868,7 +4876,14 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
} }
if (files.size() && windows[window_id].drop_files_callback.is_valid()) { if (files.size() && windows[window_id].drop_files_callback.is_valid()) {
windows[window_id].drop_files_callback.call(files); Variant v_files = files;
const Variant *v_args[1] = { &v_files };
Variant ret;
Callable::CallError ce;
windows[window_id].drop_files_callback.callp((const Variant **)&v_args, 1, ret, ce);
if (ce.error != Callable::CallError::CALL_OK) {
ERR_PRINT(vformat("Failed to execute drop files callback: %s.", Variant::get_callable_error_text(windows[window_id].drop_files_callback, v_args, 1, ce)));
}
} }
} break; } break;
default: { default: {