Compare commits

...

1 Commits

Author SHA1 Message Date
Shelley Vohr
60cebaba4f fix: draggable regions removed on win.removeBrowserView(null) 2021-09-23 10:36:35 +02:00
3 changed files with 40 additions and 25 deletions

View File

@@ -382,21 +382,32 @@ void BrowserWindow::SetBrowserView(v8::Local<v8::Value> value) {
BaseWindow::ResetBrowserViews();
BaseWindow::AddBrowserView(value);
#if defined(OS_MAC)
UpdateDraggableRegions(draggable_regions_);
if (!draggable_regions_.empty())
UpdateDraggableRegions(draggable_regions_);
#endif
}
void BrowserWindow::AddBrowserView(v8::Local<v8::Value> value) {
BaseWindow::AddBrowserView(value);
#if defined(OS_MAC)
UpdateDraggableRegions(draggable_regions_);
if (!draggable_regions_.empty()) {
UpdateDraggableRegions(draggable_regions_);
} else {
// It could be the case that there is a BrowserView but that the main
// window does not have a webContents. In this case, the view's own
// draggable regions might not be properly updated and so we do that here.
for (NativeBrowserView* view : window_->browser_views()) {
view->UpdateDraggableRegions(view->GetDraggableRegions());
}
}
#endif
}
void BrowserWindow::RemoveBrowserView(v8::Local<v8::Value> value) {
BaseWindow::RemoveBrowserView(value);
#if defined(OS_MAC)
UpdateDraggableRegions(draggable_regions_);
if (!draggable_regions_.empty())
UpdateDraggableRegions(draggable_regions_);
#endif
}
@@ -404,19 +415,38 @@ void BrowserWindow::SetTopBrowserView(v8::Local<v8::Value> value,
gin_helper::Arguments* args) {
BaseWindow::SetTopBrowserView(value, args);
#if defined(OS_MAC)
UpdateDraggableRegions(draggable_regions_);
if (!draggable_regions_.empty()) {
UpdateDraggableRegions(draggable_regions_);
} else {
// It could be the case that there is a BrowserView but that the main
// window does not have a webContents. In this case, the view's own
// draggable regions might not be properly updated and so we do that here.
for (NativeBrowserView* view : window_->browser_views()) {
view->UpdateDraggableRegions(view->GetDraggableRegions());
}
}
#endif
}
void BrowserWindow::ResetBrowserViews() {
BaseWindow::ResetBrowserViews();
#if defined(OS_MAC)
UpdateDraggableRegions(draggable_regions_);
if (!draggable_regions_.empty())
UpdateDraggableRegions(draggable_regions_);
#endif
}
void BrowserWindow::OnDevToolsResized() {
UpdateDraggableRegions(draggable_regions_);
if (!draggable_regions_.empty()) {
UpdateDraggableRegions(draggable_regions_);
} else {
// It could be the case that there is a BrowserView but that the main
// window does not have a webContents. In this case, the view's own
// draggable regions might not be properly updated and so we do that here.
for (NativeBrowserView* view : window_->browser_views()) {
view->UpdateDraggableRegions(view->GetDraggableRegions());
}
}
}
void BrowserWindow::SetVibrancy(v8::Isolate* isolate,

View File

@@ -39,10 +39,7 @@ void BrowserWindow::OverrideNSWindowContentView(
void BrowserWindow::UpdateDraggableRegions(
const std::vector<mojom::DraggableRegionPtr>& regions) {
if (window_->has_frame())
return;
if (!web_contents())
if (window_->has_frame() || !web_contents())
return;
// All ControlRegionViews should be added as children of the WebContentsView,

View File

@@ -1203,13 +1203,9 @@ void NativeWindowViews::SetMenu(ElectronMenuModel* menu_model) {
}
void NativeWindowViews::AddBrowserView(NativeBrowserView* view) {
if (!content_view())
if (!content_view() || !view)
return;
if (!view) {
return;
}
add_browser_view(view);
if (view->GetInspectableWebContentsView())
content_view()->AddChildView(
@@ -1217,13 +1213,9 @@ void NativeWindowViews::AddBrowserView(NativeBrowserView* view) {
}
void NativeWindowViews::RemoveBrowserView(NativeBrowserView* view) {
if (!content_view())
if (!content_view() || !view)
return;
if (!view) {
return;
}
if (view->GetInspectableWebContentsView())
content_view()->RemoveChildView(
view->GetInspectableWebContentsView()->GetView());
@@ -1231,13 +1223,9 @@ void NativeWindowViews::RemoveBrowserView(NativeBrowserView* view) {
}
void NativeWindowViews::SetTopBrowserView(NativeBrowserView* view) {
if (!content_view())
if (!content_view() || !view)
return;
if (!view) {
return;
}
remove_browser_view(view);
add_browser_view(view);