From e9d099f4c5efa41fafd16408f13400cb37616f18 Mon Sep 17 00:00:00 2001 From: lionelc Date: Thu, 12 Aug 2010 18:31:16 +0200 Subject: introduce a new SuggestionListItem introduce an opensearch engine --- src/urlbar/completionwidget.cpp | 2 +- src/urlbar/listitem.cpp | 30 ++++++++++++++++++++++++++++-- src/urlbar/listitem.h | 12 ++++++++++++ src/urlbar/urlresolver.cpp | 21 ++++++++++++++++++--- src/urlbar/urlresolver.h | 4 +++- 5 files changed, 62 insertions(+), 7 deletions(-) (limited to 'src/urlbar') diff --git a/src/urlbar/completionwidget.cpp b/src/urlbar/completionwidget.cpp index b77e2d7c..8e72b26b 100644 --- a/src/urlbar/completionwidget.cpp +++ b/src/urlbar/completionwidget.cpp @@ -34,7 +34,7 @@ // Local Includes #include "application.h" #include "urlresolver.h" -#include "searchengine.h" +#include "search/searchengine.h" #include "urlbar.h" // KDE Includes diff --git a/src/urlbar/listitem.cpp b/src/urlbar/listitem.cpp index f10cefd7..c9946257 100644 --- a/src/urlbar/listitem.cpp +++ b/src/urlbar/listitem.cpp @@ -36,7 +36,7 @@ #include "application.h" #include "websnap.h" #include "completionwidget.h" -#include "searchengine.h" +#include "search/searchengine.h" // KDE Includes #include @@ -161,6 +161,7 @@ TypeIconLabel::TypeIconLabel(int type, QWidget *parent) if (type & UrlSearchItem::Browse) hLayout->addWidget(getIcon("applications-internet")); if (type & UrlSearchItem::Bookmark) hLayout->addWidget(getIcon("rating")); if (type & UrlSearchItem::History) hLayout->addWidget(getIcon("view-history")); + if (type & UrlSearchItem::Suggestion) hLayout->addWidget(getIcon("help-hint")); } @@ -390,6 +391,23 @@ void EngineBar::selectNextEngine() // --------------------------------------------------------------- +SuggestionListItem::SuggestionListItem(const UrlSearchItem &item, const QString &text, QWidget *parent) + : ListItem(item, parent) +{ + QHBoxLayout *hLayout = new QHBoxLayout; + hLayout->setSpacing(4); + + hLayout->addWidget(new IconLabel(item.url, this)); + hLayout->addWidget(new TextLabel(item.title, text, this)); + hLayout->addWidget(new TypeIconLabel(item.type, this)); + + setLayout(hLayout); +} + + +// --------------------------------------------------------------- + + BrowseListItem::BrowseListItem(const UrlSearchItem &item, const QString &text, QWidget *parent) : ListItem(item, parent) { @@ -427,7 +445,15 @@ ListItem *ListItemFactory::create(const UrlSearchItem &item, const QString &text } else { - newItem = new PreviewListItem(item, text, parent); + + if (item.type & UrlSearchItem::Suggestion) + { + newItem = new SuggestionListItem(item, text, parent); + } + else + { + newItem = new PreviewListItem(item, text, parent); + } } } diff --git a/src/urlbar/listitem.h b/src/urlbar/listitem.h index dcb4f76d..0e1a7ad5 100644 --- a/src/urlbar/listitem.h +++ b/src/urlbar/listitem.h @@ -174,6 +174,18 @@ private: // ------------------------------------------------------------------------- +class SuggestionListItem : public ListItem +{ + Q_OBJECT + +public: + SuggestionListItem(const UrlSearchItem &item, const QString &text, QWidget *parent = 0); +}; + + +// ------------------------------------------------------------------------- + + class PreviewListItem : public ListItem { Q_OBJECT diff --git a/src/urlbar/urlresolver.cpp b/src/urlbar/urlresolver.cpp index f0fd257b..157e26a2 100644 --- a/src/urlbar/urlresolver.cpp +++ b/src/urlbar/urlresolver.cpp @@ -31,7 +31,7 @@ #include "application.h" #include "historymanager.h" #include "bookmarksmanager.h" -#include "searchengine.h" +#include "search/searchengine.h" // KDE Includes #include @@ -243,11 +243,14 @@ UrlSearchList UrlResolver::orderedSearchItems() availableEntries -= commonList.count(); } + + UrlSearchList suggestionsList = suggestionResolution(); historyResults = historyList.count(); bookmarksResults = bookmarksList.count(); commonResutls = commonList.count(); - + //TODO: count suggestions entries + //now fill the list to MAX_ELEMENTS if(availableEntries > 0) { @@ -275,7 +278,7 @@ UrlSearchList UrlResolver::orderedSearchItems() } } - list = list + historyList + commonList + bookmarksList; + list = list + historyList + commonList + bookmarksList + suggestionsList; qWarning() << "orderedSearchItems leave: " << " elapsed: " << myTime.elapsed(); return list; @@ -343,6 +346,18 @@ UrlSearchList UrlResolver::bookmarksResolution() } +// STEP 4 = suggestion completion +UrlSearchList UrlResolver::suggestionResolution() +{ + + UrlSearchList list; + UrlSearchItem gItem(UrlSearchItem::Suggestion, "a", "a"); + list << gItem; + + return list; +} + + UrlSearchItem UrlResolver::privilegedItem(UrlSearchList* list) { UrlSearchItem item; diff --git a/src/urlbar/urlresolver.h b/src/urlbar/urlresolver.h index c79ce184..d41e3f1a 100644 --- a/src/urlbar/urlresolver.h +++ b/src/urlbar/urlresolver.h @@ -50,6 +50,7 @@ public: Browse = 0x00000010, History = 0x00000100, Bookmark = 0x00001000, + Suggestion = 0x00010000, }; int type; @@ -108,7 +109,8 @@ private: UrlSearchList qurlFromUserInputResolution(); UrlSearchList bookmarksResolution(); UrlSearchItem privilegedItem(UrlSearchList* list); - + UrlSearchList suggestionResolution(); + static QRegExp _browseRegexp; static QRegExp _searchEnginesRegexp; }; -- cgit v1.2.1 From 5c049a00fd9c799ea332436267ba1b85bc08fa1e Mon Sep 17 00:00:00 2001 From: megabigbug Date: Sun, 15 Aug 2010 08:37:16 +0200 Subject: wait signal --- src/urlbar/urlresolver.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/urlbar') diff --git a/src/urlbar/urlresolver.cpp b/src/urlbar/urlresolver.cpp index 157e26a2..189a5e46 100644 --- a/src/urlbar/urlresolver.cpp +++ b/src/urlbar/urlresolver.cpp @@ -349,6 +349,11 @@ UrlSearchList UrlResolver::bookmarksResolution() // STEP 4 = suggestion completion UrlSearchList UrlResolver::suggestionResolution() { + Application::opensearchManager()->requestSuggestion(); + while (!m_suggestionReceived) + { + Application->instance()->processEvents(QEventLoop::WaitForMore | QEventLoop::ExcludeUserInput); + } UrlSearchList list; UrlSearchItem gItem(UrlSearchItem::Suggestion, "a", "a"); -- cgit v1.2.1 From 20879867364e31cdd8e80d0f732cf03b140e28ea Mon Sep 17 00:00:00 2001 From: megabigbug Date: Sun, 15 Aug 2010 16:19:10 +0200 Subject: working opensearch suggestions --- src/urlbar/urlresolver.cpp | 255 ++++++++++++++++++++++++++------------------- src/urlbar/urlresolver.h | 29 ++++-- 2 files changed, 172 insertions(+), 112 deletions(-) (limited to 'src/urlbar') diff --git a/src/urlbar/urlresolver.cpp b/src/urlbar/urlresolver.cpp index 189a5e46..ebd01a58 100644 --- a/src/urlbar/urlresolver.cpp +++ b/src/urlbar/urlresolver.cpp @@ -31,7 +31,7 @@ #include "application.h" #include "historymanager.h" #include "bookmarksmanager.h" -#include "search/searchengine.h" +#include "searchengine.h" // KDE Includes #include @@ -45,7 +45,7 @@ // defines #define MAX_ELEMENTS 10 - +#define MIN_SUGGESTIONS 3 // NOTE // default kurifilter plugin list (at least in my box): @@ -63,7 +63,8 @@ QRegExp UrlResolver::_browseRegexp; QRegExp UrlResolver::_searchEnginesRegexp; UrlResolver::UrlResolver(const QString &typedUrl) - : _typedString(typedUrl.trimmed()) + : QObject() + , _typedString(typedUrl.trimmed()) { if ( _browseRegexp.isEmpty() ) { @@ -108,20 +109,9 @@ UrlResolver::UrlResolver(const QString &typedUrl) UrlSearchList UrlResolver::orderedSearchItems() { - // NOTE - // the logic here is : "we wanna suggest (at least) 10 elements" - // so we have (more or less) 2 from first results (1 from QUrl Resolutions, 1 from - // search engines). - // There are 8 remaining: if bookmarkResults + historyResults <= 8, catch all, else - // catch first 4 results from the two resulting lists :) - - QTime myTime; - myTime.start(); - - UrlSearchList list; - if( _typedString == QL1S("about:") ) { + UrlSearchList list; UrlSearchItem home(UrlSearchItem::Browse, QString("about:home"), QL1S("home") ); list << home; UrlSearchItem favs(UrlSearchItem::Browse, QString("about:favorites"), QL1S("favorites") ); @@ -134,122 +124,152 @@ UrlSearchList UrlResolver::orderedSearchItems() list << hist; UrlSearchItem down(UrlSearchItem::Browse, QString("about:downloads"), QL1S("downloads") ); list << down; - + return list; } + _computedListsCount = 0; + + //compute lists + computeSuggestions(); + computeQurlFromUserInput(); + computeWebSearches(); + computeBookmarks(); + computeHistory(); + + QTime time; + time.start(); + + while (_computedListsCount < 5 && time.msec() < 1000) + { + Application::instance()->processEvents(QEventLoop::WaitForMoreEvents | QEventLoop::ExcludeUserInputEvents); + } + + return orderLists(); +} + + +UrlSearchList UrlResolver::orderLists() +{ + // NOTE + // the logic here is : "we wanna suggest (at least) 10 elements" + // so we have (more or less) 2 from first results (1 from QUrl Resolutions, 1 from + // search engines). + // There are 8 remaining: if bookmarkResults + historyResults <= 8, catch all, else + // catch first 4 results from the two resulting lists :) + + QTime myTime; + myTime.start(); + + UrlSearchList list; + if(_browseRegexp.indexIn(_typedString) != -1) { - list << qurlFromUserInputResolution(); - list << webSearchesResolution(); + list << _qurlFromUserInput; + list << _webSearches; } else { - list << webSearchesResolution(); - list << qurlFromUserInputResolution(); + list << _webSearches; + list << _qurlFromUserInput; } //find the history items that match the typed string - UrlSearchList historyList = historyResolution(); - UrlSearchItem privileged = privilegedItem(&historyList); - int historyResults = historyList.count(); + UrlSearchItem privileged = privilegedItem(&_history); + int historyCount = _history.count(); //find the bookmarks items that match the typed string - UrlSearchList bookmarksList = bookmarksResolution(); if (privileged.type == UrlSearchItem::Undefined) { - privileged = privilegedItem(&bookmarksList); + privileged = privilegedItem(&_bookmarks); } - else if(privileged.type == UrlSearchItem::History && bookmarksList.removeOne(privileged)) + else if(privileged.type == UrlSearchItem::History && _bookmarks.removeOne(privileged)) { privileged.type |= UrlSearchItem::Bookmark; } - int bookmarksResults = bookmarksList.count(); + int bookmarksCount = _bookmarks.count(); if (privileged.type != UrlSearchItem::Undefined) { list.prepend(privileged); } + + int availableEntries = MAX_ELEMENTS - list.count() - MIN_SUGGESTIONS; - int availableEntries = MAX_ELEMENTS - list.count(); - - UrlSearchList commonList; - int commonResutls = 0; + UrlSearchList common; + int commonCount = 0; //prefer items which are history items als well bookmarks item //if there are more than 1000 bookmark results, the performance impact is noticeable - if(bookmarksResults < 1000) + if(bookmarksCount < 1000) { //add as many items to the common list as there are available entries in the dropdown list UrlSearchItem urlSearchItem; - for(int i = 0; i < historyList.count(); i++) + for(int i = 0; i < _history.count(); i++) { - if (bookmarksList.removeOne(historyList.at(i))) + if (_bookmarks.removeOne(_history.at(i))) { - urlSearchItem = historyList.takeAt(i); + urlSearchItem = _history.takeAt(i); urlSearchItem.type |= UrlSearchItem::Bookmark; - commonList << urlSearchItem; - commonResutls++; - if(commonResutls >= availableEntries) + common << urlSearchItem; + commonCount++; + if(commonCount >= availableEntries) { break; } } } - commonResutls = commonList.count(); - if(commonResutls >= availableEntries) + commonCount = common.count(); + if(commonCount >= availableEntries) { - commonList = commonList.mid(0, availableEntries); - historyList = UrlSearchList(); - bookmarksList = UrlSearchList(); + common = common.mid(0, availableEntries); + _history = UrlSearchList(); + _bookmarks = UrlSearchList(); availableEntries = 0; } else //remove all items from the history and bookmarks list up to the remaining entries in the dropdown list { - availableEntries -= commonResutls; - if(historyResults >= availableEntries) + availableEntries -= commonCount; + if(historyCount >= availableEntries) { - historyList = historyList.mid(0, availableEntries); + _history = _history.mid(0, availableEntries); } - if(bookmarksResults >= availableEntries) + if(bookmarksCount >= availableEntries) { - bookmarksList = bookmarksList.mid(0, availableEntries); + _bookmarks = _bookmarks.mid(0, availableEntries); } } } else //if there are too many bookmarks items, remove all items up to the remaining entries in the dropdown list { - - if(historyResults >= availableEntries) + + if(historyCount >= availableEntries) { - historyList = historyList.mid(0, availableEntries); + _history = _history.mid(0, availableEntries); } - if(bookmarksResults >= availableEntries) + if(bookmarksCount >= availableEntries) { - bookmarksList = bookmarksList.mid(0, availableEntries); + _bookmarks = _bookmarks.mid(0, availableEntries); } UrlSearchItem urlSearchItem; - for(int i = 0; i < historyList.count(); i++) + for(int i = 0; i < _history.count(); i++) { - if (bookmarksList.removeOne(historyList.at(i))) + if (_bookmarks.removeOne(_history.at(i))) { - urlSearchItem = historyList.takeAt(i); + urlSearchItem = _history.takeAt(i); urlSearchItem.type |= UrlSearchItem::Bookmark; - commonList << urlSearchItem; + common << urlSearchItem; } } - availableEntries -= commonList.count(); + availableEntries -= common.count(); } - - UrlSearchList suggestionsList = suggestionResolution(); - historyResults = historyList.count(); - bookmarksResults = bookmarksList.count(); - commonResutls = commonList.count(); - //TODO: count suggestions entries + historyCount = _history.count(); + bookmarksCount = _bookmarks.count(); + commonCount = common.count(); //now fill the list to MAX_ELEMENTS if(availableEntries > 0) @@ -257,28 +277,36 @@ UrlSearchList UrlResolver::orderedSearchItems() int historyEntries = ((int) (availableEntries / 2)) + availableEntries % 2; int bookmarksEntries = availableEntries - historyEntries; - if (historyResults >= historyEntries && bookmarksResults >= bookmarksEntries) + if (historyCount >= historyEntries && bookmarksCount >= bookmarksEntries) { - historyList = historyList.mid(0, historyEntries); - bookmarksList = bookmarksList.mid(0, bookmarksEntries); + _history = _history.mid(0, historyEntries); + _bookmarks = _bookmarks.mid(0, bookmarksEntries); } - else if (historyResults < historyEntries && bookmarksResults >= bookmarksEntries) + else if (historyCount < historyEntries && bookmarksCount >= bookmarksEntries) { - if(historyResults + bookmarksResults > availableEntries) + if(historyCount + bookmarksCount > availableEntries) { - bookmarksList = bookmarksList.mid(0, availableEntries - historyResults); + _bookmarks = _bookmarks.mid(0, availableEntries - historyCount); } } - else if (historyResults >= historyEntries && bookmarksResults < bookmarksEntries) + else if (historyCount >= historyEntries && bookmarksCount < bookmarksEntries) { - if(historyResults + bookmarksResults > availableEntries) + if(historyCount + bookmarksCount > availableEntries) { - historyList = historyList.mid(0, availableEntries - bookmarksResults); + _history = _history.mid(0, availableEntries - bookmarksCount); } } } - - list = list + historyList + commonList + bookmarksList + suggestionsList; + + availableEntries -= _history.count(); + availableEntries -= _bookmarks.count(); + + if (_suggestions.count() > availableEntries + MIN_SUGGESTIONS) + { + _suggestions = _suggestions.mid(0, availableEntries + MIN_SUGGESTIONS); + } + + list = list + _history + common + _bookmarks + _suggestions; qWarning() << "orderedSearchItems leave: " << " elapsed: " << myTime.elapsed(); return list; @@ -289,77 +317,92 @@ UrlSearchList UrlResolver::orderedSearchItems() // PRIVATE ENGINES -// STEP 1 = QUrl from User Input (easily the best solution... ) -UrlSearchList UrlResolver::qurlFromUserInputResolution() +//QUrl from User Input (easily the best solution... ) +void UrlResolver::computeQurlFromUserInput() { - UrlSearchList list; - QString url2 = _typedString; - QUrl urlFromUserInput = QUrl::fromUserInput(url2); + QString url = _typedString; + QUrl urlFromUserInput = QUrl::fromUserInput(url); if (urlFromUserInput.isValid()) { QString gTitle = i18nc("Browse a website", "Browse"); UrlSearchItem gItem(UrlSearchItem::Browse, urlFromUserInput.toString(), gTitle); - list << gItem; + _qurlFromUserInput << gItem; } - return list; + _computedListsCount++; } -// STEP 2 = Web Searches -UrlSearchList UrlResolver::webSearchesResolution() +//webSearches +void UrlResolver::computeWebSearches() { - return UrlSearchList() << UrlSearchItem(UrlSearchItem::Search, QString(), QString()); + _webSearches = (UrlSearchList() << UrlSearchItem(UrlSearchItem::Search, QString(), QString())); + _computedListsCount++; } -// STEP 3 = history completion -UrlSearchList UrlResolver::historyResolution() +//history +void UrlResolver::computeHistory() { QList found = Application::historyManager()->find(_typedString); qSort(found); - UrlSearchList list; foreach (HistoryHashItem i, found) { if (_searchEnginesRegexp.indexIn(i.url) == -1) //filter all urls that are search engine results { UrlSearchItem gItem(UrlSearchItem::History, i.url, i.title); - list << gItem; + _history << gItem; } } - return list; + + _computedListsCount++; } -// STEP 4 = bookmarks completion -UrlSearchList UrlResolver::bookmarksResolution() +// bookmarks +void UrlResolver::computeBookmarks() { - UrlSearchList list; QList found = Application::bookmarkProvider()->find(_typedString); + foreach (KBookmark b, found) { UrlSearchItem gItem(UrlSearchItem::Bookmark, b.url().url(), b.fullText()); - list << gItem; + _bookmarks << gItem; } - return list; + + _computedListsCount++; } -// STEP 4 = suggestion completion -UrlSearchList UrlResolver::suggestionResolution() +//opensearch suggestion +void UrlResolver::computeSuggestions() { - Application::opensearchManager()->requestSuggestion(); - while (!m_suggestionReceived) - { - Application->instance()->processEvents(QEventLoop::WaitForMore | QEventLoop::ExcludeUserInput); + if (Application::opensearchManager()->isSuggestionAvailable()) + { + connect(Application::opensearchManager(), + SIGNAL(suggestionReceived(const QStringList &)), + this, + SLOT(suggestionsReceived(const QStringList &))); + + Application::opensearchManager()->requestSuggestion(_typedString); } - - UrlSearchList list; - UrlSearchItem gItem(UrlSearchItem::Suggestion, "a", "a"); - list << gItem; + else + { + _computedListsCount++; + } +} - return list; + +void UrlResolver::suggestionsReceived(const QStringList &suggestion) +{ + foreach (QString s, suggestion) + { + UrlSearchItem gItem(UrlSearchItem::Suggestion, s, s); + _suggestions << gItem; + } + + _computedListsCount++; } diff --git a/src/urlbar/urlresolver.h b/src/urlbar/urlresolver.h index d41e3f1a..f72d6731 100644 --- a/src/urlbar/urlresolver.h +++ b/src/urlbar/urlresolver.h @@ -38,6 +38,7 @@ // Qt Includes #include #include +#include class UrlSearchItem { @@ -94,8 +95,10 @@ typedef QList UrlSearchList; // ---------------------------------------------------------------------- -class UrlResolver +class UrlResolver : public QObject { + Q_OBJECT + public: UrlResolver(const QString &typedUrl); @@ -104,15 +107,29 @@ public: private: QString _typedString; - UrlSearchList webSearchesResolution(); - UrlSearchList historyResolution(); - UrlSearchList qurlFromUserInputResolution(); - UrlSearchList bookmarksResolution(); + UrlSearchList _webSearches; + UrlSearchList _qurlFromUserInput; + UrlSearchList _history; + UrlSearchList _bookmarks; + UrlSearchList _suggestions; + + void computeWebSearches(); + void computeHistory(); + void computeQurlFromUserInput(); + void computeBookmarks(); + void computeSuggestions(); + + int _computedListsCount; + UrlSearchItem privilegedItem(UrlSearchList* list); - UrlSearchList suggestionResolution(); + UrlSearchList orderLists(); static QRegExp _browseRegexp; static QRegExp _searchEnginesRegexp; + +private slots: + void suggestionsReceived(const QStringList &suggestion); + }; // ------------------------------------------------------------------------------ -- cgit v1.2.1 From 7888d6166a34cdae0c88956208d9269fe448d3e6 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Mon, 16 Aug 2010 11:52:08 +0200 Subject: OpenSearch review - file headers fix - clean up code - import engine files --- src/urlbar/completionwidget.cpp | 2 +- src/urlbar/listitem.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/urlbar') diff --git a/src/urlbar/completionwidget.cpp b/src/urlbar/completionwidget.cpp index 8e72b26b..b77e2d7c 100644 --- a/src/urlbar/completionwidget.cpp +++ b/src/urlbar/completionwidget.cpp @@ -34,7 +34,7 @@ // Local Includes #include "application.h" #include "urlresolver.h" -#include "search/searchengine.h" +#include "searchengine.h" #include "urlbar.h" // KDE Includes diff --git a/src/urlbar/listitem.cpp b/src/urlbar/listitem.cpp index c9946257..791ad2fa 100644 --- a/src/urlbar/listitem.cpp +++ b/src/urlbar/listitem.cpp @@ -36,7 +36,7 @@ #include "application.h" #include "websnap.h" #include "completionwidget.h" -#include "search/searchengine.h" +#include "searchengine.h" // KDE Includes #include -- cgit v1.2.1 From 802d8d468189308394e06cf25fe9c74699aa96ec Mon Sep 17 00:00:00 2001 From: megabigbug Date: Thu, 19 Aug 2010 21:34:46 +0200 Subject: fix suggestion item: use the correct search engine --- src/urlbar/completionwidget.cpp | 9 +++------ src/urlbar/listitem.cpp | 33 ++++++++++++++++++++++++++++++++- src/urlbar/listitem.h | 8 +++++++- src/urlbar/urlresolver.cpp | 1 + 4 files changed, 43 insertions(+), 8 deletions(-) (limited to 'src/urlbar') diff --git a/src/urlbar/completionwidget.cpp b/src/urlbar/completionwidget.cpp index 8e72b26b..2afc44b2 100644 --- a/src/urlbar/completionwidget.cpp +++ b/src/urlbar/completionwidget.cpp @@ -153,13 +153,10 @@ void CompletionWidget::activateCurrentListItem() //update text of the url bar bar->blockSignals(true); //without compute suggestions - if (!widget->inherits("SearchListItem")) - bar->setQUrl( widget->url() ); - else - bar->setQUrl( _typedString ); + bar->setQUrl(widget->text()); bar->blockSignals(false); bar->setFocus(); - bar->setCursorPosition( bar->text().length() ); + bar->setCursorPosition(bar->text().length()); } @@ -240,7 +237,7 @@ bool CompletionWidget::eventFilter(QObject *obj, QEvent *ev) if( _currentIndex == -1) _currentIndex = 0; child = findChild(QString::number(_currentIndex)); - if(child && _typedString == w->text()) + if(child) { emit chosenUrl(child->url(), Rekonq::CurrentTab); } diff --git a/src/urlbar/listitem.cpp b/src/urlbar/listitem.cpp index c9946257..a6258cb5 100644 --- a/src/urlbar/listitem.cpp +++ b/src/urlbar/listitem.cpp @@ -139,6 +139,12 @@ KUrl ListItem::url() } +QString ListItem::text() +{ + return m_url.url(); +} + + void ListItem::nextItemSubChoice() { //will be override @@ -298,6 +304,12 @@ SearchListItem::SearchListItem(const UrlSearchItem &item, const QString &text, Q } +QString SearchListItem::text() +{ + return m_text; +} + + QString SearchListItem::searchItemTitle(QString engine, QString text) { return QString(i18nc("%1=search engine, e.g. Google, Wikipedia %2=text to search for", "Search %1 for %2", engine, Qt::escape(text))); @@ -393,11 +405,25 @@ void EngineBar::selectNextEngine() SuggestionListItem::SuggestionListItem(const UrlSearchItem &item, const QString &text, QWidget *parent) : ListItem(item, parent) + , m_text(item.title) { QHBoxLayout *hLayout = new QHBoxLayout; hLayout->setSpacing(4); - hLayout->addWidget(new IconLabel(item.url, this)); + QString query = item.title; + KService::Ptr engine = SearchEngine::fromString(query); + if (engine) + { + query = query.remove(0, text.indexOf(SearchEngine::delimiter()) + 1); + } + else + { + engine = qobject_cast(parent)->searchEngine(); + } + + m_url = SearchEngine::buildQuery(engine, query); + + hLayout->addWidget(new IconLabel(SearchEngine::buildQuery(engine, ""), this)); hLayout->addWidget(new TextLabel(item.title, text, this)); hLayout->addWidget(new TypeIconLabel(item.type, this)); @@ -405,6 +431,11 @@ SuggestionListItem::SuggestionListItem(const UrlSearchItem &item, const QString } +QString SuggestionListItem::text() +{ + return m_text; +} + // --------------------------------------------------------------- diff --git a/src/urlbar/listitem.h b/src/urlbar/listitem.h index 0e1a7ad5..06a02b80 100644 --- a/src/urlbar/listitem.h +++ b/src/urlbar/listitem.h @@ -61,7 +61,8 @@ public: void deactivate(); KUrl url(); - + virtual QString text(); + public slots: virtual void nextItemSubChoice(); @@ -153,6 +154,7 @@ class SearchListItem : public ListItem public: explicit SearchListItem(const UrlSearchItem &item, const QString &text, QWidget *parent = 0); + QString text(); public slots: virtual void nextItemSubChoice(); @@ -180,6 +182,10 @@ class SuggestionListItem : public ListItem public: SuggestionListItem(const UrlSearchItem &item, const QString &text, QWidget *parent = 0); + QString text(); + +private: + QString m_text; }; diff --git a/src/urlbar/urlresolver.cpp b/src/urlbar/urlresolver.cpp index ebd01a58..d6f49923 100644 --- a/src/urlbar/urlresolver.cpp +++ b/src/urlbar/urlresolver.cpp @@ -396,6 +396,7 @@ void UrlResolver::computeSuggestions() void UrlResolver::suggestionsReceived(const QStringList &suggestion) { + foreach (QString s, suggestion) { UrlSearchItem gItem(UrlSearchItem::Suggestion, s, s); -- cgit v1.2.1