Merge pull request #92856 from bruvzg/ed_prog_upd

Force editor progress dialog size update.
This commit is contained in:
Rémi Verschelde 2024-06-11 10:48:52 +02:00
commit a95703892d
No known key found for this signature in database
GPG key ID: C3336907360768E1
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;
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() {
Size2 ms = main->get_combined_minimum_size();
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_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) {
if (window->has_focus()) {
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) {
cancel->grab_focus();
}
_update_ui();
}
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);
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;
}

View file

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