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);
|
kDefaultStartPageURL);
|
||||||
fSearchPageURL = fAppSettings->GetValue(kSettingsKeySearchPageURL,
|
fSearchPageURL = fAppSettings->GetValue(kSettingsKeySearchPageURL,
|
||||||
kDefaultSearchPageURL);
|
kDefaultSearchPageURL);
|
||||||
|
_InitSearchEngines();
|
||||||
|
|
||||||
// Create the interface elements
|
// Create the interface elements
|
||||||
BMessage* newTabMessage = new BMessage(NEW_TAB);
|
BMessage* newTabMessage = new BMessage(NEW_TAB);
|
||||||
@@ -698,6 +699,7 @@ BrowserWindow::~BrowserWindow()
|
|||||||
delete fTabManager;
|
delete fTabManager;
|
||||||
delete fPulseRunner;
|
delete fPulseRunner;
|
||||||
delete fSavePanel;
|
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
|
void
|
||||||
BrowserWindow::_VisitURL(const BString& url)
|
BrowserWindow::_VisitURL(const BString& url)
|
||||||
{
|
{
|
||||||
@@ -2489,9 +2515,24 @@ BrowserWindow::_VisitURL(const BString& url)
|
|||||||
void
|
void
|
||||||
BrowserWindow::_VisitSearchEngine(const BString& search)
|
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);
|
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);
|
_VisitURL(engine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -194,6 +194,8 @@ private:
|
|||||||
void _SetPageIcon(BWebView* view,
|
void _SetPageIcon(BWebView* view,
|
||||||
const BBitmap* icon);
|
const BBitmap* icon);
|
||||||
|
|
||||||
|
void _InitSearchEngines();
|
||||||
|
|
||||||
void _UpdateHistoryMenu();
|
void _UpdateHistoryMenu();
|
||||||
void _UpdateClipboardItems();
|
void _UpdateClipboardItems();
|
||||||
|
|
||||||
@@ -281,8 +283,15 @@ private:
|
|||||||
BMenuItem* fBookmarkBarMenuItem;
|
BMenuItem* fBookmarkBarMenuItem;
|
||||||
BookmarkBar* fBookmarkBar;
|
BookmarkBar* fBookmarkBar;
|
||||||
BFilePanel* fSavePanel;
|
BFilePanel* fSavePanel;
|
||||||
|
int kSearchEngineCount = 8;
|
||||||
|
struct SearchEngine {
|
||||||
|
const char* shortcut;
|
||||||
|
const char* url;
|
||||||
|
};
|
||||||
|
|
||||||
|
// FIXME use a BObjectList
|
||||||
|
SearchEngine* fSearchEngines;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif // BROWSER_WINDOW_H
|
#endif // BROWSER_WINDOW_H
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user