+2006-07-20 Anders Carlsson <acarlsson@apple.com>
+
+ Reviewed by Darin.
+
+ * bridge/mac/FrameMac.mm:
+ (WebCore::FrameMac::nextKeyViewInFrame):
+ Hold a ref to the node in case it gets destroyed by an event handler.
+
2006-07-19 Mark Rowe <opendarwin.org@bdash.net.nz>
Reviewed by Darin.
return String();
}
-NSView* FrameMac::nextKeyViewInFrame(Node* node, SelectionDirection direction, bool* focusCallResultedInViewBeingCreated)
+NSView* FrameMac::nextKeyViewInFrame(Node* n, SelectionDirection direction, bool* focusCallResultedInViewBeingCreated)
{
Document* doc = document();
if (!doc)
return nil;
+ RefPtr<Node> node = n;
for (;;) {
node = direction == SelectingNext
- ? doc->nextFocusNode(node) : doc->previousFocusNode(node);
+ ? doc->nextFocusNode(node.get()) : doc->previousFocusNode(node.get());
if (!node)
return nil;
RenderObject* renderer = node->renderer();
if (!renderer->isWidget()) {
- static_cast<Element*>(node)->focus();
+ static_cast<Element*>(node.get())->focus();
// The call to focus might have triggered event handlers that causes the
// current renderer to be destroyed.
if (!(renderer = node->renderer()))