From 4c1d001d51545424a10792804f8885d2bc257f60 Mon Sep 17 00:00:00 2001 From: syedsouban Date: Tue, 9 Apr 2019 01:30:12 +0000 Subject: [PATCH] WebPositive: add search engine shortcuts Currently supports: - Google (g) - Bing (b) - Wikipedia (w) - DuckDuckGo (d) - Baidu (a) - Yandex (y) - Ecosia (e) - Qwant (q) Change-Id: Iec51c776c598672bd6df3be7b8dbd21062b85968 Reviewed-on: https://review.haiku-os.org/c/haiku/+/1359 Reviewed-by: Adrien Destugues --- src/apps/webpositive/BrowserWindow.cpp | 43 +++++++++++++++++++++++++- src/apps/webpositive/BrowserWindow.h | 11 ++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/apps/webpositive/BrowserWindow.cpp b/src/apps/webpositive/BrowserWindow.cpp index 47f56403d5..b1b21dbf87 100644 --- a/src/apps/webpositive/BrowserWindow.cpp +++ b/src/apps/webpositive/BrowserWindow.cpp @@ -380,6 +380,7 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings, kDefaultStartPageURL); fSearchPageURL = fAppSettings->GetValue(kSettingsKeySearchPageURL, kDefaultSearchPageURL); + _InitSearchEngines(); // Create the interface elements BMessage* newTabMessage = new BMessage(NEW_TAB); @@ -698,6 +699,7 @@ BrowserWindow::~BrowserWindow() delete fTabManager; delete fPulseRunner; delete fSavePanel; + delete[] fSearchEngines; } @@ -2478,6 +2480,30 @@ BrowserWindow::_EncodeURIComponent(const BString& search) } +void +BrowserWindow::_InitSearchEngines() +{ + // TODO make these configurable + fSearchEngines = new SearchEngine[kSearchEngineCount]; + fSearchEngines[0].url="https://google.com/search?q=%s"; + fSearchEngines[0].shortcut="g "; + fSearchEngines[1].url="https://bing.com/search?q=%s"; + fSearchEngines[1].shortcut="b "; + fSearchEngines[2].url="https://en.wikipedia.org/w/index.php?search=%s"; + fSearchEngines[2].shortcut="w "; + fSearchEngines[3].url="https://duckduckgo.com/?q=%s"; + fSearchEngines[3].shortcut="d "; + fSearchEngines[4].url="https://www.baidu.com/s?wd=%s"; + fSearchEngines[4].shortcut="a "; + fSearchEngines[5].url="https://yandex.com/search/?text=%s"; + fSearchEngines[5].shortcut="y "; + fSearchEngines[6].url="https://www.ecosia.org/search?q=%s"; + fSearchEngines[6].shortcut="e "; + fSearchEngines[7].url="https://www.qwant.com/?q=%s"; + fSearchEngines[7].shortcut="q "; +} + + void BrowserWindow::_VisitURL(const BString& url) { @@ -2489,9 +2515,24 @@ BrowserWindow::_VisitURL(const BString& url) void BrowserWindow::_VisitSearchEngine(const BString& search) { + BString searchQuery = search; + searchQuery.Remove(0, 2); + BString searchPrefix; + + search.CopyCharsInto(searchPrefix, 0, 2); + + // Default search URL BString engine(fSearchPageURL); - engine.ReplaceAll("%s", _EncodeURIComponent(search).String()); + // Check if the string starts with one of the search engine shortcuts + for (int i = 0; i < kSearchEngineCount; i++) { + if (search.StartsWith(fSearchEngines[i].shortcut)) { + engine = fSearchEngines[i].url; + break; + } + } + + engine.ReplaceAll("%s", _EncodeURIComponent(searchQuery)); _VisitURL(engine); } diff --git a/src/apps/webpositive/BrowserWindow.h b/src/apps/webpositive/BrowserWindow.h index 20597974ad..ba9869f689 100644 --- a/src/apps/webpositive/BrowserWindow.h +++ b/src/apps/webpositive/BrowserWindow.h @@ -194,6 +194,8 @@ private: void _SetPageIcon(BWebView* view, const BBitmap* icon); + void _InitSearchEngines(); + void _UpdateHistoryMenu(); void _UpdateClipboardItems(); @@ -281,8 +283,15 @@ private: BMenuItem* fBookmarkBarMenuItem; BookmarkBar* fBookmarkBar; BFilePanel* fSavePanel; + int kSearchEngineCount = 8; + struct SearchEngine { + const char* shortcut; + const char* url; + }; + + // FIXME use a BObjectList + SearchEngine* fSearchEngines; }; #endif // BROWSER_WINDOW_H -