diff --git a/src/apps/webpositive/BrowserWindow.cpp b/src/apps/webpositive/BrowserWindow.cpp index 4b6f347769..5b11c79aca 100644 --- a/src/apps/webpositive/BrowserWindow.cpp +++ b/src/apps/webpositive/BrowserWindow.cpp @@ -1245,12 +1245,12 @@ BrowserWindow::MainDocumentError(const BString& failingURL, void BrowserWindow::TitleChanged(const BString& title, BWebView* view) { - for (int32 i = 0; i < fTabManager->CountTabs(); i++) { - if (fTabManager->ViewForTab(i) == view) { - fTabManager->SetTabLabel(i, title); - break; - } - } + int32 tabIndex = fTabManager->TabForView(view); + if (tabIndex < 0) + return; + + fTabManager->SetTabLabel(tabIndex, title); + if (view != CurrentWebView()) return; @@ -1261,6 +1261,11 @@ BrowserWindow::TitleChanged(const BString& title, BWebView* view) void BrowserWindow::IconReceived(const BBitmap* icon, BWebView* view) { + // The view may already be gone, since this notification arrives + // asynchronously. + if (!fTabManager->HasView(view)) + return; + _SetPageIcon(view, icon); } diff --git a/src/apps/webpositive/tabview/TabManager.cpp b/src/apps/webpositive/tabview/TabManager.cpp index 743b83916a..4a26c33271 100644 --- a/src/apps/webpositive/tabview/TabManager.cpp +++ b/src/apps/webpositive/tabview/TabManager.cpp @@ -746,6 +746,13 @@ TabManager::TabForView(const BView* containedView) const } +bool +TabManager::HasView(const BView* containedView) const +{ + return TabForView(containedView) >= 0; +} + + void TabManager::SelectTab(int32 tabIndex) { diff --git a/src/apps/webpositive/tabview/TabManager.h b/src/apps/webpositive/tabview/TabManager.h index 6558a1620f..4ccc64d35e 100644 --- a/src/apps/webpositive/tabview/TabManager.h +++ b/src/apps/webpositive/tabview/TabManager.h @@ -63,6 +63,7 @@ public: BView* ViewForTab(int32 tabIndex) const; int32 TabForView(const BView* containedView) const; + bool HasView(const BView* containedView) const; void SelectTab(int32 tabIndex); void SelectTab(const BView* containedView);