From e4c17c961d145bb6c4c945e1d7be4eea702abecf Mon Sep 17 00:00:00 2001
From: matgic78 <matgic78@gmail.com>
Date: Sun, 22 Nov 2009 11:46:44 +0100
Subject: ClickToFlash : first step For now, no config and only working when
 there is only one flash in the page

---
 src/CMakeLists.txt       |  54 +++++++++---------
 src/clicktoflash.cpp     | 142 +++++++++++++++++++++++++++++++++++++++++++++++
 src/clicktoflash.h       |  59 ++++++++++++++++++++
 src/webpluginfactory.cpp |  29 +++++++++-
 src/webpluginfactory.h   |   9 +++
 5 files changed, 266 insertions(+), 27 deletions(-)
 create mode 100644 src/clicktoflash.cpp
 create mode 100644 src/clicktoflash.h

(limited to 'src')

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 23d5595e..6aed2351 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -7,38 +7,40 @@ ADD_SUBDIRECTORY( tests )
 ### ------- SETTING REKONQ FILES..
 
 SET( rekonq_KDEINIT_SRCS
-    application.cpp 
-    findbar.cpp
-    mainview.cpp
-    mainwindow.cpp 
-    previewimage.cpp
-    sessionmanager.cpp
-    tabbar.cpp
-    webpage.cpp
-    webpluginfactory.cpp
-    websnap.cpp
-    webview.cpp
+application.cpp 
+findbar.cpp
+mainview.cpp
+mainwindow.cpp 
+previewimage.cpp
+sessionmanager.cpp
+tabbar.cpp
+webpage.cpp
+webpluginfactory.cpp
+websnap.cpp
+webview.cpp
 #----------------------------------------
-    history/autosaver.cpp 
-    history/historymanager.cpp
-    history/historymodels.cpp
-    history/historypanel.cpp
-    history/sidepanel.cpp
+history/autosaver.cpp 
+history/historymanager.cpp
+history/historymodels.cpp
+history/historypanel.cpp
+history/sidepanel.cpp
 #----------------------------------------
-    rekonqpage/newtabpage.cpp
+rekonqpage/newtabpage.cpp
 #----------------------------------------
-    settings/settingsdialog.cpp
+settings/settingsdialog.cpp
 #----------------------------------------
-    bookmarks/bookmarksmanager.cpp
-    bookmarks/bookmarkspanel.cpp
-    bookmarks/bookmarkstreemodel.cpp
-    bookmarks/bookmarksproxy.cpp
+bookmarks/bookmarksmanager.cpp
+bookmarks/bookmarkspanel.cpp
+bookmarks/bookmarkstreemodel.cpp
+bookmarks/bookmarksproxy.cpp
 #----------------------------------------
-    adblock/adblockmanager.cpp
-    adblock/khtml_filter.cpp
+adblock/adblockmanager.cpp
+adblock/khtml_filter.cpp
 #----------------------------------------
-    urlbar/urlbar.cpp
-    urlbar/lineedit.cpp
+urlbar/urlbar.cpp
+urlbar/lineedit.cpp
+#----------------------------------------
+clicktoflash.cpp
 )
 
 
diff --git a/src/clicktoflash.cpp b/src/clicktoflash.cpp
new file mode 100644
index 00000000..d89c1ec5
--- /dev/null
+++ b/src/clicktoflash.cpp
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2009, Benjamin C. Meyer
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Benjamin Meyer nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "clicktoflash.h"
+
+#include <KLocalizedString>
+
+#include <QFile>
+#include <QMenu>
+#include <QWebFrame>
+#include <QWebView>
+#include <QWebElement>
+#include <QHBoxLayout>
+
+#include <KDebug>
+
+ClickToFlash::ClickToFlash(const WebPluginFactory *factory, QWidget *parent)
+    : QWidget(parent)
+    , m_factory(factory)
+{
+    
+    kDebug() << "creating clicktoflash";
+    QHBoxLayout *l = new QHBoxLayout(this);
+    setLayout(l);
+    
+    QToolButton *button = new QToolButton(this);
+    button->setPopupMode(QToolButton::InstantPopup);
+    button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+    button->setText(i18n("Load animation"));
+    button->setAutoRaise(false);
+    layout()->addWidget(button);
+    connect(button, SIGNAL(clicked(bool)), this, SLOT(load(bool)));
+}
+
+/*void ClickToFlash::showContextMenu()
+{
+    QMenu menu;
+    menu.addAction(tr("Load"), this, SLOT(load()));
+    menu.addAction(tr("Load All"), this, SLOT(loadAll()));
+    menu.addSeparator();
+    QString host = url.host();
+    QAction *add = menu.addAction(tr("Add %1 to Whitelist").arg(host), this, SLOT(addToWhitelist()));
+    QAction *remove = menu.addAction(tr("Remove from Whitelist"), this, SLOT(removeFromWhitelist()));
+    bool onWhitelist = m_plugin->onWhitelist(host);
+    add->setEnabled(!onWhitelist);
+    remove->setEnabled(onWhitelist);
+    menu.addSeparator();
+    menu.addAction(tr("Settings"), this, SLOT(configure()));
+    menu.exec(QCursor::pos());
+}
+
+void ClickToFlash::addToWhitelist()
+{
+    m_plugin->addToWhitelist(url.host());
+}
+
+void ClickToFlash::removeFromWhitelist()
+{
+    m_plugin->removeFromWhitelist(url.host());
+}
+
+void ClickToFlash::configure()
+{
+    m_plugin->configure();
+}
+
+void ClickToFlash::loadAll()
+{
+    load(true);
+}
+*/
+void ClickToFlash::load(bool loadAll)
+{
+    QWidget *parent = parentWidget();
+    QWebView *view = 0;
+    while (parent) 
+    {
+        if (QWebView *aView = qobject_cast<QWebView*>(parent)) 
+        {
+            view = aView;
+            break;
+        }
+        parent = parent->parentWidget();
+    }
+    if (!view)
+        return;
+
+    const QString selector = QLatin1String("%1[type=\"application/x-shockwave-flash\"]");
+
+    hide();
+    
+    QList<QWebFrame*> frames;
+    frames.append(view->page()->mainFrame());
+    while (!frames.isEmpty()) 
+    {
+        QWebFrame *frame = frames.takeFirst();
+        QWebElement docElement = frame->documentElement();
+
+        QWebElementCollection elements;
+        elements.append(docElement.findAll(selector.arg(QLatin1String("object"))));
+        elements.append(docElement.findAll(selector.arg(QLatin1String("embed"))));
+
+        QWebElement element;
+        foreach (element, elements) 
+        {
+            QWebElement substitute = element.clone();
+            emit signalLoadClickToFlash(true);
+            element.replace(substitute);
+        }
+
+        frames += frame->childFrames();
+    }
+    
+    deleteLater();
+}
+
+
diff --git a/src/clicktoflash.h b/src/clicktoflash.h
new file mode 100644
index 00000000..382c6001
--- /dev/null
+++ b/src/clicktoflash.h
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2009, Benjamin C. Meyer
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Benjamin Meyer nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef CLICKTOFLASH_H
+#define CLICKTOFLASH_H
+
+#include <QWidget>
+#include <QToolButton>
+
+class WebPluginFactory;
+
+class ClickToFlash : public QWidget
+{
+    Q_OBJECT
+public:
+    ClickToFlash(const WebPluginFactory *factory, QWidget *parent = 0);
+
+signals:
+    void signalLoadClickToFlash(bool);
+    
+private slots:
+    /*void configure();
+    void addToWhitelist();
+    void removeFromWhitelist();
+    void showContextMenu();
+    void loadAll();*/
+    void load(bool loadAll = false);
+    
+private:
+    const WebPluginFactory *m_factory;
+};
+
+#endif // CLICKTOFLASH_H
+
diff --git a/src/webpluginfactory.cpp b/src/webpluginfactory.cpp
index af799905..2c8ed181 100644
--- a/src/webpluginfactory.cpp
+++ b/src/webpluginfactory.cpp
@@ -32,6 +32,7 @@
 #include "application.h"
 #include "mainwindow.h"
 #include "previewimage.h"
+#include "clicktoflash.h"
 
 // KDE Includes
 #include <KDebug>
@@ -40,6 +41,8 @@
 WebPluginFactory::WebPluginFactory(QObject *parent)
     : KWebPluginFactory(parent)
 {
+    loadClickToFlash = false;
+    connect(this, SIGNAL(signalLoadClickToFlash(bool)), SLOT(setLoadClickToFlash(bool)));
 }
 
 
@@ -48,6 +51,13 @@ WebPluginFactory::~WebPluginFactory()
 }
 
 
+
+void WebPluginFactory::setLoadClickToFlash(bool load)
+{
+    loadClickToFlash = load;
+}
+
+
 QObject *WebPluginFactory::create(const QString &mimeType,
                                   const QUrl &url,
                                   const QStringList &argumentNames,
@@ -74,7 +84,19 @@ QObject *WebPluginFactory::create(const QString &mimeType,
     
         return new PreviewImage(url, title, number, isFavorite);
     }
-
+    
+    if(mimeType == QString("application/x-shockwave-flash") 
+        && !loadClickToFlash) // the button wasn't clicked
+    {
+        ClickToFlash* ctf = new ClickToFlash(this);
+        connect(ctf, SIGNAL(signalLoadClickToFlash(bool)), this, SLOT(setLoadClickToFlash(bool)));
+        return ctf;
+    }
+    
+    // this let QtWebKit using builtin plugins 
+    // to load in example flash contents and so on..
+    kDebug() << "No plugins found for" << mimeType << ". Falling back to QtWebKit ones...";
+    emit signalLoadClickToFlash(false);
     return KWebPluginFactory::create(mimeType, url, argumentNames, argumentValues);
 }
 
@@ -88,5 +110,10 @@ QList<QWebPluginFactory::Plugin> WebPluginFactory::plugins() const
     p.description = "plugin for embedding Web snapped images";
     plugins.append(p);
     
+    p.name = "application/x-shockwave-flash";
+    p.description = "Plugin for flash animations";
+    plugins.append(p);
+    
+    
     return plugins;
 }
diff --git a/src/webpluginfactory.h b/src/webpluginfactory.h
index 30a366d4..20dc6642 100644
--- a/src/webpluginfactory.h
+++ b/src/webpluginfactory.h
@@ -50,6 +50,15 @@ public:
                             const QStringList &argumentValues) const;
 
     virtual QList<Plugin> plugins() const;
+    
+signals:
+    void signalLoadClickToFlash(bool) const;
+    
+public slots:
+    void setLoadClickToFlash(bool load);
+    
+private:
+    bool loadClickToFlash;
 };
 
 #endif // WEB_PLUGIN_FACTORY_H
-- 
cgit v1.2.1


From 19d7611101253c27a841480fca55f1bc5cd767b6 Mon Sep 17 00:00:00 2001
From: matgic78 <matgic78@gmail.com>
Date: Sun, 22 Nov 2009 14:53:33 +0100
Subject: clicktoflash : step 2 make it work when there are more than one
 plugin in the same page

---
 src/clicktoflash.cpp     | 33 +++++++++++++++++++++++++++------
 src/clicktoflash.h       |  8 ++++++--
 src/webpluginfactory.cpp |  2 +-
 3 files changed, 34 insertions(+), 9 deletions(-)

(limited to 'src')

diff --git a/src/clicktoflash.cpp b/src/clicktoflash.cpp
index d89c1ec5..39d55e5a 100644
--- a/src/clicktoflash.cpp
+++ b/src/clicktoflash.cpp
@@ -39,9 +39,9 @@
 
 #include <KDebug>
 
-ClickToFlash::ClickToFlash(const WebPluginFactory *factory, QWidget *parent)
+ClickToFlash::ClickToFlash(const WebPluginFactory *factory, QUrl pluginUrl, QWidget *parent)
     : QWidget(parent)
-    , m_factory(factory)
+    , m_url(pluginUrl)
 {
     
     kDebug() << "creating clicktoflash";
@@ -96,6 +96,7 @@ void ClickToFlash::loadAll()
 */
 void ClickToFlash::load(bool loadAll)
 {
+    kDebug() << "called";
     QWidget *parent = parentWidget();
     QWebView *view = 0;
     while (parent) 
@@ -126,17 +127,37 @@ void ClickToFlash::load(bool loadAll)
         elements.append(docElement.findAll(selector.arg(QLatin1String("embed"))));
 
         QWebElement element;
+        kDebug() << m_url;
+        bool isRightElement = false;
         foreach (element, elements) 
         {
-            QWebElement substitute = element.clone();
-            emit signalLoadClickToFlash(true);
-            element.replace(substitute);
+            // TODO : find a proper solution to compare a QWebElement with a plugin
+            if(QUrl(element.attribute("data")) == m_url
+            || QUrl(element.attribute("src")) == m_url)
+                isRightElement = true;
+            
+            QWebElementCollection collec = element.findAll("param");
+            int i = 0;
+            while(i < collec.count() && isRightElement == false)
+            {
+                if(QUrl(collec.at(i).attribute("value")) == m_url)
+                    isRightElement = true;
+                i++;
+            }
+            
+            if(isRightElement)
+            {
+                QWebElement substitute = element.clone();
+                emit signalLoadClickToFlash(true);
+                element.replace(substitute);
+                return;
+            }
         }
 
         frames += frame->childFrames();
     }
     
-    deleteLater();
+    //deleteLater();
 }
 
 
diff --git a/src/clicktoflash.h b/src/clicktoflash.h
index 382c6001..3660a1f9 100644
--- a/src/clicktoflash.h
+++ b/src/clicktoflash.h
@@ -31,6 +31,7 @@
 
 #include <QWidget>
 #include <QToolButton>
+#include <QUrl>
 
 class WebPluginFactory;
 
@@ -38,7 +39,10 @@ class ClickToFlash : public QWidget
 {
     Q_OBJECT
 public:
-    ClickToFlash(const WebPluginFactory *factory, QWidget *parent = 0);
+    /**
+    pluginUrl : used to find the right QWebElement between the ones of the different plugins
+    */
+    ClickToFlash(const WebPluginFactory *factory, QUrl pluginUrl, QWidget *parent = 0);
 
 signals:
     void signalLoadClickToFlash(bool);
@@ -52,7 +56,7 @@ private slots:
     void load(bool loadAll = false);
     
 private:
-    const WebPluginFactory *m_factory;
+    const QUrl m_url;
 };
 
 #endif // CLICKTOFLASH_H
diff --git a/src/webpluginfactory.cpp b/src/webpluginfactory.cpp
index 2c8ed181..1478339b 100644
--- a/src/webpluginfactory.cpp
+++ b/src/webpluginfactory.cpp
@@ -88,7 +88,7 @@ QObject *WebPluginFactory::create(const QString &mimeType,
     if(mimeType == QString("application/x-shockwave-flash") 
         && !loadClickToFlash) // the button wasn't clicked
     {
-        ClickToFlash* ctf = new ClickToFlash(this);
+        ClickToFlash* ctf = new ClickToFlash(this, url);
         connect(ctf, SIGNAL(signalLoadClickToFlash(bool)), this, SLOT(setLoadClickToFlash(bool)));
         return ctf;
     }
-- 
cgit v1.2.1


From eaa712d929127d252efd13522a6b76ea01c862a4 Mon Sep 17 00:00:00 2001
From: matgic78 <matgic78@gmail.com>
Date: Sun, 22 Nov 2009 16:50:27 +0100
Subject: make clicktoflash optionnal

---
 src/mainwindow.cpp              |  6 ++++-
 src/rekonq.kcfg                 |  4 ++--
 src/settings/settings_webkit.ui | 50 +++++++++++++++++++++++++----------------
 src/webpluginfactory.cpp        |  4 ++++
 4 files changed, 42 insertions(+), 22 deletions(-)

(limited to 'src')

diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 628743ee..8b43f6ae 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -514,12 +514,16 @@ void MainWindow::updateConfiguration()
     defaultSettings->setAttribute(QWebSettings::AutoLoadImages, ReKonfig::autoLoadImages());
     defaultSettings->setAttribute(QWebSettings::JavascriptEnabled, ReKonfig::javascriptEnabled());
     defaultSettings->setAttribute(QWebSettings::JavaEnabled, ReKonfig::javaEnabled());
-    defaultSettings->setAttribute(QWebSettings::PluginsEnabled, ReKonfig::pluginsEnabled());
     defaultSettings->setAttribute(QWebSettings::JavascriptCanOpenWindows, ReKonfig::javascriptCanOpenWindows());
     defaultSettings->setAttribute(QWebSettings::JavascriptCanAccessClipboard, ReKonfig::javascriptCanAccessClipboard());
     defaultSettings->setAttribute(QWebSettings::LinksIncludedInFocusChain, ReKonfig::linksIncludedInFocusChain());
     defaultSettings->setAttribute(QWebSettings::ZoomTextOnly, ReKonfig::zoomTextOnly());
     defaultSettings->setAttribute(QWebSettings::PrintElementBackgrounds, ReKonfig::printElementBackgrounds());
+    
+    if(ReKonfig::pluginsEnabled() == 2)
+        defaultSettings->setAttribute(QWebSettings::PluginsEnabled, false);
+    else
+        defaultSettings->setAttribute(QWebSettings::PluginsEnabled, true);
 
     // ===== HTML 5 features WebKit support ======
     defaultSettings->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, ReKonfig::offlineStorageDatabaseEnabled());
diff --git a/src/rekonq.kcfg b/src/rekonq.kcfg
index cc9c4317..0875342c 100644
--- a/src/rekonq.kcfg
+++ b/src/rekonq.kcfg
@@ -100,8 +100,8 @@
         <entry name="javaEnabled" type="Bool">
             <default>true</default>
         </entry>
-        <entry name="pluginsEnabled" type="Bool">
-            <default>true</default>
+        <entry name="pluginsEnabled" type="Int">
+            <default>0</default>
         </entry>
         <entry name="javascriptCanOpenWindows" type="Bool">
             <default>true</default>
diff --git a/src/settings/settings_webkit.ui b/src/settings/settings_webkit.ui
index 129bcf03..c59dc9c3 100644
--- a/src/settings/settings_webkit.ui
+++ b/src/settings/settings_webkit.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>622</width>
+    <width>485</width>
     <height>360</height>
    </rect>
   </property>
@@ -66,46 +66,58 @@
         </property>
        </widget>
       </item>
-      <item row="3" column="0">
-       <widget class="QCheckBox" name="kcfg_pluginsEnabled">
+      <item row="3" column="3">
+       <widget class="QCheckBox" name="kcfg_offlineStorageDatabaseEnabled">
         <property name="text">
-         <string>Plugins</string>
+         <string>Offline storage database</string>
         </property>
        </widget>
       </item>
-      <item row="3" column="3">
-       <widget class="QCheckBox" name="kcfg_offlineStorageDatabaseEnabled">
+      <item row="4" column="3">
+       <widget class="QCheckBox" name="kcfg_offlineWebApplicationCacheEnabled">
         <property name="text">
-         <string>Offline storage database</string>
+         <string>Offline web application cache</string>
         </property>
        </widget>
       </item>
-      <item row="4" column="0" colspan="2">
-       <widget class="QCheckBox" name="kcfg_javascriptCanOpenWindows">
+      <item row="5" column="3">
+       <widget class="QCheckBox" name="kcfg_localStorageDatabaseEnabled">
         <property name="text">
-         <string>JavaScript can open windows</string>
+         <string>Local storage database</string>
         </property>
        </widget>
       </item>
-      <item row="4" column="3">
-       <widget class="QCheckBox" name="kcfg_offlineWebApplicationCacheEnabled">
+      <item row="3" column="0">
+       <widget class="QCheckBox" name="kcfg_javascriptCanOpenWindows">
         <property name="text">
-         <string>Offline web application cache</string>
+         <string>JavaScript can open windows</string>
         </property>
        </widget>
       </item>
-      <item row="5" column="0" colspan="2">
+      <item row="4" column="0">
        <widget class="QCheckBox" name="kcfg_javascriptCanAccessClipboard">
         <property name="text">
          <string>JavaScript can access clipboard</string>
         </property>
        </widget>
       </item>
-      <item row="5" column="3">
-       <widget class="QCheckBox" name="kcfg_localStorageDatabaseEnabled">
-        <property name="text">
-         <string>Local storage database</string>
-        </property>
+      <item row="5" column="0">
+       <widget class="QComboBox" name="kcfg_pluginsEnabled">
+        <item>
+         <property name="text">
+          <string>Autoload plugins</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Manually load plugins</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Never load plugins</string>
+         </property>
+        </item>
        </widget>
       </item>
      </layout>
diff --git a/src/webpluginfactory.cpp b/src/webpluginfactory.cpp
index 1478339b..0d333748 100644
--- a/src/webpluginfactory.cpp
+++ b/src/webpluginfactory.cpp
@@ -29,6 +29,7 @@
 #include "webpluginfactory.moc"
 
 // Local Includes
+#include "rekonq.h"
 #include "application.h"
 #include "mainwindow.h"
 #include "previewimage.h"
@@ -85,6 +86,9 @@ QObject *WebPluginFactory::create(const QString &mimeType,
         return new PreviewImage(url, title, number, isFavorite);
     }
     
+    if(ReKonfig::pluginsEnabled() == 0)
+        return 0;
+    
     if(mimeType == QString("application/x-shockwave-flash") 
         && !loadClickToFlash) // the button wasn't clicked
     {
-- 
cgit v1.2.1


From 07270fd5b8331cc33a98ff43fbbc72d87a4431a1 Mon Sep 17 00:00:00 2001
From: matgic78 <matgic78@gmail.com>
Date: Wed, 25 Nov 2009 15:20:29 +0100
Subject: clicktoflash : cleanup

---
 src/clicktoflash.cpp     | 73 ++++++++++++++----------------------------------
 src/clicktoflash.h       | 15 ++++------
 src/webpluginfactory.cpp |  7 +++--
 src/webpluginfactory.h   |  5 ++++
 4 files changed, 36 insertions(+), 64 deletions(-)

(limited to 'src')

diff --git a/src/clicktoflash.cpp b/src/clicktoflash.cpp
index 39d55e5a..9c11dc57 100644
--- a/src/clicktoflash.cpp
+++ b/src/clicktoflash.cpp
@@ -36,10 +36,12 @@
 #include <QWebView>
 #include <QWebElement>
 #include <QHBoxLayout>
+#include <QContextMenuEvent>
 
+#include <KMenu>
 #include <KDebug>
 
-ClickToFlash::ClickToFlash(const WebPluginFactory *factory, QUrl pluginUrl, QWidget *parent)
+ClickToFlash::ClickToFlash(QUrl pluginUrl, QWidget *parent)
     : QWidget(parent)
     , m_url(pluginUrl)
 {
@@ -54,49 +56,14 @@ ClickToFlash::ClickToFlash(const WebPluginFactory *factory, QUrl pluginUrl, QWid
     button->setText(i18n("Load animation"));
     button->setAutoRaise(false);
     layout()->addWidget(button);
-    connect(button, SIGNAL(clicked(bool)), this, SLOT(load(bool)));
+    connect(button, SIGNAL(clicked(bool)), this, SLOT(load()));
 }
 
-/*void ClickToFlash::showContextMenu()
-{
-    QMenu menu;
-    menu.addAction(tr("Load"), this, SLOT(load()));
-    menu.addAction(tr("Load All"), this, SLOT(loadAll()));
-    menu.addSeparator();
-    QString host = url.host();
-    QAction *add = menu.addAction(tr("Add %1 to Whitelist").arg(host), this, SLOT(addToWhitelist()));
-    QAction *remove = menu.addAction(tr("Remove from Whitelist"), this, SLOT(removeFromWhitelist()));
-    bool onWhitelist = m_plugin->onWhitelist(host);
-    add->setEnabled(!onWhitelist);
-    remove->setEnabled(onWhitelist);
-    menu.addSeparator();
-    menu.addAction(tr("Settings"), this, SLOT(configure()));
-    menu.exec(QCursor::pos());
-}
-
-void ClickToFlash::addToWhitelist()
-{
-    m_plugin->addToWhitelist(url.host());
-}
-
-void ClickToFlash::removeFromWhitelist()
-{
-    m_plugin->removeFromWhitelist(url.host());
-}
 
-void ClickToFlash::configure()
+void ClickToFlash::load()
 {
-    m_plugin->configure();
-}
-
-void ClickToFlash::loadAll()
-{
-    load(true);
-}
-*/
-void ClickToFlash::load(bool loadAll)
-{
-    kDebug() << "called";
+    //bool loadAll = true;
+    
     QWidget *parent = parentWidget();
     QWebView *view = 0;
     while (parent) 
@@ -125,28 +92,30 @@ void ClickToFlash::load(bool loadAll)
         QWebElementCollection elements;
         elements.append(docElement.findAll(selector.arg(QLatin1String("object"))));
         elements.append(docElement.findAll(selector.arg(QLatin1String("embed"))));
-
-        QWebElement element;
-        kDebug() << m_url;
+        
         bool isRightElement = false;
-        foreach (element, elements) 
+        foreach (QWebElement element, elements) 
         {
             // TODO : find a proper solution to compare a QWebElement with a plugin
+            // With this "manual" test, it's probably not working everywhere
             if(QUrl(element.attribute("data")) == m_url
-            || QUrl(element.attribute("src")) == m_url)
+                || QUrl(element.attribute("src")) == m_url)
                 isRightElement = true;
-            
-            QWebElementCollection collec = element.findAll("param");
-            int i = 0;
-            while(i < collec.count() && isRightElement == false)
+            else
             {
-                if(QUrl(collec.at(i).attribute("value")) == m_url)
+                QWebElementCollection collec = element.findAll("param");
+                int i = 0;
+                while(i < collec.count() && isRightElement == false)
+                {
+                    if(QUrl(collec.at(i).attribute("value")) == m_url)
                     isRightElement = true;
-                i++;
+                    i++;
+                }
             }
             
             if(isRightElement)
             {
+                kDebug() << "called";
                 QWebElement substitute = element.clone();
                 emit signalLoadClickToFlash(true);
                 element.replace(substitute);
@@ -157,7 +126,7 @@ void ClickToFlash::load(bool loadAll)
         frames += frame->childFrames();
     }
     
-    //deleteLater();
+    deleteLater();
 }
 
 
diff --git a/src/clicktoflash.h b/src/clicktoflash.h
index 3660a1f9..35c661d4 100644
--- a/src/clicktoflash.h
+++ b/src/clicktoflash.h
@@ -39,23 +39,18 @@ class ClickToFlash : public QWidget
 {
     Q_OBJECT
 public:
-    /**
-    pluginUrl : used to find the right QWebElement between the ones of the different plugins
-    */
-    ClickToFlash(const WebPluginFactory *factory, QUrl pluginUrl, QWidget *parent = 0);
+    ClickToFlash(QUrl pluginUrl, QWidget *parent = 0);
 
 signals:
     void signalLoadClickToFlash(bool);
     
 private slots:
-    /*void configure();
-    void addToWhitelist();
-    void removeFromWhitelist();
-    void showContextMenu();
-    void loadAll();*/
-    void load(bool loadAll = false);
+    void load();
     
 private:
+    /**
+    used to find the right QWebElement between the ones of the different plugins
+    */
     const QUrl m_url;
 };
 
diff --git a/src/webpluginfactory.cpp b/src/webpluginfactory.cpp
index 0d333748..d1c1ccbe 100644
--- a/src/webpluginfactory.cpp
+++ b/src/webpluginfactory.cpp
@@ -86,13 +86,16 @@ QObject *WebPluginFactory::create(const QString &mimeType,
         return new PreviewImage(url, title, number, isFavorite);
     }
     
-    if(ReKonfig::pluginsEnabled() == 0)
+    if(ReKonfig::pluginsEnabled() == 0) // plugins are enabled
+    {
+        kDebug() << "No plugins found for" << mimeType << ". Falling back to QtWebKit ones...";
         return 0;
+    }
     
     if(mimeType == QString("application/x-shockwave-flash") 
         && !loadClickToFlash) // the button wasn't clicked
     {
-        ClickToFlash* ctf = new ClickToFlash(this, url);
+        ClickToFlash* ctf = new ClickToFlash(url);
         connect(ctf, SIGNAL(signalLoadClickToFlash(bool)), this, SLOT(setLoadClickToFlash(bool)));
         return ctf;
     }
diff --git a/src/webpluginfactory.h b/src/webpluginfactory.h
index 20dc6642..c1e4c28f 100644
--- a/src/webpluginfactory.h
+++ b/src/webpluginfactory.h
@@ -52,12 +52,17 @@ public:
     virtual QList<Plugin> plugins() const;
     
 signals:
+
     void signalLoadClickToFlash(bool) const;
     
 public slots:
     void setLoadClickToFlash(bool load);
     
 private:
+    /**
+        When true, force loading of next flash animation (don't show clicktoflash)
+        We use signals/slots to set this property because QWebPluginFactory::create is const
+    */
     bool loadClickToFlash;
 };
 
-- 
cgit v1.2.1


From fb6097991a4b5e166447150884d07667adba169b Mon Sep 17 00:00:00 2001
From: matgic78 <matgic78@gmail.com>
Date: Wed, 25 Nov 2009 19:11:40 +0100
Subject: clicktoflash : more cleanup

---
 src/clicktoflash.cpp     | 17 ++++-------------
 src/clicktoflash.h       |  2 +-
 src/webpluginfactory.cpp |  2 +-
 3 files changed, 6 insertions(+), 15 deletions(-)

(limited to 'src')

diff --git a/src/clicktoflash.cpp b/src/clicktoflash.cpp
index 9c11dc57..1fd36e4c 100644
--- a/src/clicktoflash.cpp
+++ b/src/clicktoflash.cpp
@@ -28,25 +28,19 @@
 
 #include "clicktoflash.h"
 
-#include <KLocalizedString>
-
-#include <QFile>
-#include <QMenu>
 #include <QWebFrame>
 #include <QWebView>
 #include <QWebElement>
 #include <QHBoxLayout>
-#include <QContextMenuEvent>
+#include <QToolButton>
+
+#include <KLocalizedString>
 
-#include <KMenu>
-#include <KDebug>
 
 ClickToFlash::ClickToFlash(QUrl pluginUrl, QWidget *parent)
     : QWidget(parent)
     , m_url(pluginUrl)
 {
-    
-    kDebug() << "creating clicktoflash";
     QHBoxLayout *l = new QHBoxLayout(this);
     setLayout(l);
     
@@ -61,9 +55,7 @@ ClickToFlash::ClickToFlash(QUrl pluginUrl, QWidget *parent)
 
 
 void ClickToFlash::load()
-{
-    //bool loadAll = true;
-    
+{  
     QWidget *parent = parentWidget();
     QWebView *view = 0;
     while (parent) 
@@ -115,7 +107,6 @@ void ClickToFlash::load()
             
             if(isRightElement)
             {
-                kDebug() << "called";
                 QWebElement substitute = element.clone();
                 emit signalLoadClickToFlash(true);
                 element.replace(substitute);
diff --git a/src/clicktoflash.h b/src/clicktoflash.h
index 35c661d4..a55ecbcc 100644
--- a/src/clicktoflash.h
+++ b/src/clicktoflash.h
@@ -30,9 +30,9 @@
 #define CLICKTOFLASH_H
 
 #include <QWidget>
-#include <QToolButton>
 #include <QUrl>
 
+
 class WebPluginFactory;
 
 class ClickToFlash : public QWidget
diff --git a/src/webpluginfactory.cpp b/src/webpluginfactory.cpp
index d1c1ccbe..aec4e18d 100644
--- a/src/webpluginfactory.cpp
+++ b/src/webpluginfactory.cpp
@@ -93,7 +93,7 @@ QObject *WebPluginFactory::create(const QString &mimeType,
     }
     
     if(mimeType == QString("application/x-shockwave-flash") 
-        && !loadClickToFlash) // the button wasn't clicked
+        && !loadClickToFlash)
     {
         ClickToFlash* ctf = new ClickToFlash(url);
         connect(ctf, SIGNAL(signalLoadClickToFlash(bool)), this, SLOT(setLoadClickToFlash(bool)));
-- 
cgit v1.2.1