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 <[email protected]>
This commit is contained in:
syedsouban
2020-09-02 13:27:22 +00:00
committed by Alex von Gluck IV
parent 331889d067
commit 4c1d001d51
2 changed files with 52 additions and 2 deletions
+42 -1
View File
@@ -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);
}
+10 -1
View File
@@ -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