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:
committed by
Alex von Gluck IV
parent
331889d067
commit
4c1d001d51
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user