[haiku-commits] haiku: hrev54825 - src/apps/webpositive

  • From: Adrien Destugues <pulkomandy@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 30 Dec 2020 08:55:12 -0500 (EST)

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
-


Other related posts:

  • » [haiku-commits] haiku: hrev54825 - src/apps/webpositive - Adrien Destugues