diff --git a/src/apps/webpositive/BrowserApp.cpp b/src/apps/webpositive/BrowserApp.cpp index 5f8972a5f4..4efe1858e2 100644 --- a/src/apps/webpositive/BrowserApp.cpp +++ b/src/apps/webpositive/BrowserApp.cpp @@ -336,7 +336,10 @@ BrowserApp::_CreateNewPage(const BString& url, bool fullscreen) continue; if (webWindow->Lock()) { if (webWindow->Workspaces() & workspace) { - webWindow->CreateNewTab(url, true); + if (webWindow->IsBlankTab()) + webWindow->CurrentWebView()->LoadURL(url); + else + webWindow->CreateNewTab(url, true); webWindow->Activate(); loadedInWindowOnCurrentWorkspace = true; } diff --git a/src/apps/webpositive/BrowserWindow.cpp b/src/apps/webpositive/BrowserWindow.cpp index 09d90210c7..33c347aa15 100644 --- a/src/apps/webpositive/BrowserWindow.cpp +++ b/src/apps/webpositive/BrowserWindow.cpp @@ -474,7 +474,10 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings, kSettingsKeyAutoHideInterfaceInFullscreenMode, fAutoHideInterfaceInFullscreenMode)); - AddShortcut('F', B_COMMAND_KEY | B_SHIFT_KEY, new BMessage(EDIT_HIDE_FIND_GROUP)); + AddShortcut('F', B_COMMAND_KEY | B_SHIFT_KEY, + new BMessage(EDIT_HIDE_FIND_GROUP)); + // TODO: Should be a different shortcut, H is usually for Find selection. + AddShortcut('H', B_COMMAND_KEY, new BMessage(HOME)); // Add shortcuts to select a particular tab for (int32 i = 1; i <= 9; i++) { @@ -993,6 +996,17 @@ BrowserWindow::SetCurrentWebView(BWebView* webView) } +bool +BrowserWindow::IsBlankTab() const +{ + if (CurrentWebView() == NULL) + return false; + BString requestedURL = CurrentWebView()->MainFrameRequestedURL(); + return requestedURL.Length() == 0 + || requestedURL == _NewTabURL(fTabManager->CountTabs() == 1); +} + + void BrowserWindow::CreateNewTab(const BString& _url, bool select, BWebView* webView) { @@ -1006,25 +1020,8 @@ BrowserWindow::CreateNewTab(const BString& _url, bool select, BWebView* webView) fTabManager->AddTab(webView, "New tab"); BString url(_url); - if (applyNewPagePolicy && url.Length() == 0) { - uint32 policy = isNewWindow ? fNewWindowPolicy : fNewTabPolicy; - // Implement new page policy - switch (policy) { - case OpenStartPage: - url = fStartPageURL; - break; - case OpenSearchPage: - url = fSearchPageURL; - break; - case CloneCurrentPage: - if (CurrentWebView() != NULL) - url = CurrentWebView()->MainFrameURL(); - break; - case OpenBlankPage: - default: - break; - } - } + if (applyNewPagePolicy && url.Length() == 0) + url = _NewTabURL(isNewWindow); if (url.Length() > 0) webView->LoadURL(url.String()); @@ -1980,3 +1977,27 @@ BrowserWindow::_ShowInterface(bool show) fLoadingProgressBar->Hide(); } + +BString +BrowserWindow::_NewTabURL(bool isNewWindow) const +{ + BString url; + uint32 policy = isNewWindow ? fNewWindowPolicy : fNewTabPolicy; + // Implement new page policy + switch (policy) { + case OpenStartPage: + url = fStartPageURL; + break; + case OpenSearchPage: + url = fSearchPageURL; + break; + case CloneCurrentPage: + if (CurrentWebView() != NULL) + url = CurrentWebView()->MainFrameURL(); + break; + case OpenBlankPage: + default: + break; + } + return url; +} diff --git a/src/apps/webpositive/BrowserWindow.h b/src/apps/webpositive/BrowserWindow.h index 6ef6f4d034..9e85994e51 100644 --- a/src/apps/webpositive/BrowserWindow.h +++ b/src/apps/webpositive/BrowserWindow.h @@ -104,6 +104,7 @@ public: virtual void SetCurrentWebView(BWebView* view); + bool IsBlankTab() const; void CreateNewTab(const BString& url, bool select, BWebView* webView = 0); @@ -187,6 +188,8 @@ private: void _CheckAutoHideInterface(); void _ShowInterface(bool show); + BString _NewTabURL(bool isNewWindow) const; + private: BMenu* fHistoryMenu; int32 fHistoryMenuFixedItemCount;