diff --git a/src/apps/webpositive/BrowserWindow.cpp b/src/apps/webpositive/BrowserWindow.cpp index 46b04fed51..a2ff746a89 100644 --- a/src/apps/webpositive/BrowserWindow.cpp +++ b/src/apps/webpositive/BrowserWindow.cpp @@ -527,7 +527,7 @@ BrowserWindow::MessageReceived(BMessage* message) int32 index; if (message->FindInt32("tab index", &index) != B_OK) index = fTabManager->SelectedTabIndex(); - delete fTabManager->RemoveTab(index); + _ShutdownTab(index); _UpdateTabGroupVisibility(); } else PostMessage(B_QUIT_REQUESTED); @@ -581,7 +581,7 @@ BrowserWindow::QuitRequested() // Iterate over all tabs to delete all BWebViews. // Do this here, so WebKit tear down happens earlier. while (fTabManager->CountTabs() > 0) - delete fTabManager->RemoveTab(0L); + _ShutdownTab(0); SetCurrentWebView(0); BMessage message(WINDOW_CLOSED); @@ -900,3 +900,15 @@ BrowserWindow::_UpdateTabGroupVisibility() Unlock(); } } + + +void +BrowserWindow::_ShutdownTab(int32 index) +{ + BView* view = fTabManager->RemoveTab(index); + BWebView* webView = dynamic_cast(view); + if (webView) + webView->Shutdown(); + else + delete view; +} diff --git a/src/apps/webpositive/BrowserWindow.h b/src/apps/webpositive/BrowserWindow.h index 0fafb1ec2e..e52048f128 100644 --- a/src/apps/webpositive/BrowserWindow.h +++ b/src/apps/webpositive/BrowserWindow.h @@ -118,6 +118,7 @@ private: private: void _UpdateTitle(const BString &title); void _UpdateTabGroupVisibility(); + void _ShutdownTab(int32 index); private: BMessenger fDownloadListener;