diff --git a/src/lib/navigation/websearchbar.cpp b/src/lib/navigation/websearchbar.cpp --- a/src/lib/navigation/websearchbar.cpp +++ b/src/lib/navigation/websearchbar.cpp @@ -122,6 +122,10 @@ if (title.isEmpty()) title = m_window->weView()->title(); + if (m_searchManager->getAllEnginesNames().contains(title)) { + continue; + } + menu->addAction(m_window->weView()->icon(), tr("Add %1 ...").arg(title), this, SLOT(addEngineFromAction()))->setData(url); } diff --git a/src/lib/opensearch/searchenginesmanager.h b/src/lib/opensearch/searchenginesmanager.h --- a/src/lib/opensearch/searchenginesmanager.h +++ b/src/lib/opensearch/searchenginesmanager.h @@ -90,6 +90,8 @@ static QIcon iconForSearchEngine(const QUrl &url); + QSet getAllEnginesNames(); + Q_SIGNALS: void enginesChanged(); void activeEngineChanged(); @@ -116,6 +118,7 @@ QVector m_allEngines; Engine m_activeEngine; Engine m_defaultEngine; + QSet m_allEnginesNames; }; typedef SearchEnginesManager::Engine SearchEngine; diff --git a/src/lib/opensearch/searchenginesmanager.cpp b/src/lib/opensearch/searchenginesmanager.cpp --- a/src/lib/opensearch/searchenginesmanager.cpp +++ b/src/lib/opensearch/searchenginesmanager.cpp @@ -96,6 +96,7 @@ en.postData = query.value(6).toByteArray(); m_allEngines.append(en); + m_allEnginesNames.insert(en.name); if (en.name == m_defaultEngineName) { m_defaultEngine = en; @@ -250,6 +251,7 @@ } m_allEngines.append(engine); + m_allEnginesNames.insert(engine.name); emit enginesChanged(); } @@ -456,6 +458,7 @@ query.exec(); m_allEngines.remove(index); + m_allEnginesNames.remove(engine.name); emit enginesChanged(); } @@ -509,3 +512,8 @@ query.exec(); } } + +QSet SearchEnginesManager::getAllEnginesNames() +{ + return m_allEnginesNames; +}