190 lines
5.2 KiB
Diff
190 lines
5.2 KiB
Diff
|
Index: khtml/khtml_part.cpp
|
||
|
===================================================================
|
||
|
--- khtml/khtml_part.cpp (Revision 852920)
|
||
|
+++ khtml/khtml_part.cpp (Revision 852919)
|
||
|
@@ -1080,7 +1080,8 @@
|
||
|
if ( !d->m_frame->m_jscript )
|
||
|
if (!createJScript(d->m_frame))
|
||
|
return 0;
|
||
|
- d->m_frame->m_jscript->setDebugEnabled(d->m_bJScriptDebugEnabled);
|
||
|
+ if (d->m_bJScriptDebugEnabled)
|
||
|
+ d->m_frame->m_jscript->setDebugEnabled(true);
|
||
|
|
||
|
return d->m_frame->m_jscript;
|
||
|
}
|
||
|
Index: khtml/ecma/debugger/debugwindow.cpp
|
||
|
===================================================================
|
||
|
--- khtml/ecma/debugger/debugwindow.cpp (Revision 852920)
|
||
|
+++ khtml/ecma/debugger/debugwindow.cpp (Revision 852919)
|
||
|
@@ -91,12 +91,23 @@
|
||
|
using namespace KJSDebugger;
|
||
|
|
||
|
DebugWindow* DebugWindow::s_debugger = 0;
|
||
|
+DebugWindow *DebugWindow::createInstance()
|
||
|
+{
|
||
|
+ Q_ASSERT(!s_debugger);
|
||
|
+ s_debugger = new DebugWindow();
|
||
|
+ return s_debugger;
|
||
|
+}
|
||
|
|
||
|
+void DebugWindow::destroyInstance()
|
||
|
+{
|
||
|
+ Q_ASSERT(s_debugger);
|
||
|
+ Q_ASSERT(s_debugger->m_activeSessionCtxs.isEmpty());
|
||
|
+ s_debugger->hide();
|
||
|
+ delete s_debugger;
|
||
|
+}
|
||
|
+
|
||
|
DebugWindow * DebugWindow::window()
|
||
|
{
|
||
|
- if (!s_debugger)
|
||
|
- s_debugger = new DebugWindow();
|
||
|
-
|
||
|
return s_debugger;
|
||
|
}
|
||
|
|
||
|
@@ -365,8 +376,6 @@
|
||
|
assert(m_docsForIntrp.isEmpty());
|
||
|
assert(m_docForSid.isEmpty());
|
||
|
assert(m_docForIUKey.isEmpty());
|
||
|
- assert(m_activeSessionCtxs.isEmpty());
|
||
|
- s_debugger = 0;
|
||
|
}
|
||
|
|
||
|
void DebugWindow::closeEvent(QCloseEvent* event)
|
||
|
Index: khtml/ecma/debugger/debugwindow.h
|
||
|
===================================================================
|
||
|
--- khtml/ecma/debugger/debugwindow.h (Revision 852920)
|
||
|
+++ khtml/ecma/debugger/debugwindow.h (Revision 852919)
|
||
|
@@ -39,7 +39,6 @@
|
||
|
#include "khtml_pagecache.h"
|
||
|
#include "khtml_part.h"
|
||
|
#include "dom/dom_misc.h"
|
||
|
-#include "misc/shared.h"
|
||
|
|
||
|
#include <QStack>
|
||
|
#include <QVector>
|
||
|
@@ -72,8 +71,7 @@
|
||
|
*
|
||
|
* There is only one debug window per program. This can be obtained by calling #instance
|
||
|
*/
|
||
|
-class DebugWindow : public KXmlGuiWindow, public KJS::Debugger, public KComponentData,
|
||
|
- public khtml::Shared<DebugWindow>
|
||
|
+class DebugWindow : public KXmlGuiWindow, public KJS::Debugger, public KComponentData
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
@@ -81,6 +79,8 @@
|
||
|
DebugWindow(QWidget *parent = 0);
|
||
|
virtual ~DebugWindow();
|
||
|
|
||
|
+ static DebugWindow *createInstance();
|
||
|
+ static void destroyInstance();
|
||
|
static DebugWindow *window();
|
||
|
|
||
|
// Returns true if the debugger is active, and has blocked the execution
|
||
|
Index: khtml/ecma/kjs_proxy.cpp
|
||
|
===================================================================
|
||
|
--- khtml/ecma/kjs_proxy.cpp (Revision 852920)
|
||
|
+++ khtml/ecma/kjs_proxy.cpp (Revision 852919)
|
||
|
@@ -66,9 +66,9 @@
|
||
|
|
||
|
void initScript();
|
||
|
void applyUserAgent();
|
||
|
+
|
||
|
private:
|
||
|
KJS::ScriptInterpreter* m_script;
|
||
|
- WTF::RefPtr<DebugWindow> m_debugWindow;
|
||
|
bool m_debugEnabled;
|
||
|
#ifndef NDEBUG
|
||
|
static int s_count;
|
||
|
@@ -141,8 +141,8 @@
|
||
|
#ifdef KJS_DEBUGGER
|
||
|
if (inlineCode)
|
||
|
filename = "(unknown file)";
|
||
|
- if (m_debugWindow)
|
||
|
- m_debugWindow->attach(m_script);
|
||
|
+ if (DebugWindow::window())
|
||
|
+ DebugWindow::window()->attach(m_script);
|
||
|
#else
|
||
|
Q_UNUSED(baseLine);
|
||
|
#endif
|
||
|
@@ -202,8 +202,9 @@
|
||
|
// (we used to delete and re-create it, previously)
|
||
|
if (m_script) {
|
||
|
#ifdef KJS_DEBUGGER
|
||
|
- if (m_debugWindow)
|
||
|
- m_debugWindow->clearInterpreter(m_script);
|
||
|
+ DebugWindow *debugWin = DebugWindow::window();
|
||
|
+ if (debugWin)
|
||
|
+ debugWin->clearInterpreter(m_script);
|
||
|
#endif
|
||
|
m_script->clear();
|
||
|
|
||
|
@@ -224,14 +225,6 @@
|
||
|
;
|
||
|
JSLock::unlock();
|
||
|
}
|
||
|
-
|
||
|
-#ifdef KJS_DEBUGGER
|
||
|
- // Detach from debugging entirely if it's been turned off.
|
||
|
- if (m_debugWindow && !m_debugEnabled) {
|
||
|
- m_debugWindow->detach(m_script);
|
||
|
- m_debugWindow = 0;
|
||
|
- }
|
||
|
-#endif
|
||
|
}
|
||
|
|
||
|
DOM::EventListener *KJSProxyImpl::createHTMLEventHandler(QString sourceUrl, QString name, QString code, DOM::NodeImpl *node)
|
||
|
@@ -239,8 +232,8 @@
|
||
|
initScript();
|
||
|
|
||
|
#ifdef KJS_DEBUGGER
|
||
|
- if (m_debugWindow)
|
||
|
- m_debugWindow->attach(m_script);
|
||
|
+ if (DebugWindow::window())
|
||
|
+ DebugWindow::window()->attach(m_script);
|
||
|
#else
|
||
|
Q_UNUSED(sourceUrl);
|
||
|
#endif
|
||
|
@@ -269,21 +262,30 @@
|
||
|
{
|
||
|
#ifdef KJS_DEBUGGER
|
||
|
m_debugEnabled = enabled;
|
||
|
-
|
||
|
- // Note that we attach to the debugger only before
|
||
|
- // running a script. Detaches/disabling are done between
|
||
|
- // documents, at clear. Both are done so the debugger
|
||
|
- // see the entire session
|
||
|
- if (enabled)
|
||
|
- m_debugWindow = DebugWindow::window();
|
||
|
+ //if (m_script)
|
||
|
+ // m_script->setDebuggingEnabled(enabled);
|
||
|
+ // NOTE: this is consistent across all KJSProxyImpl instances, as we only
|
||
|
+ // ever have 1 debug window
|
||
|
+ if (!enabled && DebugWindow::window())
|
||
|
+ {
|
||
|
+ DebugWindow::destroyInstance();
|
||
|
+ }
|
||
|
+ else if (enabled && !DebugWindow::window())
|
||
|
+ {
|
||
|
+ DebugWindow::createInstance();
|
||
|
+ initScript();
|
||
|
+ DebugWindow::window()->attach(m_script);
|
||
|
+ }
|
||
|
+#else
|
||
|
+ Q_UNUSED(enabled);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
void KJSProxyImpl::showDebugWindow(bool /*show*/)
|
||
|
{
|
||
|
#ifdef KJS_DEBUGGER
|
||
|
- if (m_debugWindow)
|
||
|
- m_debugWindow->show();
|
||
|
+ if (DebugWindow::window())
|
||
|
+ DebugWindow::window()->show();
|
||
|
#else
|
||
|
//Q_UNUSED(show);
|
||
|
#endif
|