Hi, I'm trying to fix this bug: http://www.kde- look.org/content/show.php/Scripted+Image?content=91749 (Error having 2 of them). Seems that if there is two (or more) same webkit plasmoids on desktop only one of them loads properly on plasma start. When same plasmoid B load is started before A load is finished javascript functions don't get called. This happens only when plasmoids are same e.g. two scripted-image plasmoids. I made attached patch to load plasmoids with the same plugin name in queue and it seems to solve this but I'm not sure if this right way to do it?
Petri
Index: webapplet.cpp =================================================================== --- webapplet.cpp (revision 1063166) +++ webapplet.cpp (working copy) @@ -28,6 +28,7 @@ #include <QWebFrame> #include <QWebPage> #include <QFile> +#include <QTimer> #include <Plasma/Applet> #include <Plasma/Package> @@ -67,8 +68,13 @@ Plasma::WebView *page; bool loaded; + KUrl url; + QString webpage; + static QMap<QString, bool> loading; }; +QMap<QString, bool> WebApplet::Private::loading; + WebApplet::WebApplet(QObject *parent, const QVariantList &args) : AppletScript(parent), d(new Private) @@ -86,20 +92,31 @@ d->init(this); QString webpage; - webpage = package()->filePath("mainscript"); + d->webpage = package()->filePath("mainscript"); - if (webpage.isEmpty()) { + if (d->webpage.isEmpty()) { kDebug() << "fail! no page"; delete d->page; d->page = 0; return false; } - KUrl url(package()->filePath("html")); - kDebug() << webpage << package()->path() << url; - d->page->mainFrame()->setHtml(dataFor(webpage), url); + d->url = KUrl(package()->filePath("html")); + kDebug() << d->webpage << package()->path() << d->url; + load(); return true; } +void WebApplet::load() +{ + if (!d->loading.contains(package()->metadata().pluginName()) || + !d->loading[package()->metadata().pluginName()]) { + d->loading[package()->metadata().pluginName()] = true; + d->page->mainFrame()->setHtml(dataFor(d->webpage), d->url); + } else { + QTimer::singleShot(50, this, SLOT(load())); + } +} + void WebApplet::paintInterface(QPainter *painter, const QStyleOptionGraphicsItem *option, const QRect &contentsRect) @@ -116,6 +133,7 @@ void WebApplet::loadFinished(bool success) { + d->loading[package()->metadata().pluginName()] = false; d->loaded = success; } Index: webapplet.h =================================================================== --- webapplet.h (revision 1063166) +++ webapplet.h (working copy) @@ -56,6 +56,7 @@ void connectFrame(QWebFrame *); virtual void loadFinished(bool); virtual void initJsObjects(); + void load(); private: class Private;
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Plasma-devel mailing list Plasma-devel@kde.org https://mail.kde.org/mailman/listinfo/plasma-devel