fix: reparenting after BrowserWindow.destroy()
(#39062)
fix: reparenting after BrowserWindow.destroy()
This commit is contained in:
parent
fa5b1be6f3
commit
695fcf3cb2
4 changed files with 46 additions and 9 deletions
|
@ -434,7 +434,12 @@ void NativeWindowMac::Close() {
|
|||
}
|
||||
|
||||
// Ensure we're detached from the parent window before closing.
|
||||
RemoveChildFromParentWindow(this);
|
||||
RemoveChildFromParentWindow();
|
||||
|
||||
while (!child_windows_.empty()) {
|
||||
auto* child = child_windows_.back();
|
||||
child->RemoveChildFromParentWindow();
|
||||
}
|
||||
|
||||
// If a sheet is attached to the window when we call
|
||||
// [window_ performClose:nil], the window won't close properly
|
||||
|
@ -453,7 +458,14 @@ void NativeWindowMac::Close() {
|
|||
}
|
||||
|
||||
void NativeWindowMac::CloseImmediately() {
|
||||
RemoveChildFromParentWindow(this);
|
||||
// Ensure we're detached from the parent window before closing.
|
||||
RemoveChildFromParentWindow();
|
||||
|
||||
while (!child_windows_.empty()) {
|
||||
auto* child = child_windows_.back();
|
||||
child->RemoveChildFromParentWindow();
|
||||
}
|
||||
|
||||
[window_ close];
|
||||
}
|
||||
|
||||
|
@ -642,9 +654,11 @@ void NativeWindowMac::RemoveChildWindow(NativeWindow* child) {
|
|||
[window_ removeChildWindow:child->GetNativeWindow().GetNativeNSWindow()];
|
||||
}
|
||||
|
||||
void NativeWindowMac::RemoveChildFromParentWindow(NativeWindow* child) {
|
||||
if (parent())
|
||||
parent()->RemoveChildWindow(child);
|
||||
void NativeWindowMac::RemoveChildFromParentWindow() {
|
||||
if (parent() && !is_modal()) {
|
||||
parent()->RemoveChildWindow(this);
|
||||
NativeWindow::SetParentWindow(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
void NativeWindowMac::AttachChildren() {
|
||||
|
@ -1842,12 +1856,13 @@ void NativeWindowMac::InternalSetParentWindow(NativeWindow* new_parent,
|
|||
return;
|
||||
|
||||
// Remove current parent window.
|
||||
RemoveChildFromParentWindow(this);
|
||||
RemoveChildFromParentWindow();
|
||||
|
||||
// Set new parent window.
|
||||
if (new_parent && attach) {
|
||||
if (new_parent) {
|
||||
new_parent->add_child_window(this);
|
||||
new_parent->AttachChildren();
|
||||
if (attach)
|
||||
new_parent->AttachChildren();
|
||||
}
|
||||
|
||||
NativeWindow::SetParentWindow(new_parent);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue