hrev54825 adds 1 changeset to branch 'master'
old head: 786f0456666788716ad1198843c28f5dae2cb8c8
new head: aa013a511ff4cb8e80e960b77ff4a4069a37d1ef
overview:
https://git.haiku-os.org/haiku/log/?qt=range&q=aa013a511ff4+%5E786f04566667
----------------------------------------------------------------------------
aa013a511ff4: 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 <pulkomandy@xxxxxxxxx>
[ jpdw <jpdw@xxxxxxx> ]
----------------------------------------------------------------------------
Revision: hrev54825
Commit: aa013a511ff4cb8e80e960b77ff4a4069a37d1ef
URL: https://git.haiku-os.org/haiku/commit/?id=aa013a511ff4
Author: jpdw <jpdw@xxxxxxx>
Date: Sun Nov 29 21:21:14 2020 UTC
Committer: Adrien Destugues <pulkomandy@xxxxxxxxx>
Commit-Date: Wed Dec 30 13:55:10 2020 UTC
Ticket: https://dev.haiku-os.org/ticket/15218
----------------------------------------------------------------------------
6 files changed, 99 insertions(+), 62 deletions(-)
src/apps/webpositive/BrowserWindow.cpp | 32 +---------
src/apps/webpositive/BrowserWindow.h | 10 ----
src/apps/webpositive/SettingsKeys.cpp | 17 +++++-
src/apps/webpositive/SettingsKeys.h | 8 +++
src/apps/webpositive/SettingsWindow.cpp | 90 ++++++++++++++++++++++-------
src/apps/webpositive/SettingsWindow.h | 4 +-
----------------------------------------------------------------------------
diff --git a/src/apps/webpositive/BrowserWindow.cpp
b/src/apps/webpositive/BrowserWindow.cpp
index 5b9ce47b46..833173871f 100644
--- a/src/apps/webpositive/BrowserWindow.cpp
+++ b/src/apps/webpositive/BrowserWindow.cpp
@@ -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;
}
diff --git a/src/apps/webpositive/BrowserWindow.h
b/src/apps/webpositive/BrowserWindow.h
index ba9869f689..007d33e01a 100644
--- a/src/apps/webpositive/BrowserWindow.h
+++ b/src/apps/webpositive/BrowserWindow.h
@@ -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;
};
diff --git a/src/apps/webpositive/SettingsKeys.cpp
b/src/apps/webpositive/SettingsKeys.cpp
index 36786e3efe..61a43fc047 100644
--- a/src/apps/webpositive/SettingsKeys.cpp
+++ b/src/apps/webpositive/SettingsKeys.cpp
@@ -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";
\ No newline at end of file
+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 }
+};
diff --git a/src/apps/webpositive/SettingsKeys.h
b/src/apps/webpositive/SettingsKeys.h
index 2d1a1f65f6..69dda3e0d5 100644
--- a/src/apps/webpositive/SettingsKeys.h
+++ b/src/apps/webpositive/SettingsKeys.h
@@ -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
diff --git a/src/apps/webpositive/SettingsWindow.cpp
b/src/apps/webpositive/SettingsWindow.cpp
index f71b92564d..4c36c29841 100644
--- a/src/apps/webpositive/SettingsWindow.cpp
+++ b/src/apps/webpositive/SettingsWindow.cpp
@@ -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(fSearchPageMenu->CreateLabelLayoutItem(), 0, 1)
+ .Add(fSearchPageMenu->CreateMenuBarLayoutItem(), 1, 1)
- .Add(fSearchPageControl->CreateLabelLayoutItem(), 0, 1)
- .Add(fSearchPageControl->CreateTextViewLayoutItem(), 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());
}
-
-
diff --git a/src/apps/webpositive/SettingsWindow.h
b/src/apps/webpositive/SettingsWindow.h
index f6de2c88f8..94e655b841 100644
--- a/src/apps/webpositive/SettingsWindow.h
+++ b/src/apps/webpositive/SettingsWindow.h
@@ -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
-