summaryrefslogtreecommitdiff
path: root/src/urlbar
diff options
context:
space:
mode:
authorAndrea Diamantini <adjam7@gmail.com>2012-11-05 18:51:31 +0100
committerAndrea Diamantini <adjam7@gmail.com>2012-12-10 02:48:06 +0100
commitfb57031a8d81a19e426765b1ceaa325ce51411b4 (patch)
tree465eaf0c619e9c84ac15c4002cd668c977e9f752 /src/urlbar
parentFix tools menu position (diff)
downloadrekonq-fb57031a8d81a19e426765b1ceaa325ce51411b4.tar.xz
adblock work
readded an icon in the urlbar when adblock is active, BUT with different features: you can now disable adblock "per-site", in a similar way chromium does. cleaned up adblock manager code, removing some old no more used code fragments
Diffstat (limited to 'src/urlbar')
-rw-r--r--src/urlbar/adblockwidget.cpp113
-rw-r--r--src/urlbar/adblockwidget.h59
-rw-r--r--src/urlbar/urlbar.cpp42
-rw-r--r--src/urlbar/urlbar.h1
4 files changed, 207 insertions, 8 deletions
diff --git a/src/urlbar/adblockwidget.cpp b/src/urlbar/adblockwidget.cpp
new file mode 100644
index 00000000..2d317667
--- /dev/null
+++ b/src/urlbar/adblockwidget.cpp
@@ -0,0 +1,113 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2012 by Andrea Diamantini <adjam7 at gmail dot com>
+*
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+* ============================================================ */
+
+
+// Auto Includes
+#include "adblockwidget.h"
+#include "adblockwidget.moc"
+
+// Local includes
+#include "adblockmanager.h"
+
+// KDE Includes
+#include <KIcon>
+#include <KLocalizedString>
+
+// Qt Includes
+#include <QCheckBox>
+#include <QDialogButtonBox>
+#include <QVBoxLayout>
+#include <QLabel>
+#include <QPushButton>
+
+
+AdBlockWidget::AdBlockWidget(const QUrl &url, QWidget *parent)
+ : QMenu(parent)
+ , _pageUrl(url)
+ , _chBox(new QCheckBox(this))
+ , _isAdblockEnabledHere(AdBlockManager::self()->isAdblockEnabledForHost(_pageUrl.host()))
+{
+ setAttribute(Qt::WA_DeleteOnClose);
+ setFixedWidth(320);
+
+ QVBoxLayout *layout = new QVBoxLayout(this);
+ layout->setSpacing(10);
+
+ // Title
+ QLabel *title = new QLabel(this);
+ title->setText(i18n(" AdBlock"));
+ QFont f = title->font();
+ f.setBold(true);
+ title->setFont(f);
+
+ // Checkbox
+ _chBox->setText(i18n("Enable adblock for this site"));
+ _chBox->setChecked(_isAdblockEnabledHere);
+
+ layout->addWidget(title);
+ layout->addWidget(_chBox);
+
+ // Ok & Cancel buttons
+ QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
+ connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(buttonBox, SIGNAL(rejected()), this, SLOT(close()));
+ layout->addWidget(buttonBox);
+}
+
+
+AdBlockWidget::~AdBlockWidget()
+{
+}
+
+
+void AdBlockWidget::showAt(const QPoint &pos)
+{
+ adjustSize();
+
+ QPoint p(pos.x() - width(), pos.y() + 10);
+ move(p);
+ show();
+}
+
+
+void AdBlockWidget::accept()
+{
+ bool on = _chBox->isChecked();
+ if (on != _isAdblockEnabledHere)
+ {
+ if (on)
+ {
+ kDebug() << "REMOVING IT...";
+ AdBlockManager::self()->removeCustomHostRule(_pageUrl.host());
+ }
+ else
+ {
+ AdBlockManager::self()->addCustomRule(QL1S("@@") + _pageUrl.host());
+ }
+
+ emit updateIcon();
+ }
+ close();
+}
diff --git a/src/urlbar/adblockwidget.h b/src/urlbar/adblockwidget.h
new file mode 100644
index 00000000..32458067
--- /dev/null
+++ b/src/urlbar/adblockwidget.h
@@ -0,0 +1,59 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2012 by Andrea Diamantini <adjam7 at gmail dot com>
+*
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+* ============================================================ */
+
+
+#ifndef ADBLOCK_WIDGET_H
+#define ADBLOCK_WIDGET_H
+
+// Qt Includes
+#include <QCheckBox>
+#include <QMenu>
+#include <QUrl>
+
+
+class AdBlockWidget : public QMenu
+{
+ Q_OBJECT
+
+public:
+ explicit AdBlockWidget(const QUrl &url, QWidget *parent = 0);
+ virtual ~AdBlockWidget();
+
+ void showAt(const QPoint &pos);
+
+Q_SIGNALS:
+ void updateIcon();
+
+private Q_SLOTS:
+ void accept();
+
+private:
+ QUrl _pageUrl;
+
+ QCheckBox *_chBox;
+ bool _isAdblockEnabledHere;
+};
+
+#endif
diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp
index ab7bfb89..5bd126e2 100644
--- a/src/urlbar/urlbar.cpp
+++ b/src/urlbar/urlbar.cpp
@@ -38,15 +38,17 @@
#include "application.h"
// Local Includes
+#include "adblockmanager.h"
#include "bookmarkmanager.h"
#include "bookmarkowner.h" // FIXME: Why is this needed? Why everything interesting in BookmarkManager is in its owner?
#include "iconmanager.h"
-#include "completionwidget.h"
+#include "adblockwidget.h"
#include "bookmarkwidget.h"
#include "favoritewidget.h"
#include "rsswidget.h"
+#include "completionwidget.h"
#include "urlresolver.h"
#include "webtab.h"
@@ -408,11 +410,12 @@ void UrlBar::loadFinished()
connect(bt, SIGNAL(clicked(QPoint)), _tab->page(), SLOT(showSSLInfo(QPoint)));
}
-// FIXME Reimplement if (_tab->hasAdBlockedElements())
-// {
-// IconButton *bt = addRightIcon(UrlBar::AdBlock);
-// connect(bt, SIGNAL(clicked(QPoint)), (QObject *) AdBlockManager::self(), SLOT(showBlockedItemDialog()));
-// }
+ // Show adblock
+ if (AdBlockManager::self()->isEnabled())
+ {
+ IconButton *bt = addRightIcon(UrlBar::AdBlock);
+ connect(bt, SIGNAL(clicked(QPoint)), this, SLOT(manageAdBlock(QPoint)));
+ }
// we need to update urlbar after the right icon settings
// removing this code (where setStyleSheet automatically calls update) needs adding again
@@ -597,8 +600,16 @@ IconButton *UrlBar::addRightIcon(UrlBar::icon ic)
}
break;
case UrlBar::AdBlock:
- rightIcon->setIcon(KIcon("preferences-web-browser-adblock"));
- rightIcon->setToolTip(i18n("There are elements blocked by AdBlock"));
+ if (AdBlockManager::self()->isAdblockEnabledForHost(_tab->url().host()))
+ {
+ rightIcon->setIcon(KIcon("preferences-web-browser-adblock"));
+ rightIcon->setToolTip(i18n("AdBlock is enabled on this site"));
+ }
+ else
+ {
+ rightIcon->setIcon(KIcon("preferences-web-browser-adblock").pixmap(32, 32, QIcon::Disabled));
+ rightIcon->setToolTip(i18n("AdBlock is NOT enabled on this site"));
+ }
break;
default:
ASSERT_NOT_REACHED("ERROR.. default non extant case!!");
@@ -766,6 +777,21 @@ void UrlBar::manageFavorites(QPoint pos)
}
+void UrlBar::manageAdBlock(QPoint pos)
+{
+ IconButton *bt = qobject_cast<IconButton *>(this->sender());
+ if (!bt)
+ return;
+
+ if (_tab->url().scheme() == QL1S("about"))
+ return;
+
+ AdBlockWidget *widget = new AdBlockWidget(_tab->url(), this);
+ connect(widget, SIGNAL(updateIcon()), this, SLOT(updateRightIcons()));
+ widget->showAt(pos);
+}
+
+
void UrlBar::updateRightIconPosition(IconButton *icon, int iconsCount)
{
// NOTE: cannot show a (let's say) 16x16 icon in a 16x16 square.
diff --git a/src/urlbar/urlbar.h b/src/urlbar/urlbar.h
index d115d34a..b0edc80e 100644
--- a/src/urlbar/urlbar.h
+++ b/src/urlbar/urlbar.h
@@ -112,6 +112,7 @@ private Q_SLOTS:
void detectTypedString(const QString &);
void suggest();
+ void manageAdBlock(QPoint);
void manageFavorites(QPoint);
void refreshFavicon();