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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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 }
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user