[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/3.5/kdelibs/khtml
From: Maks Orlovich <maksim () kde ! org>
Date: 2006-02-04 17:45:53
Message-ID: 1139075153.303685.12814.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 505729 by orlovich:
Emulate IE quirk of finding -everything- by name/ID
under document.frames (well, almost -- we don't let frames
be hidden by non-frames)
Makes menu on http://www.carton.smurfit.es/ work (moz and opera can't handle it ;-) \
) BUG:106930
M +6 -10 ecma/kjs_html.cpp
M +20 -0 ecma/kjs_window.cpp
M +12 -0 html/html_baseimpl.cpp
M +2 -0 html/html_baseimpl.h
--- branches/KDE/3.5/kdelibs/khtml/ecma/kjs_html.cpp #505728:505729
@@ -1847,9 +1847,9 @@
case FrameContentDocument: return \
checkNodeSecurity(exec,frameElement.contentDocument()) ? getDOMNode(exec, \
frameElement.contentDocument()) : Undefined(); case FrameContentWindow: {
- KHTMLView *view = \
static_cast<DOM::DocumentImpl*>(frameElement.contentDocument().handle())->view();
- if (view && view->part())
- return Value(Window::retrieveWindow(view->part()));
+ KHTMLPart* part = \
static_cast<DOM::HTMLFrameElementImpl*>(frameElement.handle())->contentPart(); + \
if (part) + return Value(Window::retrieveWindow(part));
else
return Undefined();
}
@@ -1872,13 +1872,9 @@
case IFrameContentDocument: return \
checkNodeSecurity(exec,iFrame.contentDocument()) ? getDOMNode(exec, \
iFrame.contentDocument()) : Undefined(); case IFrameContentWindow: {
- DOM::DocumentImpl* contentDoc = \
static_cast<DOM::DocumentImpl*>(iFrame.contentDocument().handle());
- if (!contentDoc)
- return Undefined();
-
- KHTMLView *view = contentDoc->view();
- if (view && view->part())
- return Value(Window::retrieveWindow(view->part()));
+ KHTMLPart* part = \
static_cast<DOM::HTMLIFrameElementImpl*>(iFrame.handle())->contentPart(); + if \
(part) + return Value(Window::retrieveWindow(part));
else
return Undefined();
}
--- branches/KDE/3.5/kdelibs/khtml/ecma/kjs_window.cpp #505728:505729
@@ -2147,6 +2147,26 @@
return Window::retrieve(frame);
}
+ // Fun IE quirk: name lookup in there is actually done by document.all
+ // hence, it can find non-frame things (and even let them hide frame ones!)
+ // We don't quite do that, but do this as a fallback.
+ DOM::DocumentImpl* doc = \
static_cast<DOM::DocumentImpl*>(part->document().handle()); + \
DOM::HTMLCollectionImpl docuAll(doc, DOM::HTMLCollectionImpl::DOC_ALL); + \
DOM::NodeImpl* node = docuAll.namedItem(p.string()); + if (node) {
+ if (node->id() == ID_FRAME || node->id() == ID_IFRAME) {
+ //Return the Window object.
+ KHTMLPart* part = \
static_cast<DOM::HTMLFrameElementImpl*>(node)->contentPart(); + if (part)
+ return Value(Window::retrieveWindow(part));
+ else
+ return Undefined();
+ } else {
+ //Just a regular node..
+ return getDOMNode(exec, node);
+ }
+ }
+
return ObjectImp::get(exec, p);
}
--- branches/KDE/3.5/kdelibs/khtml/html/html_baseimpl.cpp #505728:505729
@@ -418,6 +418,18 @@
return 0;
}
+KHTMLPart* HTMLFrameElementImpl::contentPart() const
+{
+ if ( !m_render ) return 0;
+
+ RenderPart* render = static_cast<RenderPart*>( m_render );
+
+ if(render->widget() && ::qt_cast<KHTMLView*>( render->widget()) )
+ return static_cast<KHTMLView*>( render->widget() )->part();
+
+ return 0;
+}
+
// -------------------------------------------------------------------------
HTMLFrameSetElementImpl::HTMLFrameSetElementImpl(DocumentPtr *doc)
--- branches/KDE/3.5/kdelibs/khtml/html/html_baseimpl.h #505728:505729
@@ -34,6 +34,7 @@
#include <qscrollview.h>
class KHTMLView;
+class KHTMLPart;
namespace khtml {
class RenderFrameSet;
@@ -95,6 +96,7 @@
virtual void setFocus(bool);
DocumentImpl* contentDocument() const;
+ KHTMLPart* contentPart() const;
DOMString url;
DOMString name;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic