diff options
| -rw-r--r-- | CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/search/opensearchmanager.cpp | 4 | ||||
| -rw-r--r-- | src/search/searchengine.cpp | 20 | ||||
| -rw-r--r-- | src/search/searchengine.h | 7 | ||||
| -rw-r--r-- | src/urlbar/completionwidget.cpp | 21 | ||||
| -rw-r--r-- | src/urlbar/completionwidget.h | 10 | ||||
| -rw-r--r-- | src/urlbar/listitem.cpp | 73 | ||||
| -rw-r--r-- | src/urlbar/listitem.h | 5 | ||||
| -rw-r--r-- | src/urlbar/urlresolver.cpp | 27 | ||||
| -rw-r--r-- | src/urlbar/urlresolver.h | 28 | 
10 files changed, 112 insertions, 85 deletions
| diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d9eea23..b636bc48 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ PROJECT( rekonq )  # Informations to update before to release this package.  # rekonq info -SET(REKONQ_VERSION "0.5.84" ) +SET(REKONQ_VERSION "0.5.85" )  configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/version.h ) diff --git a/src/search/opensearchmanager.cpp b/src/search/opensearchmanager.cpp index 9670a6a2..c2ac1ddb 100644 --- a/src/search/opensearchmanager.cpp +++ b/src/search/opensearchmanager.cpp @@ -114,6 +114,7 @@ void OpenSearchManager::addOpenSearchEngine(const KUrl &url, const QString &titl      {          disconnect(m_currentJob);          m_currentJob->kill(); +	delete m_currentJob;      }      m_jobData.clear(); @@ -149,7 +150,8 @@ void OpenSearchManager::requestSuggestion(const QString &searchText)      if (m_currentJob)      {          disconnect(m_currentJob); -         m_currentJob->kill(); +        m_currentJob->kill(); +	delete m_currentJob;      }      m_jobData.clear(); diff --git a/src/search/searchengine.cpp b/src/search/searchengine.cpp index 38f063a4..89e62dee 100644 --- a/src/search/searchengine.cpp +++ b/src/search/searchengine.cpp @@ -111,7 +111,7 @@ KService::Ptr SearchEngine::defaultEngine()  } -KService::Ptr SearchEngine::fromString(QString text) +KService::Ptr SearchEngine::fromString(const QString &text)  {      KService::List providers = KServiceTypeTrader::self()->query("SearchProvider");      int i = 0; @@ -136,12 +136,22 @@ KService::Ptr SearchEngine::fromString(QString text)  } -QString SearchEngine::buildQuery(KService::Ptr engine, QString text) +QString SearchEngine::extractQuery(const QString &text)  { -    QString query = engine->property("Query").toString(); -    query = query.replace("\\{@}", KUrl::toPercentEncoding(text)); +    QString query = text; +    KService::Ptr engine = SearchEngine::fromString(text); +    if (engine) +    { +        query = query.remove(0, text.indexOf(SearchEngine::delimiter()) + 1); +    } +      return query;  } - +QString SearchEngine::buildQuery(KService::Ptr engine, const QString &text) +{ +    QString query = engine->property("Query").toString(); +    query = query.replace("\\{@}", KUrl::toPercentEncoding(text)); +    return query; +} diff --git a/src/search/searchengine.h b/src/search/searchengine.h index e57b1a5c..d813666b 100644 --- a/src/search/searchengine.h +++ b/src/search/searchengine.h @@ -45,9 +45,10 @@ public:      static QString delimiter();      static KService::Ptr defaultEngine();      static KService::List favorites(); -    static KService::Ptr fromString(QString text); -    static QString buildQuery(KService::Ptr engine, QString text); - +    static KService::Ptr fromString(const QString &text); +    static QString buildQuery(KService::Ptr engine, const QString &text); +    static QString extractQuery(const QString &text); +      private:      static bool m_loaded;      static QString m_delimiter; diff --git a/src/urlbar/completionwidget.cpp b/src/urlbar/completionwidget.cpp index 2199dfdf..a2bf5dbc 100644 --- a/src/urlbar/completionwidget.cpp +++ b/src/urlbar/completionwidget.cpp @@ -55,7 +55,6 @@ CompletionWidget::CompletionWidget(QWidget *parent)          : QFrame(parent, Qt::ToolTip)          , _parent(parent)          , _currentIndex(0) -        , _searchEngine(SearchEngine::defaultEngine())          , _hasSuggestions(false)  {      setFrameStyle(QFrame::Panel); @@ -71,7 +70,7 @@ void CompletionWidget::insertSearchList(const UrlSearchList &list, const QString  {      if (!isVisible())      { -        _searchEngine = SearchEngine::defaultEngine(); +        UrlResolver::setSearchEngine(SearchEngine::defaultEngine());      }      _list = list; @@ -278,14 +277,15 @@ bool CompletionWidget::eventFilter(QObject *obj, QEvent *ev)                  if( _currentIndex == -1)                      _currentIndex = 0;                  child = findChild<ListItem *>(QString::number(_currentIndex)); -                if(child) +                if(child && _currentIndex!=0) //the completionwidget is visible and the user had press down                  { +                    //we can use the url of the listitem                      emit chosenUrl(child->url(), Rekonq::CurrentTab);                  } -                else +                else //the user type too fast (completionwidget not visible or suggestion not downloaded)                  { -                    // this will be used just on fast typing.. -                    emit chosenUrl(KUrl(w->text()), Rekonq::CurrentTab); +                    UrlResolver res(w->text()); +                    emit chosenUrl(res.orderedSearchItems().first().url, Rekonq::CurrentTab);                  }                  kev->accept();                  hide(); @@ -320,10 +320,15 @@ void CompletionWidget::setVisible(bool visible)  void CompletionWidget::itemChosen(ListItem *item, Qt::MouseButton button, Qt::KeyboardModifiers modifier)  { -    if (button == Qt::MidButton || modifier == Qt::ControlModifier) +    if (button == Qt::MidButton  +        || modifier == Qt::ControlModifier) +    {          emit chosenUrl(item->url(), Rekonq::NewFocusedTab); +    }      else +    {          emit chosenUrl(item->url(), Rekonq::CurrentTab); +    }      hide();  } @@ -344,6 +349,6 @@ void CompletionWidget::suggestUrls(const QString &text)      UrlResolver *res = new UrlResolver(text);      connect(res, SIGNAL(suggestionsReady(const UrlSearchList &, const QString &)), this, SLOT(updateSearchList(const UrlSearchList &, const QString &))); +    res->computeSuggestions();      _resList = res->orderedSearchItems(); -      } diff --git a/src/urlbar/completionwidget.h b/src/urlbar/completionwidget.h index 7f6c93f0..6545b11d 100644 --- a/src/urlbar/completionwidget.h +++ b/src/urlbar/completionwidget.h @@ -51,16 +51,6 @@ public:      virtual bool eventFilter(QObject *obj, QEvent *ev);      void setVisible(bool visible); -    KService::Ptr searchEngine() -    { -        return _searchEngine; -    }; -     -    void setSearchEngine(KService::Ptr engine) -    { -        _searchEngine = engine; -    }; -      void suggestUrls(const QString &text);  private slots: diff --git a/src/urlbar/listitem.cpp b/src/urlbar/listitem.cpp index 6c09f9a5..5ff90056 100644 --- a/src/urlbar/listitem.cpp +++ b/src/urlbar/listitem.cpp @@ -212,12 +212,11 @@ TextLabel::TextLabel(const QString &text, const QString &textToPointOut, QWidget      const bool wasItalic = t.startsWith("<i>");      if (wasItalic)          t.remove(QRegExp("<[/ib]*>")); +      t = Qt::escape(t); -    QStringList words = textToPointOut.split(" "); -    foreach (const QString &wordToPointOut, words) { -        if (!wordToPointOut.isEmpty()) -            t.replace(QRegExp('(' + wordToPointOut + ')', Qt::CaseInsensitive), "<b>\\1</b>"); -    } +    QString ss = Qt::escape(textToPointOut); +    t.replace(QRegExp('(' + ss + ')', Qt::CaseInsensitive), "<b>\\1</b>"); +      if (wasItalic)          t = QL1S("<i>") + t + QL1S("</i>"); @@ -226,6 +225,19 @@ TextLabel::TextLabel(const QString &text, const QString &textToPointOut, QWidget  } +TextLabel::TextLabel(QWidget *parent) +    : QLabel(parent) +{ +    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);     +} + + +void TextLabel::setEngineText(const QString &engine, const QString &text) +{ +    setText( i18nc("%1=search engine, e.g. Google, Wikipedia %2=text to search for", "Search %1 for <b>%2</b>", engine, Qt::escape(text) ) ); +} + +  //-------------------------------------------------------------------------------------------- @@ -290,23 +302,11 @@ SearchListItem::SearchListItem(const UrlSearchItem &item, const QString &text, Q          : ListItem(item, parent)          , m_text(text)  { -    QString query = text; -    KService::Ptr engine = SearchEngine::fromString(text); -    if (engine) -    { -        query = query.remove(0, text.indexOf(SearchEngine::delimiter()) + 1); -    } -    else -    { -        engine = qobject_cast<CompletionWidget *>(parent)->searchEngine(); -    } - -    m_url = SearchEngine::buildQuery(engine, query); - -    KIcon icon = Application::iconManager()->iconForUrl( SearchEngine::defaultEngine()->property("Query").toUrl() ); -    m_iconLabel = new IconLabel(icon, this); //TODO: get the default engine icon (will be easy in KDE SC 4.5) -    m_titleLabel = new TextLabel(searchItemTitle(engine->name(), query), query, this); -    m_engineBar = new EngineBar(engine, parent); +    m_iconLabel = new IconLabel(SearchEngine::buildQuery(UrlResolver::searchEngine(), ""), this); +    QString query = SearchEngine::extractQuery(text); +    m_titleLabel = new TextLabel(this); +    m_titleLabel->setEngineText(item.title, query); +    m_engineBar = new EngineBar(UrlResolver::searchEngine(), parent);      QHBoxLayout *hLayout = new QHBoxLayout;      hLayout->setSpacing(4); @@ -329,18 +329,18 @@ QString SearchListItem::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))); -} +// 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, text)); +// }  void SearchListItem::changeSearchEngine(KService::Ptr engine)  { -    m_titleLabel->setText(searchItemTitle(engine->name(), m_text)); +    m_titleLabel->setEngineText(engine->name(), m_text);      m_iconLabel->setPixmap( Application::iconManager()->iconForUrl(KUrl(engine->property("Query").toString())).pixmap(16) );      m_url = SearchEngine::buildQuery(engine, m_text); -    qobject_cast<CompletionWidget *>(parent())->setSearchEngine(engine); +    UrlResolver::setSearchEngine(engine);  } @@ -429,21 +429,8 @@ SuggestionListItem::SuggestionListItem(const UrlSearchItem &item, const QString      QHBoxLayout *hLayout = new QHBoxLayout;      hLayout->setSpacing(4); -    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<CompletionWidget *>(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 IconLabel(SearchEngine::buildQuery(UrlResolver::searchEngine(), ""), this)); +    hLayout->addWidget(new TextLabel(item.title, SearchEngine::extractQuery(text), this));      hLayout->addWidget(new TypeIconLabel(item.type, this));      setLayout(hLayout); diff --git a/src/urlbar/listitem.h b/src/urlbar/listitem.h index 37b22f47..be5a2569 100644 --- a/src/urlbar/listitem.h +++ b/src/urlbar/listitem.h @@ -121,6 +121,9 @@ class TextLabel : public QLabel  public:      explicit TextLabel(const QString &text, const QString &textToPointOut = QString(), QWidget *parent = 0); +    explicit TextLabel(QWidget *parent = 0); + +    void setEngineText(const QString &engine, const QString &text);  }; @@ -165,8 +168,6 @@ private slots:      void changeSearchEngine(KService::Ptr engine);  private: -    QString searchItemTitle(QString engine, QString text); -      TextLabel* m_titleLabel;      IconLabel* m_iconLabel;      EngineBar* m_engineBar; diff --git a/src/urlbar/urlresolver.cpp b/src/urlbar/urlresolver.cpp index b6d7e598..dfb3289f 100644 --- a/src/urlbar/urlresolver.cpp +++ b/src/urlbar/urlresolver.cpp @@ -59,14 +59,18 @@  // ------------------------------------------------------------------------ +KService::Ptr UrlResolver::_searchEngine;  QRegExp UrlResolver::_browseRegexp;  QRegExp UrlResolver::_searchEnginesRegexp; +  UrlResolver::UrlResolver(const QString &typedUrl)          : QObject()          , _typedString(typedUrl.trimmed())  { +    if (!_searchEngine ) _searchEngine = SearchEngine::defaultEngine(); +          if ( _browseRegexp.isEmpty() )      {          kDebug() << "browse regexp empty. Setting value.."; @@ -107,8 +111,6 @@ UrlResolver::UrlResolver(const QString &typedUrl)          }          _searchEnginesRegexp = QRegExp(reg);      } -     -    computeSuggestions();  } @@ -330,7 +332,15 @@ void UrlResolver::computeQurlFromUserInput()  //webSearches  void UrlResolver::computeWebSearches()  { -    _webSearches = (UrlSearchList() << UrlSearchItem(UrlSearchItem::Search, QString(), QString())); +    QString query = _typedString; +    KService::Ptr engine = SearchEngine::fromString(_typedString); +    if (engine) +    { +        query = query.remove(0, _typedString.indexOf(SearchEngine::delimiter()) + 1); +        _searchEngine = engine; +    } + +    _webSearches = (UrlSearchList() << UrlSearchItem(UrlSearchItem::Search, SearchEngine::buildQuery(_searchEngine, query), _searchEngine->name()));  } @@ -367,6 +377,15 @@ void UrlResolver::computeBookmarks()  //opensearch suggestion  void UrlResolver::computeSuggestions()  { +    // if a string startsWith /, it is probably a local path +    // so, no need for suggestions... +    if(_typedString.startsWith('/')) +    { +        UrlSearchList list; +        emit suggestionsReady(list, _typedString); +        return; +    } +          if (Application::opensearchManager()->isSuggestionAvailable())      {          connect(Application::opensearchManager(), @@ -375,7 +394,7 @@ void UrlResolver::computeSuggestions()                  SLOT(suggestionsReceived(const QString &, const QStringList &)));          Application::opensearchManager()->requestSuggestion(_typedString); -    } +    }      } diff --git a/src/urlbar/urlresolver.h b/src/urlbar/urlresolver.h index 4e85e917..700fd460 100644 --- a/src/urlbar/urlresolver.h +++ b/src/urlbar/urlresolver.h @@ -33,7 +33,7 @@  // KDE Includes  #include <KUrl> - +#include <KService>  // Qt Includes  #include <QString> @@ -104,6 +104,24 @@ public:      UrlSearchList orderedSearchItems(); +    static KService::Ptr searchEngine() +    { +        return _searchEngine; +    }; + +    static void setSearchEngine(KService::Ptr engine) +    { +        _searchEngine = engine; +    }; + +    void computeSuggestions(); + +private Q_SLOTS: +    void suggestionsReceived(const QString &text, const QStringList &suggestions);     + +Q_SIGNALS: +    void suggestionsReady(const UrlSearchList &, const QString &); +  private:      QString _typedString; @@ -117,20 +135,14 @@ private:      void computeHistory();      void computeQurlFromUserInput();      void computeBookmarks(); -    void computeSuggestions();      UrlSearchItem privilegedItem(UrlSearchList* list);      UrlSearchList orderLists();      static QRegExp _browseRegexp;      static QRegExp _searchEnginesRegexp; -     -private slots: -    void suggestionsReceived(const QString &text, const QStringList &suggestions);     -Q_SIGNALS: -    void suggestionsReady(const UrlSearchList &, const QString &); -     +    static KService::Ptr _searchEngine;      };  // ------------------------------------------------------------------------------ | 
