Hello community, here is the log from the commit of package qupzilla for openSUSE:Factory checked in at 2014-11-28 08:44:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qupzilla (Old) and /work/SRC/openSUSE:Factory/.qupzilla.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "qupzilla" Changes: -------- --- /work/SRC/openSUSE:Factory/qupzilla/qupzilla-qt5.changes 2014-10-22 16:23:12.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.qupzilla.new/qupzilla-qt5.changes 2014-11-28 08:44:45.000000000 +0100 @@ -1,0 +2,19 @@ +Thu Nov 13 23:26:33 UTC 2014 - hrvoje.senjan@gmail.com + +- Activate KWallet support for Qt5 builds on openSUSE 13.2 and newer +- Added kwallet-devel BuildRequires for the above case +- Make KWallet plugin supplement qupzilla(-qt5) based on whether + user has kdebase4-workspace or plasma5-workspace installed + +------------------------------------------------------------------- +Sat Nov 8 22:36:09 UTC 2014 - hrvoje.senjan@gmail.com + +- Update to 1.8.4 + * added possibility to build against system QtFtp module + * CSS exceptions in AdBlock now works for rules from different + subscrictions + * fixed: correctly saving some settings in preferences + * fixed: preference action on Mac + * fixed: loading plugins on Windows + +------------------------------------------------------------------- qupzilla.changes: same change Old: ---- QupZilla-1.8.3.tar.xz New: ---- QupZilla-1.8.4.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qupzilla-qt5.spec ++++++ --- /var/tmp/diff_new_pack.ASafbE/_old 2014-11-28 08:44:46.000000000 +0100 +++ /var/tmp/diff_new_pack.ASafbE/_new 2014-11-28 08:44:46.000000000 +0100 @@ -19,7 +19,7 @@ %bcond_without qt5 Name: qupzilla-qt5 -Version: 1.8.3 +Version: 1.8.4 Release: 0 Summary: A very fast open source browser based on WebKit core License: GPL-3.0+ @@ -29,6 +29,7 @@ BuildRequires: fdupes %if %{with qt5} %if 0%{?suse_version} > 1310 +BuildRequires: kwallet-devel BuildRequires: libQt5Gui-private-headers-devel %else BuildRequires: libqt5-qtbase-private-headers-devel @@ -36,8 +37,8 @@ BuildRequires: libqt5-qttools-devel %else BuildRequires: libkde4-devel -BuildRequires: pkgconfig(gnome-keyring-1) %endif +BuildRequires: pkgconfig(gnome-keyring-1) BuildRequires: pkgconfig(hunspell) %if %{with qt5} BuildRequires: pkgconfig(Qt5Concurrent) @@ -66,11 +67,21 @@ QupZilla is modern web browser based on WebKit core and Qt Framework. WebKit guarante fast browsing and Qt availability on all major platforms. -%if !0%{with qt5} +%if 0%{?suse_version} > 1310 || !0%{with qt5} %package kwallet Summary: Kwallet plugin for qupzilla Group: Productivity/Networking/Web/Browsers Requires: %{name} = %{version} +%if %{with qt5} +Requires: kwalletd5 +Supplements: packageand(%{name};plasma5-workspace) +%else +Requires: kdebase4-runtime +Supplements: packageand(%{name};kdebase4-workspace) +%endif +%if %{with qt5} +Conflicts: qupzilla-kwallet +%endif %description kwallet Kwallet plugin for QupZilla browser which allows to store passwords in kwallet. @@ -79,6 +90,9 @@ Summary: Gnome keyring plugin for qupzilla Group: Productivity/Networking/Web/Browsers Requires: %{name} = %{version} +%if %{with qt5} +Conflicts: qupzilla-gnome-keyring +%endif %description gnome-keyring Gnome keyring plugin for QupZilla browser which allows to store passwords in @@ -94,10 +108,14 @@ sed -i '/Qz::BUILDTIME/d' src/lib/app/commandlineoptions.cpp sed -i '/Qz::BUILDTIME/d' src/lib/app/qzcommon.cpp sed -i '/Qz::BUILDTIME/d' src/lib/network/schemehandlers/qupzillaschemehandler.cpp +%if %{with qt5} +# Adjust KWallet include for KF5 library +sed -i 's|<KDE/KWallet/Wallet>|<KWallet>|g' src/plugins/KWalletPasswords/kwalletpasswordbackend.h +%endif %build export USE_WEBGL=true -%if !0%{with qt5} +%if 0%{?suse_version} > 1310 || !0%{with qt5} # Enable better KDE integration, it is also needed for KWallet plugin. export KDE_INTEGRATION=true # Enable GNOME Keyring support. @@ -150,7 +168,7 @@ %{_datadir}/qupzilla/ %{_datadir}/bash-completion/ -%if !0%{with qt5} +%if 0%{?suse_version} > 1310 || !0%{with qt5} %files kwallet %defattr(-,root,root) %{_libdir}/qupzilla/libKWalletPasswords.so ++++++ qupzilla.spec ++++++ --- /var/tmp/diff_new_pack.ASafbE/_old 2014-11-28 08:44:46.000000000 +0100 +++ /var/tmp/diff_new_pack.ASafbE/_new 2014-11-28 08:44:46.000000000 +0100 @@ -19,7 +19,7 @@ %bcond_with qt5 Name: qupzilla -Version: 1.8.3 +Version: 1.8.4 Release: 0 Summary: A very fast open source browser based on WebKit core License: GPL-3.0+ @@ -29,6 +29,7 @@ BuildRequires: fdupes %if %{with qt5} %if 0%{?suse_version} > 1310 +BuildRequires: kwallet-devel BuildRequires: libQt5Gui-private-headers-devel %else BuildRequires: libqt5-qtbase-private-headers-devel @@ -36,8 +37,8 @@ BuildRequires: libqt5-qttools-devel %else BuildRequires: libkde4-devel -BuildRequires: pkgconfig(gnome-keyring-1) %endif +BuildRequires: pkgconfig(gnome-keyring-1) BuildRequires: pkgconfig(hunspell) %if %{with qt5} BuildRequires: pkgconfig(Qt5Concurrent) @@ -66,11 +67,21 @@ QupZilla is modern web browser based on WebKit core and Qt Framework. WebKit guarante fast browsing and Qt availability on all major platforms. -%if !0%{with qt5} +%if 0%{?suse_version} > 1310 || !0%{with qt5} %package kwallet Summary: Kwallet plugin for qupzilla Group: Productivity/Networking/Web/Browsers Requires: %{name} = %{version} +%if %{with qt5} +Requires: kwalletd5 +Supplements: packageand(%{name};plasma5-workspace) +%else +Requires: kdebase4-runtime +Supplements: packageand(%{name};kdebase4-workspace) +%endif +%if %{with qt5} +Conflicts: qupzilla-kwallet +%endif %description kwallet Kwallet plugin for QupZilla browser which allows to store passwords in kwallet. @@ -79,6 +90,9 @@ Summary: Gnome keyring plugin for qupzilla Group: Productivity/Networking/Web/Browsers Requires: %{name} = %{version} +%if %{with qt5} +Conflicts: qupzilla-gnome-keyring +%endif %description gnome-keyring Gnome keyring plugin for QupZilla browser which allows to store passwords in @@ -94,10 +108,14 @@ sed -i '/Qz::BUILDTIME/d' src/lib/app/commandlineoptions.cpp sed -i '/Qz::BUILDTIME/d' src/lib/app/qzcommon.cpp sed -i '/Qz::BUILDTIME/d' src/lib/network/schemehandlers/qupzillaschemehandler.cpp +%if %{with qt5} +# Adjust KWallet include for KF5 library +sed -i 's|<KDE/KWallet/Wallet>|<KWallet>|g' src/plugins/KWalletPasswords/kwalletpasswordbackend.h +%endif %build export USE_WEBGL=true -%if !0%{with qt5} +%if 0%{?suse_version} > 1310 || !0%{with qt5} # Enable better KDE integration, it is also needed for KWallet plugin. export KDE_INTEGRATION=true # Enable GNOME Keyring support. @@ -150,7 +168,7 @@ %{_datadir}/qupzilla/ %{_datadir}/bash-completion/ -%if !0%{with qt5} +%if 0%{?suse_version} > 1310 || !0%{with qt5} %files kwallet %defattr(-,root,root) %{_libdir}/qupzilla/libKWalletPasswords.so ++++++ QupZilla-1.8.3.tar.xz -> QupZilla-1.8.4.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/CHANGELOG new/QupZilla-1.8.4/CHANGELOG --- old/QupZilla-1.8.3/CHANGELOG 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/CHANGELOG 2014-11-03 21:21:24.000000000 +0100 @@ -1,3 +1,11 @@ +Version 1.8.4 + * released 3 November 2014 + * added possibility to build against system QtFtp module + * CSS exceptions in AdBlock now works for rules from different subscrictions + * fixed: correctly saving some settings in preferences + * fixed: preference action on Mac + * fixed: loading plugins on Windows + Version 1.8.3 * released 19 October 2014 * fixed: crash when passing messages to running instance diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/README.md new/QupZilla-1.8.4/README.md --- old/QupZilla-1.8.3/README.md 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/README.md 2014-11-03 21:21:24.000000000 +0100 @@ -74,7 +74,7 @@ Current version ---------------------------------------------------------------------------------------- -The current stable version of QupZilla is 1.8.3. You can download precompiled packages +The current stable version of QupZilla is 1.8.4. You can download precompiled packages and the sources from the download section at [homepage](http://www.qupzilla.com/download). However, if you want the latest revision, just take the latest code snapshot either by downloading a tarball or running: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/haiku/QupZilla.rdef new/QupZilla-1.8.4/haiku/QupZilla.rdef --- old/QupZilla-1.8.3/haiku/QupZilla.rdef 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/haiku/QupZilla.rdef 2014-11-03 21:21:24.000000000 +0100 @@ -3,7 +3,7 @@ resource app_version { major = 1, middle = 8, - minor = 3, + minor = 4, /* Application "variety" can be set to one of the following: * B_APPV_DEVELOPMENT, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/defines.pri new/QupZilla-1.8.4/src/defines.pri --- old/QupZilla-1.8.3/src/defines.pri 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/defines.pri 2014-11-03 21:21:24.000000000 +0100 @@ -8,7 +8,7 @@ # workaround for #849: see https://bugreports.qt-project.org/browse/QTBUG-23196 mocinclude.CONFIG *= fix_target -QZ_VERSION = 1.8.3 +QZ_VERSION = 1.8.4 unix: VERSION = $$QZ_VERSION DEFINES *= QUPZILLA_VERSION=\\\"""$$QZ_VERSION"\\\"" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/adblock/adblockblockednetworkreply.cpp new/QupZilla-1.8.4/src/lib/adblock/adblockblockednetworkreply.cpp --- old/QupZilla-1.8.3/src/lib/adblock/adblockblockednetworkreply.cpp 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/adblock/adblockblockednetworkreply.cpp 2014-11-03 21:21:24.000000000 +0100 @@ -50,11 +50,11 @@ #include <QNetworkRequest> #include <QTimer> -AdBlockBlockedNetworkReply::AdBlockBlockedNetworkReply(const AdBlockSubscription* subscription, const AdBlockRule* rule, QObject* parent) +AdBlockBlockedNetworkReply::AdBlockBlockedNetworkReply(const AdBlockRule* rule, QObject* parent) : QNetworkReply(parent) { setOperation(QNetworkAccessManager::GetOperation); - setError(QNetworkReply::ContentAccessDenied, QString("AdBlock: %1 (%2)").arg(subscription->title(), rule->filter())); + setError(QNetworkReply::ContentAccessDenied, QString("AdBlock: %1 (%2)").arg(rule->subscription()->title(), rule->filter())); open(QIODevice::ReadOnly); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/adblock/adblockblockednetworkreply.h new/QupZilla-1.8.4/src/lib/adblock/adblockblockednetworkreply.h --- old/QupZilla-1.8.3/src/lib/adblock/adblockblockednetworkreply.h 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/adblock/adblockblockednetworkreply.h 2014-11-03 21:21:24.000000000 +0100 @@ -58,7 +58,7 @@ Q_OBJECT public: - AdBlockBlockedNetworkReply(const AdBlockSubscription* subscription, const AdBlockRule* rule, QObject* parent = 0); + AdBlockBlockedNetworkReply(const AdBlockRule* rule, QObject* parent = 0); void abort() {} void setRequest(const QNetworkRequest &request); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/adblock/adblockmanager.cpp new/QupZilla-1.8.4/src/lib/adblock/adblockmanager.cpp --- old/QupZilla-1.8.3/src/lib/adblock/adblockmanager.cpp 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/adblock/adblockmanager.cpp 2014-11-03 21:21:24.000000000 +0100 @@ -17,6 +17,7 @@ * ============================================================ */ #include "adblockmanager.h" #include "adblockdialog.h" +#include "adblockmatcher.h" #include "adblocksubscription.h" #include "adblockblockednetworkreply.h" #include "datapaths.h" @@ -45,6 +46,7 @@ , m_loaded(false) , m_enabled(true) , m_useLimitedEasyList(true) + , m_matcher(new AdBlockMatcher(this)) { load(); } @@ -92,33 +94,30 @@ const QString urlDomain = request.url().host().toLower(); const QString urlScheme = request.url().scheme().toLower(); - if (!isEnabled() || !canRunOnScheme(urlScheme)) { + if (!isEnabled() || !canRunOnScheme(urlScheme)) return 0; - } - - foreach (AdBlockSubscription* subscription, m_subscriptions) { - const AdBlockRule* blockedRule = subscription->match(request, urlDomain, urlString); - if (blockedRule) { - QVariant v = request.attribute((QNetworkRequest::Attribute)(QNetworkRequest::User + 100)); - WebPage* webPage = static_cast<WebPage*>(v.value<void*>()); - if (WebPage::isPointerSafeToUse(webPage)) { - if (!canBeBlocked(webPage->url())) { - return 0; - } + const AdBlockRule* blockedRule = m_matcher->match(request, urlDomain, urlString); - webPage->addAdBlockRule(blockedRule, request.url()); + if (blockedRule) { + QVariant v = request.attribute((QNetworkRequest::Attribute)(QNetworkRequest::User + 100)); + WebPage* webPage = static_cast<WebPage*>(v.value<void*>()); + if (WebPage::isPointerSafeToUse(webPage)) { + if (!canBeBlocked(webPage->url())) { + return 0; } - AdBlockBlockedNetworkReply* reply = new AdBlockBlockedNetworkReply(subscription, blockedRule, this); - reply->setRequest(request); + webPage->addAdBlockRule(blockedRule, request.url()); + } + + AdBlockBlockedNetworkReply* reply = new AdBlockBlockedNetworkReply(blockedRule, this); + reply->setRequest(request); #ifdef ADBLOCK_DEBUG - qDebug() << "BLOCKED: " << timer.elapsed() << blockedRule->filter() << request.url(); + qDebug() << "BLOCKED: " << timer.elapsed() << blockedRule->filter() << request.url(); #endif - return reply; - } + return reply; } #ifdef ADBLOCK_DEBUG @@ -252,7 +251,6 @@ AdBlockSubscription* subscription = new AdBlockSubscription(title, this); subscription->setUrl(url); subscription->setFilePath(absolutePath); - connect(subscription, SIGNAL(subscriptionUpdated()), mApp, SLOT(reloadUserStyleSheet())); m_subscriptions.append(subscription); } @@ -262,7 +260,6 @@ AdBlockSubscription* easyList = new AdBlockSubscription(tr("EasyList"), this); easyList->setUrl(QUrl(ADBLOCK_EASYLIST_URL)); easyList->setFilePath(DataPaths::currentProfilePath() + QLatin1String("/adblock/easylist.txt")); - connect(easyList, SIGNAL(subscriptionUpdated()), mApp, SLOT(reloadUserStyleSheet())); m_subscriptions.prepend(easyList); } @@ -270,11 +267,13 @@ // Append CustomList AdBlockCustomList* customList = new AdBlockCustomList(this); m_subscriptions.append(customList); - connect(customList, SIGNAL(subscriptionEdited()), mApp, SLOT(reloadUserStyleSheet())); // Load all subscriptions foreach (AdBlockSubscription* subscription, m_subscriptions) { subscription->loadSubscription(m_disabledRules); + + connect(subscription, SIGNAL(subscriptionUpdated()), mApp, SLOT(reloadUserStyleSheet())); + connect(subscription, SIGNAL(subscriptionChanged()), m_matcher, SLOT(update())); } if (lastUpdate.addDays(5) < QDateTime::currentDateTime()) { @@ -285,6 +284,7 @@ qDebug() << "AdBlock loaded in" << timer.elapsed(); #endif + m_matcher->update(); m_loaded = true; } @@ -348,57 +348,24 @@ bool AdBlockManager::canBeBlocked(const QUrl &url) const { - foreach (AdBlockSubscription* subscription, m_subscriptions) { - if (subscription->adBlockDisabledForUrl(url)) { - return false; - } - } - - return true; + return !m_matcher->adBlockDisabledForUrl(url); } QString AdBlockManager::elementHidingRules() const { - if (!m_enabled) { - return QString(); - } - - QString rules; - - foreach (AdBlockSubscription* subscription, m_subscriptions) { - rules.append(subscription->elementHidingRules()); - } - - return rules; + return m_matcher->elementHidingRules(); } QString AdBlockManager::elementHidingRulesForDomain(const QUrl &url) const { - if (!isEnabled() || !canRunOnScheme(url.scheme()) || !canBeBlocked(url)) { + if (!isEnabled() || !canRunOnScheme(url.scheme()) || !canBeBlocked(url)) return QString(); - } // Acid3 doesn't like the way element hiding rules are embedded into page - if (url.host() == QLatin1String("acid3.acidtests.org")) { + if (url.host() == QLatin1String("acid3.acidtests.org")) return QString(); - } - - QString rules; - - foreach (AdBlockSubscription* subscription, m_subscriptions) { - if (subscription->elemHideDisabledForUrl(url)) { - return QString(); - } - - rules.append(subscription->elementHidingRulesForDomain(url.host())); - } - - // Remove last "," - if (!rules.isEmpty()) { - rules = rules.left(rules.size() - 1); - } - return rules; + return m_matcher->elementHidingRulesForDomain(url.host()); } AdBlockSubscription* AdBlockManager::subscriptionByName(const QString &name) const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/adblock/adblockmanager.h new/QupZilla-1.8.4/src/lib/adblock/adblockmanager.h --- old/QupZilla-1.8.3/src/lib/adblock/adblockmanager.h 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/adblock/adblockmanager.h 2014-11-03 21:21:24.000000000 +0100 @@ -28,7 +28,9 @@ class QNetworkReply; class QNetworkRequest; +class AdBlockRule; class AdBlockDialog; +class AdBlockMatcher; class AdBlockCustomList; class AdBlockSubscription; @@ -87,6 +89,7 @@ bool m_useLimitedEasyList; QList<AdBlockSubscription*> m_subscriptions; + AdBlockMatcher* m_matcher; QStringList m_disabledRules; QPointer<AdBlockDialog> m_adBlockDialog; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/adblock/adblockmatcher.cpp new/QupZilla-1.8.4/src/lib/adblock/adblockmatcher.cpp --- old/QupZilla-1.8.3/src/lib/adblock/adblockmatcher.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/QupZilla-1.8.4/src/lib/adblock/adblockmatcher.cpp 2014-11-03 21:21:24.000000000 +0100 @@ -0,0 +1,228 @@ +/* ============================================================ +* QupZilla - WebKit based browser +* Copyright (C) 2014 David Rosca <nowrep@gmail.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 3 of the License, or +* (at your option) any later version. +* +* 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/>. +* ============================================================ */ +#include "adblockmatcher.h" +#include "adblockmanager.h" +#include "adblockrule.h" +#include "adblocksubscription.h" + +AdBlockMatcher::AdBlockMatcher(AdBlockManager* manager) + : QObject(manager) + , m_manager(manager) +{ + connect(manager, SIGNAL(enabledChanged(bool)), this, SLOT(enabledChanged(bool))); +} + +AdBlockMatcher::~AdBlockMatcher() +{ + clear(); +} + +const AdBlockRule* AdBlockMatcher::match(const QNetworkRequest &request, const QString &urlDomain, const QString &urlString) const +{ + // Exception rules + if (m_networkExceptionTree.find(request, urlDomain, urlString)) + return 0; + + int count = m_networkExceptionRules.count(); + for (int i = 0; i < count; ++i) { + const AdBlockRule* rule = m_networkExceptionRules.at(i); + if (rule->networkMatch(request, urlDomain, urlString)) + return 0; + } + + // Block rules + if (const AdBlockRule* rule = m_networkBlockTree.find(request, urlDomain, urlString)) + return rule; + + count = m_networkBlockRules.count(); + for (int i = 0; i < count; ++i) { + const AdBlockRule* rule = m_networkBlockRules.at(i); + if (rule->networkMatch(request, urlDomain, urlString)) + return rule; + } + + return 0; +} + +bool AdBlockMatcher::adBlockDisabledForUrl(const QUrl &url) const +{ + int count = m_documentRules.count(); + + for (int i = 0; i < count; ++i) + if (m_documentRules.at(i)->urlMatch(url)) + return true; + + return false; +} + +bool AdBlockMatcher::elemHideDisabledForUrl(const QUrl &url) const +{ + if (adBlockDisabledForUrl(url)) + return true; + + int count = m_elemhideRules.count(); + + for (int i = 0; i < count; ++i) + if (m_elemhideRules.at(i)->urlMatch(url)) + return true; + + return false; +} + +QString AdBlockMatcher::elementHidingRules() const +{ + return m_elementHidingRules; +} + +QString AdBlockMatcher::elementHidingRulesForDomain(const QString &domain) const +{ + QString rules; + int addedRulesCount = 0; + int count = m_domainRestrictedCssRules.count(); + + for (int i = 0; i < count; ++i) { + const AdBlockRule* rule = m_domainRestrictedCssRules.at(i); + if (!rule->matchDomain(domain)) + continue; + + if (Q_UNLIKELY(addedRulesCount == 1000)) { + rules.append(rule->cssSelector()); + rules.append(QL1S("{display:none !important;}\n")); + addedRulesCount = 0; + } + else { + rules.append(rule->cssSelector() + QLatin1Char(',')); + addedRulesCount++; + } + } + + if (addedRulesCount != 0) { + rules = rules.left(rules.size() - 1); + rules.append(QL1S("{display:none !important;}\n")); + } + + return rules; +} + +void AdBlockMatcher::update() +{ + clear(); + + QHash<QString, const AdBlockRule*> cssRulesHash; + QVector<const AdBlockRule*> exceptionCssRules; + + foreach (AdBlockSubscription* subscription, m_manager->subscriptions()) { + foreach (const AdBlockRule* rule, subscription->allRules()) { + // Don't add internally disabled rules to cache + if (rule->isInternalDisabled()) + continue; + + if (rule->isCssRule()) { + // We will add only enabled css rules to cache, because there is no enabled/disabled + // check on match. They are directly embedded to pages. + if (!rule->isEnabled()) + continue; + + if (rule->isException()) + exceptionCssRules.append(rule); + else + cssRulesHash.insert(rule->cssSelector(), rule); + } + else if (rule->isDocument()) { + m_documentRules.append(rule); + } + else if (rule->isElemhide()) { + m_elemhideRules.append(rule); + } + else if (rule->isException()) { + if (!m_networkExceptionTree.add(rule)) + m_networkExceptionRules.append(rule); + } + else { + if (!m_networkBlockTree.add(rule)) + m_networkBlockRules.append(rule); + } + } + } + + foreach (const AdBlockRule* rule, exceptionCssRules) { + const AdBlockRule* originalRule = cssRulesHash.value(rule->cssSelector()); + + // If we don't have this selector, the exception does nothing + if (!originalRule) + continue; + + AdBlockRule* copiedRule = originalRule->copy(); + copiedRule->m_options |= AdBlockRule::DomainRestrictedOption; + copiedRule->m_blockedDomains.append(rule->m_allowedDomains); + + cssRulesHash[rule->cssSelector()] = copiedRule; + m_createdRules.append(copiedRule); + } + + // Apparently, excessive amount of selectors for one CSS rule is not what WebKit likes. + // (In my testings, 4931 is the number that makes it crash) + // So let's split it by 1000 selectors... + int hidingRulesCount = 0; + + QHashIterator<QString, const AdBlockRule*> it(cssRulesHash); + while (it.hasNext()) { + it.next(); + const AdBlockRule* rule = it.value(); + + if (rule->isDomainRestricted()) { + m_domainRestrictedCssRules.append(rule); + } + else if (Q_UNLIKELY(hidingRulesCount == 1000)) { + m_elementHidingRules.append(rule->cssSelector()); + m_elementHidingRules.append(QL1S("{display:none !important;} ")); + hidingRulesCount = 0; + } + else { + m_elementHidingRules.append(rule->cssSelector() + QLatin1Char(',')); + hidingRulesCount++; + } + } + + if (hidingRulesCount != 0) { + m_elementHidingRules = m_elementHidingRules.left(m_elementHidingRules.size() - 1); + m_elementHidingRules.append(QL1S("{display:none !important;} ")); + } +} + +void AdBlockMatcher::clear() +{ + m_networkExceptionTree.clear(); + m_networkExceptionRules.clear(); + m_networkBlockTree.clear(); + m_networkBlockRules.clear(); + m_domainRestrictedCssRules.clear(); + m_elementHidingRules.clear(); + m_documentRules.clear(); + m_elemhideRules.clear(); + qDeleteAll(m_createdRules); + m_createdRules.clear(); +} + +void AdBlockMatcher::enabledChanged(bool enabled) +{ + if (enabled) + update(); + else + clear(); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/adblock/adblockmatcher.h new/QupZilla-1.8.4/src/lib/adblock/adblockmatcher.h --- old/QupZilla-1.8.3/src/lib/adblock/adblockmatcher.h 1970-01-01 01:00:00.000000000 +0100 +++ new/QupZilla-1.8.4/src/lib/adblock/adblockmatcher.h 2014-11-03 21:21:24.000000000 +0100 @@ -0,0 +1,67 @@ +/* ============================================================ +* QupZilla - WebKit based browser +* Copyright (C) 2014 David Rosca <nowrep@gmail.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 3 of the License, or +* (at your option) any later version. +* +* 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 ADBLOCKMATCHER_H +#define ADBLOCKMATCHER_H + +#include <QUrl> +#include <QObject> + +#include "qzcommon.h" +#include "adblocksearchtree.h" + +class AdBlockManager; + +class QUPZILLA_EXPORT AdBlockMatcher : public QObject +{ + Q_OBJECT + +public: + explicit AdBlockMatcher(AdBlockManager* manager); + ~AdBlockMatcher(); + + const AdBlockRule* match(const QNetworkRequest &request, const QString &urlDomain, const QString &urlString) const; + + bool adBlockDisabledForUrl(const QUrl &url) const; + bool elemHideDisabledForUrl(const QUrl &url) const; + + QString elementHidingRules() const; + QString elementHidingRulesForDomain(const QString &domain) const; + +public slots: + void update(); + void clear(); + +private slots: + void enabledChanged(bool enabled); + +private: + AdBlockManager* m_manager; + + QVector<AdBlockRule*> m_createdRules; + QVector<const AdBlockRule*> m_networkExceptionRules; + QVector<const AdBlockRule*> m_networkBlockRules; + QVector<const AdBlockRule*> m_domainRestrictedCssRules; + QVector<const AdBlockRule*> m_documentRules; + QVector<const AdBlockRule*> m_elemhideRules; + + QString m_elementHidingRules; + AdBlockSearchTree m_networkBlockTree; + AdBlockSearchTree m_networkExceptionTree; +}; + +#endif // ADBLOCKMATCHER_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/adblock/adblockrule.h new/QupZilla-1.8.4/src/lib/adblock/adblockrule.h --- old/QupZilla-1.8.3/src/lib/adblock/adblockrule.h 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/adblock/adblockrule.h 2014-11-03 21:21:24.000000000 +0100 @@ -169,6 +169,7 @@ // Use dynamic allocation to save memory RegExp* m_regExp; + friend class AdBlockMatcher; friend class AdBlockSearchTree; friend class AdBlockSubscription; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/adblock/adblocksubscription.cpp new/QupZilla-1.8.4/src/lib/adblock/adblocksubscription.cpp --- old/QupZilla-1.8.3/src/lib/adblock/adblocksubscription.cpp 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/adblock/adblocksubscription.cpp 2014-11-03 21:21:24.000000000 +0100 @@ -128,8 +128,6 @@ m_rules.append(rule); } - populateCache(); - // Initial update if (m_rules.isEmpty() && !m_updated) { QTimer::singleShot(0, this, SLOT(updateSubscription())); @@ -176,7 +174,9 @@ } loadSubscription(AdBlockManager::instance()->disabledRules()); + emit subscriptionUpdated(); + emit subscriptionChanged(); } bool AdBlockSubscription::saveDownloadedData(const QByteArray &data) @@ -210,103 +210,6 @@ return true; } -const AdBlockRule* AdBlockSubscription::match(const QNetworkRequest &request, const QString &urlDomain, const QString &urlString) const -{ - // Exception rules - if (m_networkExceptionTree.find(request, urlDomain, urlString)) { - return 0; - } - - int count = m_networkExceptionRules.count(); - for (int i = 0; i < count; ++i) { - const AdBlockRule* rule = m_networkExceptionRules.at(i); - if (rule->networkMatch(request, urlDomain, urlString)) { - return 0; - } - } - - // Block rules - if (const AdBlockRule* rule = m_networkBlockTree.find(request, urlDomain, urlString)) { - return rule; - } - - count = m_networkBlockRules.count(); - for (int i = 0; i < count; ++i) { - const AdBlockRule* rule = m_networkBlockRules.at(i); - if (rule->networkMatch(request, urlDomain, urlString)) { - return rule; - } - } - - return 0; -} - -bool AdBlockSubscription::adBlockDisabledForUrl(const QUrl &url) const -{ - int count = m_documentRules.count(); - for (int i = 0; i < count; ++i) { - const AdBlockRule* rule = m_documentRules.at(i); - if (rule->urlMatch(url)) { - return true; - } - } - - return false; -} - -bool AdBlockSubscription::elemHideDisabledForUrl(const QUrl &url) const -{ - if (adBlockDisabledForUrl(url)) { - return true; - } - - int count = m_elemhideRules.count(); - for (int i = 0; i < count; ++i) { - const AdBlockRule* rule = m_elemhideRules.at(i); - if (rule->urlMatch(url)) { - return true; - } - } - - return false; -} - -QString AdBlockSubscription::elementHidingRules() const -{ - return m_elementHidingRules; -} - -QString AdBlockSubscription::elementHidingRulesForDomain(const QString &domain) const -{ - QString rules; - - int addedRulesCount = 0; - int count = m_domainRestrictedCssRules.count(); - for (int i = 0; i < count; ++i) { - const AdBlockRule* rule = m_domainRestrictedCssRules.at(i); - if (!rule->matchDomain(domain)) { - continue; - } - - if (Q_UNLIKELY(addedRulesCount == 1000)) { - rules.append(rule->cssSelector()); - rules.append("{display:none !important;}\n"); - addedRulesCount = 0; - } - else { - rules.append(rule->cssSelector() + QLatin1Char(',')); - addedRulesCount++; - } - } - - if (addedRulesCount != 0) { - rules = rules.left(rules.size() - 1); - rules.append("{display:none !important;}\n"); - } - - return rules; -} - const AdBlockRule* AdBlockSubscription::rule(int offset) const { if (!QzTools::containsIndex(m_rules, offset)) { @@ -331,10 +234,10 @@ rule->setEnabled(true); AdBlockManager::instance()->removeDisabledRule(rule->filter()); - if (rule->isCssRule()) { - populateCache(); + emit subscriptionChanged(); + + if (rule->isCssRule()) mApp->reloadUserStyleSheet(); - } return rule; } @@ -349,10 +252,10 @@ rule->setEnabled(false); AdBlockManager::instance()->addDisabledRule(rule->filter()); - if (rule->isCssRule()) { - populateCache(); + emit subscriptionChanged(); + + if (rule->isCssRule()) mApp->reloadUserStyleSheet(); - } return rule; } @@ -386,112 +289,6 @@ return 0; } -void AdBlockSubscription::populateCache() -{ - m_networkExceptionTree.clear(); - m_networkExceptionRules.clear(); - m_networkBlockTree.clear(); - m_networkBlockRules.clear(); - m_domainRestrictedCssRules.clear(); - m_elementHidingRules.clear(); - m_documentRules.clear(); - m_elemhideRules.clear(); - - qDeleteAll(m_createdRules); - m_createdRules.clear(); - - QHash<QString, const AdBlockRule*> cssRulesHash; - QVector<const AdBlockRule*> exceptionCssRules; - - int count = m_rules.count(); - for (int i = 0; i < count; ++i) { - const AdBlockRule* rule = m_rules.at(i); - - // Don't add internally disabled rules to cache - if (rule->isInternalDisabled()) { - continue; - } - - if (rule->isCssRule()) { - // We will add only enabled css rules to cache, because there is no enabled/disabled - // check on match. They are directly embedded to pages. - if (!rule->isEnabled()) { - continue; - } - - if (rule->isException()) { - exceptionCssRules.append(rule); - } - else { - cssRulesHash.insert(rule->cssSelector(), rule); - } - } - else if (rule->isDocument()) { - m_documentRules.append(rule); - } - else if (rule->isElemhide()) { - m_elemhideRules.append(rule); - } - else if (rule->isException()) { - if (!m_networkExceptionTree.add(rule)) { - m_networkExceptionRules.append(rule); - } - } - else { - if (!m_networkBlockTree.add(rule)) { - m_networkBlockRules.append(rule); - } - } - } - - count = exceptionCssRules.count(); - for (int i = 0; i < count; ++i) { - const AdBlockRule* rule = exceptionCssRules.at(i); - const AdBlockRule* originalRule = cssRulesHash.value(rule->cssSelector()); - - // If we don't have this selector, the exception does nothing - if (!originalRule) { - continue; - } - - AdBlockRule* copiedRule = originalRule->copy(); - copiedRule->m_options |= AdBlockRule::DomainRestrictedOption; - copiedRule->m_blockedDomains.append(rule->m_allowedDomains); - - cssRulesHash[rule->cssSelector()] = copiedRule; - m_createdRules.append(copiedRule); - } - - // Apparently, excessive amount of selectors for one CSS rule is not what WebKit likes. - // (In my testings, 4931 is the number that makes it crash) - // So let's split it by 1000 selectors... - int hidingRulesCount = 0; - - QHashIterator<QString, const AdBlockRule*> it(cssRulesHash); - while (it.hasNext()) { - it.next(); - const AdBlockRule* rule = it.value(); - - if (rule->isDomainRestricted()) { - m_domainRestrictedCssRules.append(rule); - } - else if (Q_UNLIKELY(hidingRulesCount == 1000)) { - m_elementHidingRules.append(rule->cssSelector()); - m_elementHidingRules.append(QL1S("{display:none !important;} ")); - hidingRulesCount = 0; - } - else { - m_elementHidingRules.append(rule->cssSelector() + QLatin1Char(',')); - hidingRulesCount++; - } - } - - if (hidingRulesCount != 0) { - m_elementHidingRules = m_elementHidingRules.left(m_elementHidingRules.size() - 1); - m_elementHidingRules.append(QL1S("{display:none !important;} ")); - } -} - AdBlockSubscription::~AdBlockSubscription() { qDeleteAll(m_rules); @@ -519,12 +316,13 @@ QFile file(filePath()); if (file.open(QFile::WriteOnly | QFile::Append)) { QTextStream stream(&file); + stream.setCodec("UTF-8"); - if (!rules.contains(ddg1)) - stream << ddg1; + if (!rules.contains(ddg1 + QL1S("\n"))) + stream << ddg1 << endl; - if (!rules.contains(ddg2)) - stream << ddg2; + if (!rules.contains(QL1S("\n") + ddg2)) + stream << ddg2 << endl; } file.close(); @@ -590,9 +388,11 @@ int AdBlockCustomList::addRule(AdBlockRule* rule) { m_rules.append(rule); - populateCache(); - emit subscriptionEdited(); + emit subscriptionChanged(); + + if (rule->isCssRule()) + mApp->reloadUserStyleSheet(); return m_rules.count() - 1; } @@ -607,9 +407,11 @@ const QString filter = rule->filter(); m_rules.remove(offset); - populateCache(); - emit subscriptionEdited(); + emit subscriptionChanged(); + + if (rule->isCssRule()) + mApp->reloadUserStyleSheet(); AdBlockManager::instance()->removeDisabledRule(filter); @@ -623,12 +425,14 @@ return 0; } - delete m_rules.at(offset); - + AdBlockRule* oldRule = m_rules.at(offset); m_rules[offset] = rule; - populateCache(); - emit subscriptionEdited(); + emit subscriptionChanged(); + + if (rule->isCssRule() || oldRule->isCssRule()) + mApp->reloadUserStyleSheet(); + delete oldRule; return m_rules[offset]; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/adblock/adblocksubscription.h new/QupZilla-1.8.4/src/lib/adblock/adblocksubscription.h --- old/QupZilla-1.8.3/src/lib/adblock/adblocksubscription.h 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/adblock/adblocksubscription.h 2014-11-03 21:21:24.000000000 +0100 @@ -77,14 +77,6 @@ virtual void loadSubscription(const QStringList &disabledRules); virtual void saveSubscription(); - const AdBlockRule* match(const QNetworkRequest &request, const QString &urlDomain, const QString &urlString) const; - - bool adBlockDisabledForUrl(const QUrl &url) const; - bool elemHideDisabledForUrl(const QUrl &url) const; - - QString elementHidingRules() const; - QString elementHidingRulesForDomain(const QString &domain) const; - const AdBlockRule* rule(int offset) const; QVector<AdBlockRule*> allRules() const; @@ -102,6 +94,7 @@ void updateSubscription(); signals: + void subscriptionChanged(); void subscriptionUpdated(); void subscriptionError(const QString &message); @@ -111,23 +104,8 @@ protected: virtual bool saveDownloadedData(const QByteArray &data); - void populateCache(); - FollowRedirectReply* m_reply; - QVector<AdBlockRule*> m_rules; - QVector<AdBlockRule*> m_createdRules; - QString m_elementHidingRules; - - QVector<const AdBlockRule*> m_networkExceptionRules; - QVector<const AdBlockRule*> m_networkBlockRules; - QVector<const AdBlockRule*> m_domainRestrictedCssRules; - - QVector<const AdBlockRule*> m_documentRules; - QVector<const AdBlockRule*> m_elemhideRules; - - AdBlockSearchTree m_networkBlockTree; - AdBlockSearchTree m_networkExceptionTree; private: QString m_title; @@ -155,9 +133,6 @@ int addRule(AdBlockRule* rule); bool removeRule(int offset); const AdBlockRule* replaceRule(AdBlockRule* rule, int offset); - -signals: - void subscriptionEdited(); }; #endif // ADBLOCKSUBSCRIPTION_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/app/mainapplication.cpp new/QupZilla-1.8.4/src/lib/app/mainapplication.cpp --- old/QupZilla-1.8.3/src/lib/app/mainapplication.cpp 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/app/mainapplication.cpp 2014-11-03 21:21:24.000000000 +0100 @@ -894,8 +894,8 @@ webSettings->setFontFamily(QWebSettings::FixedFont, settings.value("FixedFont", webSettings->fontFamily(QWebSettings::FixedFont)).toString()); webSettings->setFontFamily(QWebSettings::SansSerifFont, settings.value("SansSerifFont", webSettings->fontFamily(QWebSettings::SansSerifFont)).toString()); webSettings->setFontFamily(QWebSettings::SerifFont, settings.value("SerifFont", webSettings->fontFamily(QWebSettings::SerifFont)).toString()); - webSettings->setFontSize(QWebSettings::DefaultFontSize, settings.value("DefaultFontSize", 14).toInt()); - webSettings->setFontSize(QWebSettings::DefaultFixedFontSize, settings.value("FixedFontSize", 12).toInt()); + webSettings->setFontSize(QWebSettings::DefaultFontSize, settings.value("DefaultFontSize", 15).toInt()); + webSettings->setFontSize(QWebSettings::DefaultFixedFontSize, settings.value("FixedFontSize", 14).toInt()); webSettings->setFontSize(QWebSettings::MinimumFontSize, settings.value("MinimumFontSize", 3).toInt()); webSettings->setFontSize(QWebSettings::MinimumLogicalFontSize, settings.value("MinimumLogicalFontSize", 5).toInt()); settings.endGroup(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/app/mainmenu.cpp new/QupZilla-1.8.4/src/lib/app/mainmenu.cpp --- old/QupZilla-1.8.3/src/lib/app/mainmenu.cpp 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/app/mainmenu.cpp 2014-11-03 21:21:24.000000000 +0100 @@ -629,12 +629,15 @@ m_actions[QSL("Other/RestoreClosedTab")] = action; #ifdef Q_OS_MAC - m_actions[QSL("View/FullScreen")]->setShortcut(QKeySequence(QSL("F11"))); + m_actions[QSL("View/FullScreen")]->setShortcut(QKeySequence::FullScreen); // Add standard actions to File Menu (as it won't be ever cleared) and Mac menubar should move them to "Application" menu m_menuFile->addAction(m_actions[QSL("Standard/About")]); m_menuFile->addAction(m_actions[QSL("Standard/Preferences")]); + // Prevent ConfigInfo action to be detected as "Preferences..." action in Mac menubar + m_actions[QSL("Help/ConfigInfo")]->setMenuRole(QAction::NoRole); + // Create Dock menu QMenu* dockMenu = new QMenu(0); dockMenu->addAction(m_actions[QSL("File/NewTab")]); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/app/settings.cpp new/QupZilla-1.8.4/src/lib/app/settings.cpp --- old/QupZilla-1.8.3/src/lib/app/settings.cpp 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/app/settings.cpp 2014-11-03 21:21:24.000000000 +0100 @@ -25,8 +25,9 @@ Settings::Settings() { + // Save currently opened group if (!s_settings->group().isEmpty()) { - qDebug("Settings: Creating object with opened group!"); + m_openedGroup = s_settings->group(); s_settings->endGroup(); } } @@ -78,7 +79,11 @@ Settings::~Settings() { if (!s_settings->group().isEmpty()) { - qDebug("Settings: Deleting object with opened group!"); + qDebug() << "Settings: Deleting object with opened group!"; s_settings->endGroup(); } + + // Restore opened group + if (!m_openedGroup.isEmpty()) + s_settings->beginGroup(m_openedGroup); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/app/settings.h new/QupZilla-1.8.4/src/lib/app/settings.h --- old/QupZilla-1.8.3/src/lib/app/settings.h 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/app/settings.h 2014-11-03 21:21:24.000000000 +0100 @@ -18,7 +18,6 @@ #ifndef SETTINGS_H #define SETTINGS_H -#include <qglobal.h> #include <QVariant> #include "qzcommon.h" @@ -45,14 +44,12 @@ void beginGroup(const QString &prefix); void endGroup(); -signals: - -public slots: - private: static QSettings* s_settings; static QzSettings* s_qzSettings; + QString m_openedGroup; + }; #endif // SETTINGS_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/lib.pro new/QupZilla-1.8.4/src/lib/lib.pro --- old/QupZilla-1.8.3/src/lib/lib.pro 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/lib.pro 2014-11-03 21:21:24.000000000 +0100 @@ -242,6 +242,7 @@ webtab/searchtoolbar.cpp \ webtab/tabbedwebview.cpp \ webtab/webtab.cpp \ + adblock/adblockmatcher.cpp HEADERS += \ 3rdparty/ecwin7.h \ @@ -445,6 +446,7 @@ webtab/searchtoolbar.h \ webtab/tabbedwebview.h \ webtab/webtab.h \ + adblock/adblockmatcher.h FORMS += \ adblock/adblockaddsubscriptiondialog.ui \ @@ -506,7 +508,12 @@ data/oxygen-fallback.qrc isEqual(QT_MAJOR_VERSION, 5) { - include(3rdparty/qftp/qftp.pri) + qtHaveModule(ftp) { + QT *= ftp + } else { + include(3rdparty/qftp/qftp.pri) + } + SOURCES += tools/qzregexp.cpp } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/network/networkmanager.cpp new/QupZilla-1.8.4/src/lib/network/networkmanager.cpp --- old/QupZilla-1.8.3/src/lib/network/networkmanager.cpp 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/network/networkmanager.cpp 2014-11-03 21:21:24.000000000 +0100 @@ -102,8 +102,8 @@ // Force SSLv3 for servers that doesn't understand TLSv1 handshake QStringList sslv3Sites; - sslv3Sites << QLatin1String("centrum.sk") << QLatin1String("centrum.cz") << QLatin1String("oneaccount.com") << QLatin1String("hdi.de") - << QLatin1String("live.com") << QLatin1String("i0.cz") << QLatin1String("sermepa.es"); + sslv3Sites << QLatin1String("centrum.sk") << QLatin1String("centrum.cz") << QLatin1String("oneaccount.com") + << QLatin1String("i0.cz") << QLatin1String("sermepa.es"); settings.beginGroup("Web-Browser-Settings"); m_doNotTrack = settings.value("DoNotTrack", false).toBool(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/network/schemehandlers/qupzillaschemehandler.cpp new/QupZilla-1.8.4/src/lib/network/schemehandlers/qupzillaschemehandler.cpp --- old/QupZilla-1.8.3/src/lib/network/schemehandlers/qupzillaschemehandler.cpp 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/network/schemehandlers/qupzillaschemehandler.cpp 2014-11-03 21:21:24.000000000 +0100 @@ -417,31 +417,21 @@ QString debugBuild = tr("Disabled"); #endif -#if defined (USE_WEBGL) || (QTWEBKIT_FROM_2_3 && defined(Q_OS_UNIX)) - QString webGLEnabled = tr("<b>Enabled</b>"); -#else - QString webGLEnabled = tr("Disabled"); -#endif - +#ifdef Q_OS_WIN #if defined(Q_OS_WIN) && defined(W7API) QString w7APIEnabled = tr("<b>Enabled</b>"); #else QString w7APIEnabled = tr("Disabled"); #endif - -#if defined(Q_OS_UNIX) && defined(KDE_INTEGRATION) - QString KDEIntegration = tr("<b>Enabled</b>"); -#else - QString KDEIntegration = tr("Disabled"); #endif QString portableBuild = mApp->isPortable() ? tr("<b>Enabled</b>") : tr("Disabled"); cPage.replace(QLatin1String("%BUILD-CONFIG-TEXT%"), QString("<dt>%1</dt><dd>%2<dd>").arg(tr("Debug build"), debugBuild) + - QString("<dt>%1</dt><dd>%2<dd>").arg(tr("WebGL support"), webGLEnabled) + +#ifdef Q_OS_WIN QString("<dt>%1</dt><dd>%2<dd>").arg(tr("Windows 7 API"), w7APIEnabled) + - QString("<dt>%1</dt><dd>%2<dd>").arg(tr("KDE integration"), KDEIntegration) + +#endif QString("<dt>%1</dt><dd>%2<dd>").arg(tr("Portable build"), portableBuild)); cPage = QzTools::applyDirectionToPage(cPage); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/lib/plugins/plugins.cpp new/QupZilla-1.8.4/src/lib/plugins/plugins.cpp --- old/QupZilla-1.8.3/src/lib/plugins/plugins.cpp 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/lib/plugins/plugins.cpp 2014-11-03 21:21:24.000000000 +0100 @@ -180,9 +180,6 @@ QDir pluginsDir = QDir(dir); foreach (const QString &fileName, pluginsDir.entryList(QDir::Files)) { const QString absolutePath = pluginsDir.absoluteFilePath(fileName); - if (m_allowedPlugins.contains(absolutePath)) { - continue; - } QPluginLoader* loader = new QPluginLoader(absolutePath); PluginInterface* iPlugin = qobject_cast<PluginInterface*>(loader->instance()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/main/Info.plist new/QupZilla-1.8.4/src/main/Info.plist --- old/QupZilla-1.8.3/src/main/Info.plist 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/main/Info.plist 2014-11-03 21:21:24.000000000 +0100 @@ -7,9 +7,9 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleGetInfoString</key> - <string>1.8.3</string> + <string>1.8.4</string> <key>CFBundleVersion</key> - <string>1.8.3</string> + <string>1.8.4</string> <key>CFBundleSignature</key> <string>@TYPEINFO@</string> <key>CFBundleExecutable</key> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/src/main/appicon.rc new/QupZilla-1.8.4/src/main/appicon.rc --- old/QupZilla-1.8.3/src/main/appicon.rc 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/src/main/appicon.rc 2014-11-03 21:21:24.000000000 +0100 @@ -4,8 +4,8 @@ IDI_ICON2 ICON DISCARDABLE "..\lib\data\icons\exeicons\page.ico" VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,8,3,0 - PRODUCTVERSION 1,8,3,0 + FILEVERSION 1,8,4,0 + PRODUCTVERSION 1,8,4,0 FILEFLAGS 0x0L FILEFLAGSMASK 0x3fL FILEOS 0x00040004L @@ -18,12 +18,12 @@ BEGIN VALUE "CompanyName", "QupZilla Team" VALUE "FileDescription", "QupZilla Web Browser" - VALUE "FileVersion", "1.8.3" + VALUE "FileVersion", "1.8.4" VALUE "LegalCopyright", "Copyright (C) 2010-2014 David Rosca" VALUE "InternalName", "qupzilla" VALUE "OriginalFilename", "qupzilla.exe" VALUE "ProductName", "QupZilla" - VALUE "ProductVersion", "1.8.3" + VALUE "ProductVersion", "1.8.4" END END BLOCK "VarFileInfo" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/tests/autotests/networktest.cpp new/QupZilla-1.8.4/tests/autotests/networktest.cpp --- old/QupZilla-1.8.3/tests/autotests/networktest.cpp 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/tests/autotests/networktest.cpp 2014-11-03 21:21:24.000000000 +0100 @@ -45,8 +45,6 @@ QTest::newRow("centrum.sk") << QUrl("https://user.centrum.sk/"); QTest::newRow("centrum.cz") << QUrl("https://user.centrum.cz/"); QTest::newRow("oneaccount.com") << QUrl("https://service.oneaccount.com/onlineV2/OSV2?event=login&pt=3"); - QTest::newRow("hdi.de") << QUrl("https://www.hdi.de/"); - QTest::newRow("office-webapps") << QUrl("https://skydrive.live.com/view.aspx?resid=4FE8716FF67627C7!1218&cid=4fe8716ff67627c7&app=Word&wdo=2"); QTest::newRow("i0.cz") << QUrl("https://i0.cz/6/ju/css/login/centrum.sk.css"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/QupZilla-1.8.3/windows/installer.nsi new/QupZilla-1.8.4/windows/installer.nsi --- old/QupZilla-1.8.3/windows/installer.nsi 2014-10-19 20:43:38.000000000 +0200 +++ new/QupZilla-1.8.4/windows/installer.nsi 2014-11-03 21:21:24.000000000 +0100 @@ -24,7 +24,7 @@ SetCompressor /SOLID /FINAL lzma !define PRODUCT_NAME "QupZilla" -!define /date PRODUCT_VERSION "1.8.3" +!define /date PRODUCT_VERSION "1.8.4" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\qupzilla.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org