From e4c17c961d145bb6c4c945e1d7be4eea702abecf Mon Sep 17 00:00:00 2001 From: matgic78 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 + +#include +#include +#include +#include +#include +#include + +#include + +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(parent)) + { + view = aView; + break; + } + parent = parent->parentWidget(); + } + if (!view) + return; + + const QString selector = QLatin1String("%1[type=\"application/x-shockwave-flash\"]"); + + hide(); + + QList 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 +#include + +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 @@ -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 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 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 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 -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 #include +#include 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 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 @@ true - - true + + 0 true 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 @@ 0 0 - 622 + 485 360 @@ -66,46 +66,58 @@ - - + + - Plugins + Offline storage database - - + + - Offline storage database + Offline web application cache - - + + - JavaScript can open windows + Local storage database - - + + - Offline web application cache + JavaScript can open windows - + JavaScript can access clipboard - - - - Local storage database - + + + + + Autoload plugins + + + + + Manually load plugins + + + + + Never load plugins + + 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 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 #include #include +#include +#include #include -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 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 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 - -#include -#include #include #include #include #include -#include +#include + +#include -#include -#include 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 -#include #include + 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