Force editor progress dialog size update.

This commit is contained in:
bruvzg 2024-06-07 09:26:12 +03:00
parent 5833f59786
commit 564ebd7ba4
No known key found for this signature in database
GPG Key ID: 7960FCF39844EC38
2 changed files with 21 additions and 5 deletions

View File

@ -126,6 +126,16 @@ void BackgroundProgress::end_task(const String &p_task) {
ProgressDialog *ProgressDialog::singleton = nullptr; ProgressDialog *ProgressDialog::singleton = nullptr;
void ProgressDialog::_update_ui() {
// Run main loop for two frames.
if (is_inside_tree()) {
DisplayServer::get_singleton()->process_events();
#ifndef ANDROID_ENABLED
Main::iteration();
#endif
}
}
void ProgressDialog::_popup() { void ProgressDialog::_popup() {
Size2 ms = main->get_combined_minimum_size(); Size2 ms = main->get_combined_minimum_size();
ms.width = MAX(500 * EDSCALE, ms.width); ms.width = MAX(500 * EDSCALE, ms.width);
@ -138,7 +148,13 @@ void ProgressDialog::_popup() {
main->set_offset(SIDE_TOP, style->get_margin(SIDE_TOP)); main->set_offset(SIDE_TOP, style->get_margin(SIDE_TOP));
main->set_offset(SIDE_BOTTOM, -style->get_margin(SIDE_BOTTOM)); main->set_offset(SIDE_BOTTOM, -style->get_margin(SIDE_BOTTOM));
if (!is_inside_tree()) { if (is_inside_tree()) {
Rect2i adjust = _popup_adjust_rect();
if (adjust != Rect2i()) {
set_position(adjust.position);
set_size(adjust.size);
}
} else {
for (Window *window : host_windows) { for (Window *window : host_windows) {
if (window->has_focus()) { if (window->has_focus()) {
popup_exclusive_centered(window, ms); popup_exclusive_centered(window, ms);
@ -182,6 +198,7 @@ void ProgressDialog::add_task(const String &p_task, const String &p_label, int p
if (p_can_cancel) { if (p_can_cancel) {
cancel->grab_focus(); cancel->grab_focus();
} }
_update_ui();
} }
bool ProgressDialog::task_step(const String &p_task, const String &p_state, int p_step, bool p_force_redraw) { bool ProgressDialog::task_step(const String &p_task, const String &p_state, int p_step, bool p_force_redraw) {
@ -203,11 +220,8 @@ bool ProgressDialog::task_step(const String &p_task, const String &p_state, int
t.state->set_text(p_state); t.state->set_text(p_state);
last_progress_tick = OS::get_singleton()->get_ticks_usec(); last_progress_tick = OS::get_singleton()->get_ticks_usec();
DisplayServer::get_singleton()->process_events(); _update_ui();
#ifndef ANDROID_ENABLED
Main::iteration(); // this will not work on a lot of platforms, so it's only meant for the editor
#endif
return canceled; return canceled;
} }

View File

@ -85,6 +85,8 @@ class ProgressDialog : public PopupPanel {
void _popup(); void _popup();
void _cancel_pressed(); void _cancel_pressed();
void _update_ui();
bool canceled = false; bool canceled = false;
public: public: