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.sen...@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.sen...@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 <now...@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 <now...@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+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to