mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-10 13:00:29 +03:00
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:
parent
115c124a77
commit
55bd54f91f
Notes:
sideshowbarker
2024-07-19 03:33:48 +09:00
Author: https://github.com/linusg Commit: https://github.com/SerenityOS/serenity/commit/55bd54f91fe Pull-request: https://github.com/SerenityOS/serenity/pull/3174 Issue: https://github.com/SerenityOS/serenity/issues/3172
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user