LibGUI: Don't center dialog within parent if window is not visible

Windows have an initial off-screen rect, so when a dialog is created and
shown before its parent window, in which it is centered, it would be
invisible to the user.

Fixes #3172.
This commit is contained in:
Linus Groh 2020-08-16 13:05:42 +02:00 committed by Andreas Kling
parent 115c124a77
commit 55bd54f91f
Notes: sideshowbarker 2024-07-19 03:33:48 +09:00

View File

@ -25,7 +25,6 @@
*/
#include <LibCore/EventLoop.h>
#include <LibGUI/Desktop.h>
#include <LibGUI/Dialog.h>
#include <LibGUI/Event.h>
@ -45,14 +44,18 @@ int Dialog::exec()
{
ASSERT(!m_event_loop);
m_event_loop = make<Core::EventLoop>();
auto new_rect = rect();
if (parent() && parent()->is_window()) {
auto& parent_window = *static_cast<Window*>(parent());
new_rect.center_within(parent_window.rect());
if (parent_window.is_visible()) {
auto new_rect = rect();
new_rect.center_within(parent_window.rect());
set_rect(new_rect);
} else {
center_on_screen();
}
} else {
new_rect.center_within(Desktop::the().rect());
center_on_screen();
}
set_rect(new_rect);
show();
auto result = m_event_loop->exec();
m_event_loop = nullptr;