diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Messages.sh | 2 | ||||
| -rw-r--r-- | src/adblock/adblockmanager.cpp | 6 | ||||
| -rw-r--r-- | src/adblock/adblockrule.h | 5 | ||||
| -rw-r--r-- | src/adblock/adblockrulefallbackimpl.cpp | 42 | ||||
| -rw-r--r-- | src/adblock/adblockrulefallbackimpl.h | 5 | ||||
| -rw-r--r-- | src/adblock/adblockruleimpl.h | 3 | ||||
| -rw-r--r-- | src/adblock/adblockruletextmatchimpl.cpp | 3 | ||||
| -rw-r--r-- | src/adblock/adblockruletextmatchimpl.h | 2 | ||||
| -rw-r--r-- | src/application.cpp | 4 | ||||
| -rw-r--r-- | src/bookmarks/bookmarkscontextmenu.cpp | 18 | ||||
| -rw-r--r-- | src/bookmarks/bookmarkstoolbar.cpp | 59 | ||||
| -rw-r--r-- | src/findbar.cpp | 57 | ||||
| -rw-r--r-- | src/findbar.h | 10 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 13 | ||||
| -rw-r--r-- | src/mainwindow.h | 2 | 
15 files changed, 154 insertions, 77 deletions
| diff --git a/src/Messages.sh b/src/Messages.sh index 86f846c8..ccad97fc 100644 --- a/src/Messages.sh +++ b/src/Messages.sh @@ -1,5 +1,5 @@  #! /bin/sh -$EXTRACTRC *.ui */*ui >> rc.cpp || exit 1 +$EXTRACTRC *.ui */*ui *.rc >> rc.cpp || exit 1  $XGETTEXT *.cpp */*.cpp -o $podir/rekonq.pot  rm -f rc.cpp diff --git a/src/adblock/adblockmanager.cpp b/src/adblock/adblockmanager.cpp index 8deb0bcd..f7c61cdb 100644 --- a/src/adblock/adblockmanager.cpp +++ b/src/adblock/adblockmanager.cpp @@ -187,7 +187,7 @@ QNetworkReply *AdBlockManager::block(const QNetworkRequest &request, WebPage *pa      foreach(const AdBlockRule &filter, _whiteList)      { -        if (filter.match(urlString, urlStringLowerCase)) +        if (filter.match(request, urlString, urlStringLowerCase))          {              kDebug() << "****ADBLOCK: WHITE RULE (@@) Matched: ***********";              kDebug() << "UrlString:  " << urlString; @@ -205,7 +205,7 @@ QNetworkReply *AdBlockManager::block(const QNetworkRequest &request, WebPage *pa      foreach(const AdBlockRule &filter, _blackList)      { -        if (filter.match(urlString, urlStringLowerCase)) +        if (filter.match(request, urlString, urlStringLowerCase))          {              kDebug() << "****ADBLOCK: BLACK RULE Matched: ***********";              kDebug() << "UrlString:  " << urlString; @@ -215,7 +215,7 @@ QNetworkReply *AdBlockManager::block(const QNetworkRequest &request, WebPage *pa              foreach(QWebElement el, elements)              {                  const QString srcAttribute = el.attribute("src"); -                if (filter.match(srcAttribute, srcAttribute.toLower())) +                if (filter.match(request, srcAttribute, srcAttribute.toLower()))                  {                      kDebug() << "MATCHES ATTRIBUTE!!!!!";                      el.setStyleProperty(QL1S("visibility"), QL1S("hidden")); diff --git a/src/adblock/adblockrule.h b/src/adblock/adblockrule.h index ef7b2f5f..701a9fe1 100644 --- a/src/adblock/adblockrule.h +++ b/src/adblock/adblockrule.h @@ -63,6 +63,7 @@  #include <QSharedPointer>  // Forward Includes +class QNetworkRequest;  class QString;  class AdBlockRule @@ -70,10 +71,10 @@ class AdBlockRule  public:      AdBlockRule(const QString &filter); -    bool match(const QString &encodedUrl, const QString &encodedUrlLowerCase) const +    bool match(const QNetworkRequest &request, const QString &encodedUrl, const QString &encodedUrlLowerCase) const      {          Q_ASSERT(encodedUrl.toLower() == encodedUrlLowerCase); -        return m_implementation->match(encodedUrl, encodedUrlLowerCase); +        return m_implementation->match(request, encodedUrl, encodedUrlLowerCase);      }  private: diff --git a/src/adblock/adblockrulefallbackimpl.cpp b/src/adblock/adblockrulefallbackimpl.cpp index 988f2895..959050da 100644 --- a/src/adblock/adblockrulefallbackimpl.cpp +++ b/src/adblock/adblockrulefallbackimpl.cpp @@ -30,8 +30,11 @@  #include "rekonq_defines.h"  // Qt Includes +#include <QWebFrame> +#include <QNetworkReply>  #include <QStringList> +  static inline bool isRegExpFilter(const QString &filter)  {      return filter.startsWith(QL1C('/')) && filter.endsWith(QL1C('/')); @@ -48,9 +51,24 @@ AdBlockRuleFallbackImpl::AdBlockRuleFallbackImpl(const QString &filter)      const int optionsNumber = parsedLine.lastIndexOf(QL1C('$'));      if (optionsNumber >= 0 && !isRegExpFilter(parsedLine)) {          const QStringList options(parsedLine.mid(optionsNumber + 1).split(QL1C(','))); +        parsedLine = parsedLine.left(optionsNumber); +          if (options.contains(QL1S("match-case")))              m_regExp.setCaseSensitivity(Qt::CaseSensitive); -        parsedLine = parsedLine.left(optionsNumber); + +        foreach (const QString &option, options) { +            // Domain restricted filter +            const QString domainKeyword(QL1S("domain=")); +            if (option.startsWith(domainKeyword)) { +                QStringList domainList = option.mid(domainKeyword.length()).split(QL1C('|')); +                foreach (const QString &domain, domainList) { +                    if (domain.startsWith(QL1C('~'))) +                        m_whiteDomains.insert(domain.toLower()); +                    else +                        m_blackDomains.insert(domain.toLower()); +                } +            } +        }      }      if (isRegExpFilter(parsedLine)) @@ -61,9 +79,27 @@ AdBlockRuleFallbackImpl::AdBlockRuleFallbackImpl(const QString &filter)      m_regExp.setPattern(parsedLine);  } -bool AdBlockRuleFallbackImpl::match(const QString &encodedUrl, const QString &) const +bool AdBlockRuleFallbackImpl::match(const QNetworkRequest &request, const QString &encodedUrl, const QString &) const  { -    return m_regExp.indexIn(encodedUrl) != -1; +    const bool regexpMatch = m_regExp.indexIn(encodedUrl) != -1; + +    if (regexpMatch && (!m_whiteDomains.isEmpty() || !m_blackDomains.isEmpty())) { +        Q_ASSERT(qobject_cast<QWebFrame*>(request.originatingObject())); +        const QWebFrame *const origin = static_cast<QWebFrame *const>(request.originatingObject()); + +        const QString originDomain = origin->url().host(); + +        if (!m_whiteDomains.isEmpty()) { +            // In this context, white domains means we block anything but what is in the list. +            if (m_whiteDomains.contains(originDomain)) +                return false; +            return true; +        } else if (m_blackDomains.contains(originDomain)) { +            return true; +        } +        return false; +    } +    return regexpMatch;  }  QString AdBlockRuleFallbackImpl::convertPatternToRegExp(const QString &wildcardPattern) diff --git a/src/adblock/adblockrulefallbackimpl.h b/src/adblock/adblockrulefallbackimpl.h index ed0f6dc6..8cb02e10 100644 --- a/src/adblock/adblockrulefallbackimpl.h +++ b/src/adblock/adblockrulefallbackimpl.h @@ -31,17 +31,20 @@  // Qt Includes  #include <QRegExp>  #include <QString> +#include <QSet>  class AdBlockRuleFallbackImpl : public AdBlockRuleImpl  {  public:      AdBlockRuleFallbackImpl(const QString &filter); -    bool match(const QString &encodedUrl, const QString &encodedUrlLowerCase) const; +    bool match(const QNetworkRequest &request, const QString &encodedUrl, const QString &encodedUrlLowerCase) const;  private:      QString convertPatternToRegExp(const QString &wildcardPattern);      QRegExp m_regExp; +    QSet<QString> m_whiteDomains; +    QSet<QString> m_blackDomains;  };  #endif // ADBLOCKRULEFALLBACKIMPL_H diff --git a/src/adblock/adblockruleimpl.h b/src/adblock/adblockruleimpl.h index db5cec30..7702217b 100644 --- a/src/adblock/adblockruleimpl.h +++ b/src/adblock/adblockruleimpl.h @@ -27,13 +27,14 @@  #define ADBLOCKRULEIMPL_H  class QString; +class QNetworkRequest;  class AdBlockRuleImpl  {  public:      AdBlockRuleImpl(const QString &) {}      virtual ~AdBlockRuleImpl() {} -    virtual bool match(const QString &encodedUrl, const QString &encodedUrlLowerCase) const = 0; +    virtual bool match(const QNetworkRequest &request, const QString &encodedUrl, const QString &encodedUrlLowerCase) const = 0;  };  #endif // ADBLOCKRULEIMPL_H diff --git a/src/adblock/adblockruletextmatchimpl.cpp b/src/adblock/adblockruletextmatchimpl.cpp index 892d78e0..2d534a3a 100644 --- a/src/adblock/adblockruletextmatchimpl.cpp +++ b/src/adblock/adblockruletextmatchimpl.cpp @@ -38,9 +38,10 @@ AdBlockRuleTextMatchImpl::AdBlockRuleTextMatchImpl(const QString &filter)      m_textToMatch.remove(QL1C('*'));  } -bool AdBlockRuleTextMatchImpl::match(const QString &encodedUrl, const QString &encodedUrlLowerCase) const +bool AdBlockRuleTextMatchImpl::match(const QNetworkRequest &request, const QString &encodedUrl, const QString &encodedUrlLowerCase) const  {      Q_UNUSED(encodedUrl); +    Q_UNUSED(request);      // Case sensitive compare is faster, but would be incorrect with encodedUrl since      // we do want case insensitive.      // What we do is work on a lowercase version of m_textToMatch, and compare to the lowercase diff --git a/src/adblock/adblockruletextmatchimpl.h b/src/adblock/adblockruletextmatchimpl.h index 28b0656c..b2c6e239 100644 --- a/src/adblock/adblockruletextmatchimpl.h +++ b/src/adblock/adblockruletextmatchimpl.h @@ -36,7 +36,7 @@ class AdBlockRuleTextMatchImpl : public AdBlockRuleImpl  {  public:      AdBlockRuleTextMatchImpl(const QString &filter); -    bool match(const QString &encodedUrl, const QString &encodedUrlLowerCase) const; +    bool match(const QNetworkRequest &request, const QString &encodedUrl, const QString &encodedUrlLowerCase) const;      static bool isTextMatchFilter(const QString &filter); diff --git a/src/application.cpp b/src/application.cpp index db71c602..e5677a0d 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -342,6 +342,8 @@ KIcon Application::icon(const KUrl &url)          return KIcon("text-html");      // rekonq icons.. +    if (url == KUrl("about:home")) +        return KIcon("go-home");      if (url == KUrl("about:closedTabs"))          return KIcon("tab-close");      if (url == KUrl("about:history")) @@ -350,6 +352,8 @@ KIcon Application::icon(const KUrl &url)          return KIcon("bookmarks");      if (url == KUrl("about:favorites"))          return KIcon("emblem-favorite"); +    if (url == KUrl("about:downloads")) +        return KIcon("download");      KIcon icon = KIcon(QWebSettings::iconForUrl(url));      if (icon.isNull()) diff --git a/src/bookmarks/bookmarkscontextmenu.cpp b/src/bookmarks/bookmarkscontextmenu.cpp index a473966a..da986fd2 100644 --- a/src/bookmarks/bookmarkscontextmenu.cpp +++ b/src/bookmarks/bookmarkscontextmenu.cpp @@ -69,10 +69,22 @@ void BookmarksContextMenu::addBookmarkActions()  void BookmarksContextMenu::addFolderActions()  { -    if (!bookmark().toGroup().first().isNull()) +    KBookmarkGroup group = bookmark().toGroup(); + +    if (!group.first().isNull())      { -        addAction(bmOwner->action(BookmarkOwner::OPEN_FOLDER)); -        addSeparator(); +        KBookmark child = group.first(); + +        while (child.isGroup() || child.isSeparator()) +        { +            child = group.next(child); +        } + +        if (!child.isNull()) +        { +            addAction(bmOwner->action(BookmarkOwner::OPEN_FOLDER)); +            addSeparator(); +        }      }      addAction(bmOwner->action(BookmarkOwner::BOOKMARK_PAGE)); diff --git a/src/bookmarks/bookmarkstoolbar.cpp b/src/bookmarks/bookmarkstoolbar.cpp index bc307965..ddb70a65 100644 --- a/src/bookmarks/bookmarkstoolbar.cpp +++ b/src/bookmarks/bookmarkstoolbar.cpp @@ -38,7 +38,7 @@  // Qt Includes  #include <QtGui/QFrame> -#include <QActionEvent> +#include <QtGui/QActionEvent>  BookmarkMenu::BookmarkMenu(KBookmarkManager *manager, @@ -124,6 +124,7 @@ void BookmarkMenu::refill()  void BookmarkMenu::addOpenFolderInTabs()  { +    // TODO: Needs to be ported to the new BookmarkOwner API      KAction *action;      KBookmarkGroup group = manager()->findByAddress(parentAddress()).toGroup(); @@ -336,33 +337,38 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)          else if (event->type() == QEvent::Drop)          {              QDropEvent *dropEvent = static_cast<QDropEvent*>(event); -            if (dropEvent->mimeData()->hasFormat("application/rekonq-bookmark")) +            QByteArray addresses = dropEvent->mimeData()->data("application/rekonq-bookmark"); +            KBookmark bookmark = Application::bookmarkProvider()->bookmarkManager()->findByAddress(QString::fromLatin1(addresses.data())); + +            if (!dropEvent->mimeData()->hasFormat("application/rekonq-bookmark") && !bookmark.isNull())              { -                QByteArray addresses = dropEvent->mimeData()->data("application/rekonq-bookmark"); -                KBookmark bookmark = Application::bookmarkProvider()->bookmarkManager()->findByAddress(QString::fromLatin1(addresses.data())); +                return QObject::eventFilter(watched, event); +            } -                QAction *destAction = toolBar()->actionAt(dropEvent->pos()); -                if (destAction && destAction == m_dropAction) +            QAction *destAction = toolBar()->actionAt(dropEvent->pos()); +            if (destAction && destAction == m_dropAction) +            { +                if (toolBar()->actions().indexOf(m_dropAction) > 0)                  { -                    if (toolBar()->actions().indexOf(m_dropAction) > 0) -                    { -                        destAction = toolBar()->actions().at(toolBar()->actions().indexOf(m_dropAction) - 1); -                    } -                    else -                    { -                        destAction = toolBar()->actions().at(1); -                    } +                    destAction = toolBar()->actions().at(toolBar()->actions().indexOf(m_dropAction) - 1);                  } +                else +                { +                    destAction = toolBar()->actions().at(1); +                } +            } +            KBookmarkGroup root = Application::bookmarkProvider()->rootGroup(); + +            if (destAction) +            {                  KBookmarkActionInterface *destBookmarkAction = dynamic_cast<KBookmarkActionInterface *>(destAction);                  QWidget *widgetAction = toolBar()->widgetForAction(destAction); -                if (!bookmark.isNull() && destBookmarkAction && !destBookmarkAction->bookmark().isNull() +                if (destBookmarkAction && !destBookmarkAction->bookmark().isNull()                      && widgetAction && bookmark.address() != destBookmarkAction->bookmark().address())                  { -                    KBookmarkGroup root = Application::bookmarkProvider()->rootGroup();                      KBookmark destBookmark = destBookmarkAction->bookmark(); -                    // To fix an issue with panel's drags                      root.deleteBookmark(bookmark);                      if ((dropEvent->pos().x() - widgetAction->pos().x()) > (widgetAction->width() / 2)) @@ -373,18 +379,31 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)                      {                          root.moveBookmark(bookmark, destBookmark.parentGroup().previous(destBookmark));                      } -                      Application::bookmarkProvider()->bookmarkManager()->emitChanged(); -                    dropEvent->accept();                  }              } +            else +            { +                root.deleteBookmark(bookmark); +                if (QCursor::pos().x() < toolBar()->widgetForAction(toolBar()->actions().first())->pos().x()) +                { +                    root.moveBookmark(bookmark, KBookmark()); +                } +                else +                { +                    root.addBookmark(bookmark); +                } + +                Application::bookmarkProvider()->bookmarkManager()->emitChanged(); +            } +            dropEvent->accept();          }      }      else      {          // Drag handling          if (event->type() == QEvent::MouseButtonPress) -        {//QMessageBox::information(NULL, "", ""); +        {              QPoint pos = toolBar()->mapFromGlobal(QCursor::pos());              KBookmarkActionInterface* action = dynamic_cast<KBookmarkActionInterface *>(toolBar()->actionAt(pos)); diff --git a/src/findbar.cpp b/src/findbar.cpp index b3b80fac..0e3f7385 100644 --- a/src/findbar.cpp +++ b/src/findbar.cpp @@ -49,16 +49,14 @@  #include <QtCore/QTimer> -FindBar::FindBar(QWidget *parent) -        : QWidget(parent) +FindBar::FindBar(MainWindow *window) +        : QWidget(window) +        , m_mainWindow(window)          , m_lineEdit(new KLineEdit(this))          , m_hideTimer(new QTimer(this))          , m_matchCase(new QCheckBox(i18n("&Match case"), this))          , m_highlightAll(new QCheckBox(i18n("&Highlight all"), this))  { -    // mainwindow pointer -    MainWindow *window = qobject_cast<MainWindow *>(parent); -      QHBoxLayout *layout = new QHBoxLayout;      // cosmetic @@ -138,25 +136,33 @@ bool FindBar::highlightAllState() const      return m_highlightAll->isChecked();  } - -void FindBar::show() +void FindBar::setVisible(bool visible)  { -    // show findbar if not visible -    if (isHidden()) -    { -        emit visibilityChanged(true); -        QWidget::show(); +    QWidget::setVisible(visible); + +    if (visible != isVisible()) +        emit visibilityChanged(visible); + +    if (visible) { +        if (!hasFocus()) { +            const QString selectedText = m_mainWindow->selectedText(); +            if (!selectedText.isEmpty()) +                m_lineEdit->setText(selectedText); +        } + +        // show findbar if not visible          emit searchString(m_lineEdit->text()); -    } -    m_hideTimer->start(60000); +        m_hideTimer->start(60000); -    // set focus to findbar if user select showFindBar shortcut -    m_lineEdit->setFocus(); -    m_lineEdit->selectAll(); +        // set focus to findbar if user select showFindBar shortcut +        m_lineEdit->setFocus(); +        m_lineEdit->selectAll(); +    } else { +        m_hideTimer->stop(); +    }  } -  void FindBar::notifyMatch(bool match)  {      QPalette p = m_lineEdit->palette(); @@ -179,18 +185,3 @@ void FindBar::notifyMatch(bool match)      m_lineEdit->setPalette(p);      m_hideTimer->start(60000);  } - - -void FindBar::hide() -{ -    m_hideTimer->stop(); -    emit visibilityChanged(false); -    QWidget::hide(); -    emit(searchString(m_lineEdit->text())); -} - - -void FindBar::toggleVisibility() -{ -    isVisible() ? hide() : show(); -} diff --git a/src/findbar.h b/src/findbar.h index 38bbcbc5..6451aac8 100644 --- a/src/findbar.h +++ b/src/findbar.h @@ -41,30 +41,28 @@  // Forward Declarations  class QString; - +class MainWindow;  class REKONQ_TESTS_EXPORT FindBar : public QWidget  {      Q_OBJECT  public: -    FindBar(QWidget *parent); +    FindBar(MainWindow *parent);      ~FindBar();      bool matchCase() const;      void notifyMatch(bool match);      bool highlightAllState() const; -public slots: -    void show(); -    void hide(); -    void toggleVisibility(); +    void setVisible(bool visible);  signals:      void searchString(const QString &);      void visibilityChanged(bool);  private: +    MainWindow *m_mainWindow;      KLineEdit *m_lineEdit;      QTimer *m_hideTimer;      QCheckBox *m_matchCase; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 4f9d6dab..44cc6d59 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -365,11 +365,11 @@ void MainWindow::setupActions()      KStandardAction::print(this, SLOT(printRequested()), actionCollection());      KStandardAction::quit(this , SLOT(close()), actionCollection()); -    a = KStandardAction::find(m_findBar, SLOT(toggleVisibility()), actionCollection()); +    a = KStandardAction::find(m_findBar, SLOT(show()), actionCollection());      KShortcut findShortcut = KStandardShortcut::find();      findShortcut.setAlternate(Qt::Key_Slash);      a->setShortcut(findShortcut); -    a->setCheckable(true); +    a->setChecked(m_findBar->isVisible());      connect(m_findBar, SIGNAL(visibilityChanged(bool)), a, SLOT(setChecked(bool)));      KStandardAction::findNext(this, SLOT(findNext()) , actionCollection()); @@ -907,6 +907,15 @@ void MainWindow::setWidgetsVisible(bool makeVisible)  } +QString MainWindow::selectedText() const +{ +    if (!currentTab()) +        return QString(); + +    return currentTab()->view()->selectedText(); +} + +  void MainWindow::viewPageSource()  {      if (!currentTab()) diff --git a/src/mainwindow.h b/src/mainwindow.h index 3aa57f5c..cd55faa5 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -80,6 +80,8 @@ public:      virtual QSize sizeHint() const;      void setWidgetsVisible(bool makeFullScreen); +    QString selectedText() const; +  private:      void setupBookmarksAndToolsShortcuts();      void setupActions(); | 
