[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdebase/nsplugins
From:       George Staikos <staikos () kde ! org>
Date:       2004-08-08 16:46:52
Message-ID: 20040808164652.3D9A5926D () office ! kde ! org
[Download RAW message or body]

CVS commit by staikos: 

Koos' nsplugins liveconnect patch (fixes a specific crash on certain sites)


  M +19 -6     plugin_part.cpp   1.57
  M +2 -1      plugin_part.h   1.28


--- kdebase/nsplugins/plugin_part.cpp  #1.56:1.57
@@ -30,5 +30,5 @@ public:
 
 PluginLiveConnectExtension::PluginLiveConnectExtension(PluginPart* part) 
-: KParts::LiveConnectExtension(part), _part(part) {
+: KParts::LiveConnectExtension(part), _part(part), _retval(0L) {
 }
 
@@ -54,6 +54,6 @@ Q_UNUSED(value);
 bool PluginLiveConnectExtension::put( const unsigned long, const QString &field, const QString &value) {
     kdDebug(1432) << "PLUGIN:LiveConnect::put " << field << " " << value << endl;
-    if (field == "__nsplugin") {
-        __nsplugin = value;
+    if (_retval && field == "__nsplugin") {
+        *_retval = value;
         return true;
     } else if (field.lower() == "src") {
@@ -72,6 +72,9 @@ QString PluginLiveConnectExtension::eval
     //kdDebug(1432) << "String is [" << jscode << "]" << endl;
     args.push_back(qMakePair(KParts::LiveConnectExtension::TypeString, jscode));
+    QString nsplugin("Undefined");
+    _retval = &nsplugin;
     emit partEvent(0, "eval", args);
-    return __nsplugin;
+    _retval = 0L;
+    return nsplugin;
 }
 
@@ -180,5 +183,6 @@ KAboutData *PluginFactory::aboutData()
 PluginPart::PluginPart(QWidget *parentWidget, const char *widgetName, QObject *parent,
                        const char *name, const QStringList &args)
-    : KParts::ReadOnlyPart(parent, name), _widget(0), _args(args)
+    : KParts::ReadOnlyPart(parent, name), _widget(0), _args(args),
+      _destructed(0L)
 {
     setInstance(PluginFactory::instance());
@@ -218,4 +222,6 @@ PluginPart::~PluginPart()
     delete _callback;
     _loader->release();
+    if (_destructed)
+        *_destructed = true;;
 }
 
@@ -339,8 +345,15 @@ void PluginPart::evalJavaScript(int id, 
     kdDebug(1432) <<"evalJavascript: before widget check"<<endl;
     if (_widget) {
+        bool destructed = false;
+        _destructed = &destructed;
         kdDebug(1432) <<"evalJavascript: there is a widget" <<endl;     
         QString rc = _liveconnect->evalJavaScript(script);
+        if (destructed)
+            return;
+        _destructed = 0L;
         kdDebug(1432) << "Liveconnect: script [" << script << "] evaluated to [" << rc << "]" << endl;
-        static_cast<NSPluginInstance*>((QWidget*)_widget)->javascriptResult(id, rc);
+        NSPluginInstance *ni = dynamic_cast<NSPluginInstance*>(_widget.operator->());
+        if (ni)
+            ni->javascriptResult(id, rc);
     }
 }

--- kdebase/nsplugins/plugin_part.h  #1.27:1.28
@@ -109,4 +109,5 @@ private:
   QStringList _args;
   class NSPluginLoader *_loader;
+  bool *_destructed;
 };
 
@@ -128,6 +129,6 @@ signals:
 
 private:
-    QString __nsplugin;
     PluginPart *_part;
+    QString *_retval;
 };
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic