Skip to content

Commit 12b4a26

Browse files
committed
Merge pull request #67730 from KoBeWi/late_to_the_call
Add call_deferred() method to Callable
2 parents 1836b4b + 1778301 commit 12b4a26

File tree

8 files changed

+20
-17
lines changed

8 files changed

+20
-17
lines changed

core/variant/callable.h

+10
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,16 @@ class Callable {
7373
void call_deferredp(const Variant **p_arguments, int p_argcount) const;
7474
Variant callv(const Array &p_arguments) const;
7575

76+
template <typename... VarArgs>
77+
void call_deferred(VarArgs... p_args) const {
78+
Variant args[sizeof...(p_args) + 1] = { p_args..., 0 }; // +1 makes sure zero sized arrays are also supported.
79+
const Variant *argptrs[sizeof...(p_args) + 1];
80+
for (uint32_t i = 0; i < sizeof...(p_args); i++) {
81+
argptrs[i] = &args[i];
82+
}
83+
return call_deferredp(sizeof...(p_args) == 0 ? nullptr : (const Variant **)argptrs, sizeof...(p_args));
84+
}
85+
7686
Error rpcp(int p_id, const Variant **p_arguments, int p_argcount, CallError &r_call_error) const;
7787

7888
_FORCE_INLINE_ bool is_null() const {

editor/editor_command_palette.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ void EditorCommandPalette::_add_command(String p_command_name, String p_key_name
226226
void EditorCommandPalette::execute_command(String &p_command_key) {
227227
ERR_FAIL_COND_MSG(!commands.has(p_command_key), p_command_key + " not found.");
228228
commands[p_command_key].last_used = OS::get_singleton()->get_unix_time();
229-
commands[p_command_key].callable.call_deferredp(nullptr, 0);
229+
commands[p_command_key].callable.call_deferred();
230230
_save_history();
231231
}
232232

editor/plugins/texture_region_editor_plugin.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ void TextureRegionEditor::_region_draw() {
242242
hscroll->set_value((hscroll->get_min() + hscroll->get_max() - hscroll->get_page()) / 2);
243243
vscroll->set_value((vscroll->get_min() + vscroll->get_max() - vscroll->get_page()) / 2);
244244
// This ensures that the view is updated correctly.
245-
callable_mp(this, &TextureRegionEditor::_pan_callback).bind(Vector2(1, 0)).call_deferredp(nullptr, 0);
245+
callable_mp(this, &TextureRegionEditor::_pan_callback).bind(Vector2(1, 0)).call_deferred();
246246
request_center = false;
247247
}
248248

scene/3d/collision_object_3d.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ bool CollisionObject3D::_are_collision_shapes_visible() {
330330
void CollisionObject3D::_update_shape_data(uint32_t p_owner) {
331331
if (_are_collision_shapes_visible()) {
332332
if (debug_shapes_to_update.is_empty()) {
333-
callable_mp(this, &CollisionObject3D::_update_debug_shapes).call_deferredp({}, 0);
333+
callable_mp(this, &CollisionObject3D::_update_debug_shapes).call_deferred();
334334
}
335335
debug_shapes_to_update.insert(p_owner);
336336
}

scene/gui/option_button.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ void OptionButton::_queue_refresh_cache() {
451451
}
452452
cache_refresh_pending = true;
453453

454-
callable_mp(this, &OptionButton::_refresh_size_cache).call_deferredp(nullptr, 0);
454+
callable_mp(this, &OptionButton::_refresh_size_cache).call_deferred();
455455
}
456456

457457
void OptionButton::select(int p_idx) {

servers/display_server.cpp

+2-9
Original file line numberDiff line numberDiff line change
@@ -302,19 +302,12 @@ void DisplayServer::tts_post_utterance_event(TTSUtteranceEvent p_event, int p_id
302302
case DisplayServer::TTS_UTTERANCE_ENDED:
303303
case DisplayServer::TTS_UTTERANCE_CANCELED: {
304304
if (utterance_callback[p_event].is_valid()) {
305-
Variant args[1];
306-
args[0] = p_id;
307-
const Variant *argp[] = { &args[0] };
308-
utterance_callback[p_event].call_deferredp(argp, 1); // Should be deferred, on some platforms utterance events can be called from different threads in a rapid succession.
305+
utterance_callback[p_event].call_deferred(p_id); // Should be deferred, on some platforms utterance events can be called from different threads in a rapid succession.
309306
}
310307
} break;
311308
case DisplayServer::TTS_UTTERANCE_BOUNDARY: {
312309
if (utterance_callback[p_event].is_valid()) {
313-
Variant args[2];
314-
args[0] = p_pos;
315-
args[1] = p_id;
316-
const Variant *argp[] = { &args[0], &args[1] };
317-
utterance_callback[p_event].call_deferredp(argp, 2); // Should be deferred, on some platforms utterance events can be called from different threads in a rapid succession.
310+
utterance_callback[p_event].call_deferred(p_pos, p_id); // Should be deferred, on some platforms utterance events can be called from different threads in a rapid succession.
318311
}
319312
} break;
320313
default:

servers/rendering/renderer_canvas_cull.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1964,7 +1964,7 @@ void RendererCanvasCull::update_visibility_notifiers() {
19641964

19651965
if (!visibility_notifier->enter_callable.is_null()) {
19661966
if (RSG::threaded) {
1967-
visibility_notifier->enter_callable.call_deferredp(nullptr, 0);
1967+
visibility_notifier->enter_callable.call_deferred();
19681968
} else {
19691969
Callable::CallError ce;
19701970
Variant ret;
@@ -1977,7 +1977,7 @@ void RendererCanvasCull::update_visibility_notifiers() {
19771977

19781978
if (!visibility_notifier->exit_callable.is_null()) {
19791979
if (RSG::threaded) {
1980-
visibility_notifier->exit_callable.call_deferredp(nullptr, 0);
1980+
visibility_notifier->exit_callable.call_deferred();
19811981
} else {
19821982
Callable::CallError ce;
19831983
Variant ret;

servers/rendering/renderer_rd/storage_rd/utilities.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ void Utilities::visibility_notifier_call(RID p_notifier, bool p_enter, bool p_de
200200
if (p_enter) {
201201
if (!vn->enter_callback.is_null()) {
202202
if (p_deferred) {
203-
vn->enter_callback.call_deferredp(nullptr, 0);
203+
vn->enter_callback.call_deferred();
204204
} else {
205205
Variant r;
206206
Callable::CallError ce;
@@ -210,7 +210,7 @@ void Utilities::visibility_notifier_call(RID p_notifier, bool p_enter, bool p_de
210210
} else {
211211
if (!vn->exit_callback.is_null()) {
212212
if (p_deferred) {
213-
vn->exit_callback.call_deferredp(nullptr, 0);
213+
vn->exit_callback.call_deferred();
214214
} else {
215215
Variant r;
216216
Callable::CallError ce;

0 commit comments

Comments
 (0)