WebPositive: Dropdown menu for choosing search engine

- Move the list of search engines used for search shortcuts to
  SettingsKeys.cpp/h and remove need for dynamic allocation.
- Use it in the settings window to help filling the default search
  engine field.

Fixes #15218.

Change-Id: I3783f6a346ad0fef2cff97eb930cb98cee39f660
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3439
Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
jpdw
2020-12-30 13:55:10 +00:00
committed by Adrien Destugues
parent 786f045666
commit aa013a511f
6 changed files with 99 additions and 62 deletions
+3 -29
View File
@@ -380,7 +380,6 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings,
kDefaultStartPageURL);
fSearchPageURL = fAppSettings->GetValue(kSettingsKeySearchPageURL,
kDefaultSearchPageURL);
_InitSearchEngines();
// Create the interface elements
BMessage* newTabMessage = new BMessage(NEW_TAB);
@@ -699,7 +698,6 @@ BrowserWindow::~BrowserWindow()
delete fTabManager;
delete fPulseRunner;
delete fSavePanel;
delete[] fSearchEngines;
}
@@ -2480,30 +2478,6 @@ 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)
{
@@ -2524,9 +2498,9 @@ BrowserWindow::_VisitSearchEngine(const BString& search)
BString engine(fSearchPageURL);
// Check if the string starts with one of the search engine shortcuts
for (int i = 0; i < kSearchEngineCount; i++) {
if (fSearchEngines[i].shortcut == searchPrefix) {
engine = fSearchEngines[i].url;
for (int i = 0; kSearchEngines[i].url != NULL; i++) {
if (kSearchEngines[i].shortcut == searchPrefix) {
engine = kSearchEngines[i].url;
searchQuery.Remove(0, 2);
break;
}
-10
View File
@@ -194,8 +194,6 @@ private:
void _SetPageIcon(BWebView* view,
const BBitmap* icon);
void _InitSearchEngines();
void _UpdateHistoryMenu();
void _UpdateClipboardItems();
@@ -283,14 +281,6 @@ private:
BMenuItem* fBookmarkBarMenuItem;
BookmarkBar* fBookmarkBar;
BFilePanel* fSavePanel;
int kSearchEngineCount = 8;
struct SearchEngine {
const char* shortcut;
const char* url;
};
// FIXME use a BObjectList
SearchEngine* fSearchEngines;
};
+15 -2
View File
@@ -30,7 +30,7 @@ const char* kSettingsKeySearchPageURL = "search page url";
const char* kDefaultDownloadPath = "/boot/home/Desktop/";
const char* kDefaultStartPageURL
= "file:///boot/home/config/settings/WebPositive/LoaderPages/Welcome";
const char* kDefaultSearchPageURL = "http://www.google.com/search?q=%s";
const char* kDefaultSearchPageURL = "https://www.google.com/search?q=%s";
const char* kSettingsKeyUseProxy = "use http proxy";
const char* kSettingsKeyProxyAddress = "http proxy address";
@@ -39,4 +39,17 @@ const char* kSettingsKeyUseProxyAuth = "use http proxy authentication";
const char* kSettingsKeyProxyUsername = "http proxy username";
const char* kSettingsKeyProxyPassword = "http proxy password";
const char* kSettingsShowBookmarkBar = "show bookmarks bar";
const char* kSettingsShowBookmarkBar = "show bookmarks bar";
const struct SearchEngine kSearchEngines[] = {
{ "Baidu", "https://www.baidu.com/search?wd=%s", "a " },
{ "Bing", "https://bing.com/search?q=%s", "b " },
{ "DuckDuckGo", "https://duckduckgo.com/?q=%s", "d " },
{ "Ecosia", "https://www.ecosia.org/search?q=%s", "e " },
{ "Google", "https://google.com/search?q=%s", "g " },
{ "Qwant", "https://www.qwant.com/?q=%s", "q " },
{ "Wikipedia", "https://en.wikipedia.org/w/index.php?search=%s", "w " },
{ "Yandex", "https://yandex.com/search/?text=%s", "y " },
{ "Yahoo", "https://search.yahoo.com/search?p=%s", "z " },
{ NULL, NULL, NULL }
};
+8
View File
@@ -40,4 +40,12 @@ extern const char* kSettingsKeyProxyPassword;
extern const char* kSettingsShowBookmarkBar;
struct SearchEngine {
const char* name;
const char* url;
const char* shortcut;
};
extern const struct SearchEngine kSearchEngines[];
#endif // SETTINGS_KEYS_H
+70 -20
View File
@@ -48,6 +48,7 @@ enum {
MSG_START_PAGE_CHANGED = 'hpch',
MSG_SEARCH_PAGE_CHANGED = 'spch',
MSG_SEARCH_PAGE_CHANGED_MENU = 'spcm',
MSG_DOWNLOAD_FOLDER_CHANGED = 'dnfc',
MSG_NEW_WINDOWS_BEHAVIOR_CHANGED = 'nwbc',
MSG_NEW_TABS_BEHAVIOR_CHANGED = 'ntbc',
@@ -192,6 +193,23 @@ SettingsWindow::MessageReceived(BMessage* message)
break;
}
case MSG_SEARCH_PAGE_CHANGED_MENU:
{
BString searchString;
BMenuItem* source;
if (message->FindString("searchstring", &searchString) == B_OK) {
fSearchPageControl->SetText(searchString);
fSearchPageControl->SetEnabled(false);
} else
fSearchPageControl->SetEnabled(true);
if (message->FindPointer("source", (void**)&source) == B_OK)
source->SetMarked(true);
_ValidateControlsEnabledStatus();
break;
}
case MSG_START_PAGE_CHANGED:
case MSG_SEARCH_PAGE_CHANGED:
case MSG_DOWNLOAD_FOLDER_CHANGED:
@@ -256,19 +274,12 @@ SettingsWindow::_CreateGeneralPage(float spacing)
fStartPageControl->SetText(
fSettings->GetValue(kSettingsKeyStartPageURL, kDefaultStartPageURL));
fSearchPageControl = new BTextControl("search page",
B_TRANSLATE("Search page:"), "",
fSearchPageControl = new BTextControl("search page", "", "",
new BMessage(MSG_SEARCH_PAGE_CHANGED));
fSearchPageControl->SetModificationMessage(
new BMessage(MSG_SEARCH_PAGE_CHANGED));
fSearchPageControl->SetToolTip(B_TRANSLATE("%s - Search term"));
BString searchURL = fSettings->GetValue(kSettingsKeySearchPageURL,
kDefaultSearchPageURL);
if (searchURL == "http://www.google.com") {
// Migrate old settings files.
searchURL = kDefaultSearchPageURL;
fSettings->SetValue(kSettingsKeySearchPageURL, kDefaultSearchPageURL);
}
fSearchPageControl->SetText(searchURL);
fDownloadFolderControl = new BTextControl("download folder",
@@ -315,6 +326,25 @@ SettingsWindow::_CreateGeneralPage(float spacing)
fNewTabBehaviorOpenBlankItem->SetMarked(true);
fStartUpBehaviorResumePriorSession->SetMarked(true);
BMenuItem* searchPageCustom = new BMenuItem(B_TRANSLATE("Custom"),
new BMessage(MSG_SEARCH_PAGE_CHANGED_MENU));
searchPageCustom->SetMarked(true);
BPopUpMenu* searchPageMenu = new BPopUpMenu("Search page:");
searchPageMenu->SetRadioMode(true);
for (int i = 0; kSearchEngines[i].url != NULL; i++) {
BMessage* message = new BMessage(MSG_SEARCH_PAGE_CHANGED_MENU);
message->AddString("searchstring", kSearchEngines[i].url);
searchPageMenu->AddItem(new BMenuItem(kSearchEngines[i].name, message));
}
searchPageMenu->AddItem(new BSeparatorItem());
searchPageMenu->AddItem(searchPageCustom);
fSearchPageMenu = new BMenuField("search page",
B_TRANSLATE("Search page:"), searchPageMenu);
fSearchPageMenu->SetToolTip(B_TRANSLATE("%s - Search term"));
BPopUpMenu* startUpBehaviorMenu = new BPopUpMenu("Start up");
startUpBehaviorMenu->AddItem(fStartUpBehaviorResumePriorSession);
startUpBehaviorMenu->AddItem(fStartUpBehaviorStartNewSession);
@@ -367,23 +397,26 @@ SettingsWindow::_CreateGeneralPage(float spacing)
BView* view = BGroupLayoutBuilder(B_VERTICAL, 0)
.Add(BGridLayoutBuilder(spacing / 2, spacing / 2)
.Add(fStartPageControl->CreateLabelLayoutItem(), 0, 0)
.Add(fStartPageControl->CreateTextViewLayoutItem(), 1, 0)
.Add(fStartPageControl->CreateTextViewLayoutItem(), 1, 0, 4)
.Add(fSearchPageControl->CreateLabelLayoutItem(), 0, 1)
.Add(fSearchPageControl->CreateTextViewLayoutItem(), 1, 1)
.Add(fSearchPageMenu->CreateLabelLayoutItem(), 0, 1)
.Add(fSearchPageMenu->CreateMenuBarLayoutItem(), 1, 1)
.Add(fSearchPageControl->CreateLabelLayoutItem(), 2, 1)
.Add(fSearchPageControl->CreateTextViewLayoutItem(), 3, 1, 2)
.Add(fStartUpBehaviorMenu->CreateLabelLayoutItem(), 0, 2)
.Add(fStartUpBehaviorMenu->CreateMenuBarLayoutItem(), 1, 2)
.Add(fStartUpBehaviorMenu->CreateMenuBarLayoutItem(), 1, 2, 4)
.Add(fNewWindowBehaviorMenu->CreateLabelLayoutItem(), 0, 3)
.Add(fNewWindowBehaviorMenu->CreateMenuBarLayoutItem(), 1, 3)
.Add(fNewWindowBehaviorMenu->CreateMenuBarLayoutItem(), 1, 3, 4)
.Add(fNewTabBehaviorMenu->CreateLabelLayoutItem(), 0, 4)
.Add(fNewTabBehaviorMenu->CreateMenuBarLayoutItem(), 1, 4)
.Add(fNewTabBehaviorMenu->CreateMenuBarLayoutItem(), 1, 4, 4)
.Add(fDownloadFolderControl->CreateLabelLayoutItem(), 0, 5)
.Add(fDownloadFolderControl->CreateTextViewLayoutItem(), 1, 5)
.Add(fChooseButton, 2, 5)
.Add(fDownloadFolderControl->CreateTextViewLayoutItem(), 1, 5, 3)
.Add(fChooseButton, 4, 5)
)
.Add(BSpaceLayoutItem::CreateVerticalStrut(spacing))
.Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER))
@@ -717,8 +750,27 @@ SettingsWindow::_RevertSettings()
fStartPageControl->SetText(
fSettings->GetValue(kSettingsKeyStartPageURL, kDefaultStartPageURL));
fSearchPageControl->SetText(
fSettings->GetValue(kSettingsKeySearchPageURL, kDefaultSearchPageURL));
BString searchPage = fSettings->GetValue(kSettingsKeySearchPageURL,
kDefaultSearchPageURL);
fSearchPageControl->SetText(searchPage);
bool found = false;
BMenu* searchMenu = fSearchPageMenu->Menu();
int32 itemCount = searchMenu->CountItems() - 2;
// Ignore the two last items: separator and "custom"
for (int i = 0; i < itemCount; i++) {
BMenuItem* item = searchMenu->ItemAt(i);
BMessage* message = item->Message();
if (message->FindString("searchstring") == searchPage) {
item->SetMarked(true);
fSearchPageControl->SetEnabled(false);
found = true;
break;
}
}
if (!found)
searchMenu->ItemAt(searchMenu->CountItems() - 1)->SetMarked(true);
fDownloadFolderControl->SetText(
fSettings->GetValue(kSettingsKeyDownloadPath, kDefaultDownloadPath));
@@ -935,5 +987,3 @@ SettingsWindow::_ProxyPort() const
{
return atoul(fProxyPortControl->Text());
}
+3 -1
View File
@@ -14,6 +14,7 @@ class BCheckBox;
class BMenu;
class BMenuField;
class BMenuItem;
class BSeparatorItem;
class BSpinner;
class BTextControl;
class FontSelectionView;
@@ -64,6 +65,8 @@ private:
BTextControl* fSearchPageControl;
BTextControl* fDownloadFolderControl;
BMenuField* fSearchPageMenu;
BMenuField* fNewWindowBehaviorMenu;
BMenuItem* fNewWindowBehaviorOpenHomeItem;
BMenuItem* fNewWindowBehaviorOpenSearchItem;
@@ -110,4 +113,3 @@ private:
#endif // SETTINGS_WINDOW_H