| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
| 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
| 7 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 7 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
| 8 * Copyright (C) 2008 David Levin (levin@chromium.org) | 8 * Copyright (C) 2008 David Levin (levin@chromium.org) |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 1251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1262 if (renderer() && ch != NoChange) | 1262 if (renderer() && ch != NoChange) |
| 1263 renderer()->setStyle(documentStyle.release()); | 1263 renderer()->setStyle(documentStyle.release()); |
| 1264 if (change != Force) | 1264 if (change != Force) |
| 1265 change = ch; | 1265 change = ch; |
| 1266 } | 1266 } |
| 1267 | 1267 |
| 1268 for (Node* n = firstChild(); n; n = n->nextSibling()) | 1268 for (Node* n = firstChild(); n; n = n->nextSibling()) |
| 1269 if (change >= Inherit || n->hasChangedChild() || n->changed()) | 1269 if (change >= Inherit || n->hasChangedChild() || n->changed()) |
| 1270 n->recalcStyle(change); | 1270 n->recalcStyle(change); |
| 1271 | 1271 |
| 1272 if (view()) { | 1272 if (changed() && view()) |
| 1273 if (changed()) | 1273 view()->layout(); |
| 1274 view()->layout(); | |
| 1275 #if USE(ACCELERATED_COMPOSITING) | |
| 1276 else { | |
| 1277 // If we didn't update compositing layers because of layout(), we ne
ed to do so here. | |
| 1278 view()->updateCompositingLayers(); | |
| 1279 } | |
| 1280 #endif | |
| 1281 } | |
| 1282 | 1274 |
| 1283 bail_out: | 1275 bail_out: |
| 1284 setChanged(NoStyleChange); | 1276 setChanged(NoStyleChange); |
| 1285 setHasChangedChild(false); | 1277 setHasChangedChild(false); |
| 1286 setDocumentChanged(false); | 1278 setDocumentChanged(false); |
| 1287 | 1279 |
| 1288 resumePostAttachCallbacks(); | 1280 resumePostAttachCallbacks(); |
| 1289 m_inStyleRecalc = false; | 1281 m_inStyleRecalc = false; |
| 1290 | 1282 |
| 1291 // If we wanted to call implicitClose() during recalcStyle, do so now that w
e're finished. | 1283 // If we wanted to call implicitClose() during recalcStyle, do so now that w
e're finished. |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1323 doc->m_docChanged = false; | 1315 doc->m_docChanged = false; |
| 1324 doc->updateRendering(); | 1316 doc->updateRendering(); |
| 1325 } | 1317 } |
| 1326 } | 1318 } |
| 1327 | 1319 |
| 1328 void Document::updateLayout() | 1320 void Document::updateLayout() |
| 1329 { | 1321 { |
| 1330 if (Element* oe = ownerElement()) | 1322 if (Element* oe = ownerElement()) |
| 1331 oe->document()->updateLayout(); | 1323 oe->document()->updateLayout(); |
| 1332 | 1324 |
| 1325 // FIXME: Dave Hyatt's pretty sure we can remove this because layout calls r
ecalcStyle as needed. |
| 1333 updateRendering(); | 1326 updateRendering(); |
| 1334 | 1327 |
| 1335 // Only do a layout if changes have occurred that make it necessary. | 1328 // Only do a layout if changes have occurred that make it necessary. |
| 1336 FrameView* v = view(); | 1329 FrameView* v = view(); |
| 1337 if (v && renderer() && (v->layoutPending() || renderer()->needsLayout())) | 1330 if (v && renderer() && (v->layoutPending() || renderer()->needsLayout())) |
| 1338 v->layout(); | 1331 v->layout(); |
| 1339 } | 1332 } |
| 1340 | 1333 |
| 1341 // FIXME: This is a bad idea and needs to be removed eventually. | 1334 // FIXME: This is a bad idea and needs to be removed eventually. |
| 1342 // Other browsers load stylesheets before they continue parsing the web page. | 1335 // Other browsers load stylesheets before they continue parsing the web page. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1375 { | 1368 { |
| 1376 ASSERT(!attached()); | 1369 ASSERT(!attached()); |
| 1377 ASSERT(!m_inPageCache); | 1370 ASSERT(!m_inPageCache); |
| 1378 ASSERT(!m_axObjectCache); | 1371 ASSERT(!m_axObjectCache); |
| 1379 | 1372 |
| 1380 if (!m_renderArena) | 1373 if (!m_renderArena) |
| 1381 m_renderArena = new RenderArena(); | 1374 m_renderArena = new RenderArena(); |
| 1382 | 1375 |
| 1383 // Create the rendering tree | 1376 // Create the rendering tree |
| 1384 setRenderer(new (m_renderArena) RenderView(this, view())); | 1377 setRenderer(new (m_renderArena) RenderView(this, view())); |
| 1385 #if USE(ACCELERATED_COMPOSITING) | |
| 1386 renderView()->didMoveOnscreen(); | |
| 1387 #endif | |
| 1388 | 1378 |
| 1389 if (!m_styleSelector) { | 1379 if (!m_styleSelector) { |
| 1390 bool matchAuthorAndUserStyles = true; | 1380 bool matchAuthorAndUserStyles = true; |
| 1391 if (Settings* docSettings = settings()) | 1381 if (Settings* docSettings = settings()) |
| 1392 matchAuthorAndUserStyles = docSettings->authorAndUserStylesEnabled()
; | 1382 matchAuthorAndUserStyles = docSettings->authorAndUserStylesEnabled()
; |
| 1393 m_styleSelector = new CSSStyleSelector(this, userStyleSheet(), m_styleSh
eets.get(), m_mappedElementSheet.get(), !inCompatMode(), matchAuthorAndUserStyle
s); | 1383 m_styleSelector = new CSSStyleSelector(this, userStyleSheet(), m_styleSh
eets.get(), m_mappedElementSheet.get(), !inCompatMode(), matchAuthorAndUserStyle
s); |
| 1394 } | 1384 } |
| 1395 | 1385 |
| 1396 recalcStyle(Force); | 1386 recalcStyle(Force); |
| 1397 | 1387 |
| 1398 RenderObject* render = renderer(); | 1388 RenderObject* render = renderer(); |
| 1399 setRenderer(0); | 1389 setRenderer(0); |
| 1400 | 1390 |
| 1401 ContainerNode::attach(); | 1391 ContainerNode::attach(); |
| 1402 | 1392 |
| 1403 setRenderer(render); | 1393 setRenderer(render); |
| 1404 } | 1394 } |
| 1405 | 1395 |
| 1406 void Document::detach() | 1396 void Document::detach() |
| 1407 { | 1397 { |
| 1408 ASSERT(attached()); | 1398 ASSERT(attached()); |
| 1409 ASSERT(!m_inPageCache); | 1399 ASSERT(!m_inPageCache); |
| 1410 | 1400 |
| 1411 clearAXObjectCache(); | 1401 clearAXObjectCache(); |
| 1412 stopActiveDOMObjects(); | 1402 stopActiveDOMObjects(); |
| 1413 | 1403 |
| 1414 RenderObject* render = renderer(); | 1404 RenderObject* render = renderer(); |
| 1415 | 1405 |
| 1416 #if USE(ACCELERATED_COMPOSITING) | |
| 1417 if (render) | |
| 1418 renderView()->willMoveOffscreen(); | |
| 1419 #endif | |
| 1420 | |
| 1421 // indicate destruction mode, i.e. attached() but renderer == 0 | 1406 // indicate destruction mode, i.e. attached() but renderer == 0 |
| 1422 setRenderer(0); | 1407 setRenderer(0); |
| 1423 | 1408 |
| 1424 // Empty out these lists as a performance optimization, since detaching | 1409 // Empty out these lists as a performance optimization, since detaching |
| 1425 // all the individual render objects will cause all the RenderImage | 1410 // all the individual render objects will cause all the RenderImage |
| 1426 // objects to remove themselves from the lists. | 1411 // objects to remove themselves from the lists. |
| 1427 m_imageLoadEventDispatchSoonList.clear(); | 1412 m_imageLoadEventDispatchSoonList.clear(); |
| 1428 m_imageLoadEventDispatchingList.clear(); | 1413 m_imageLoadEventDispatchingList.clear(); |
| 1429 | 1414 |
| 1430 m_hoverNode = 0; | 1415 m_hoverNode = 0; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1453 m_frame = 0; | 1438 m_frame = 0; |
| 1454 } | 1439 } |
| 1455 | 1440 |
| 1456 void Document::removeAllEventListenersFromAllNodes() | 1441 void Document::removeAllEventListenersFromAllNodes() |
| 1457 { | 1442 { |
| 1458 size_t size = m_windowEventListeners.size(); | 1443 size_t size = m_windowEventListeners.size(); |
| 1459 for (size_t i = 0; i < size; ++i) | 1444 for (size_t i = 0; i < size; ++i) |
| 1460 m_windowEventListeners[i]->setRemoved(true); | 1445 m_windowEventListeners[i]->setRemoved(true); |
| 1461 m_windowEventListeners.clear(); | 1446 m_windowEventListeners.clear(); |
| 1462 removeAllDisconnectedNodeEventListeners(); | 1447 removeAllDisconnectedNodeEventListeners(); |
| 1463 for (Node* node = this; node; node = node->traverseNextNode()) | 1448 removeAllEventListeners(); |
| 1464 node->removeAllEventListeners(); | 1449 Element* documentElement = this->documentElement(); |
| 1450 for (Node* node = documentElement; node; node = node->traverseNextNode(docum
entElement)) |
| 1451 toEventTargetNode(node)->removeAllEventListeners(); |
| 1465 } | 1452 } |
| 1466 | 1453 |
| 1467 void Document::registerDisconnectedNodeWithEventListeners(Node* node) | 1454 void Document::registerDisconnectedNodeWithEventListeners(Node* node) |
| 1468 { | 1455 { |
| 1469 m_disconnectedNodesWithEventListeners.add(node); | 1456 m_disconnectedNodesWithEventListeners.add(node); |
| 1470 } | 1457 } |
| 1471 | 1458 |
| 1472 void Document::unregisterDisconnectedNodeWithEventListeners(Node* node) | 1459 void Document::unregisterDisconnectedNodeWithEventListeners(Node* node) |
| 1473 { | 1460 { |
| 1474 m_disconnectedNodesWithEventListeners.remove(node); | 1461 m_disconnectedNodesWithEventListeners.remove(node); |
| 1475 } | 1462 } |
| 1476 | 1463 |
| 1477 void Document::removeAllDisconnectedNodeEventListeners() | 1464 void Document::removeAllDisconnectedNodeEventListeners() |
| 1478 { | 1465 { |
| 1479 HashSet<Node*>::iterator end = m_disconnectedNodesWithEventListeners.end(); | 1466 HashSet<Node*>::iterator end = m_disconnectedNodesWithEventListeners.end(); |
| 1480 for (HashSet<Node*>::iterator i = m_disconnectedNodesWithEventListeners.begi
n(); i != end; ++i) | 1467 for (HashSet<Node*>::iterator i = m_disconnectedNodesWithEventListeners.begi
n(); i != end; ++i) |
| 1481 (*i)->removeAllEventListeners(); | 1468 EventTargetNodeCast(*i)->removeAllEventListeners(); |
| 1482 m_disconnectedNodesWithEventListeners.clear(); | 1469 m_disconnectedNodesWithEventListeners.clear(); |
| 1483 } | 1470 } |
| 1484 | 1471 |
| 1485 RenderView* Document::renderView() const | 1472 RenderView* Document::renderView() const |
| 1486 { | 1473 { |
| 1487 return toRenderView(renderer()); | 1474 return toRenderView(renderer()); |
| 1488 } | 1475 } |
| 1489 | 1476 |
| 1490 void Document::clearAXObjectCache() | 1477 void Document::clearAXObjectCache() |
| 1491 { | 1478 { |
| (...skipping 1094 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2586 // Remove focus from the existing focus node (if any) | 2573 // Remove focus from the existing focus node (if any) |
| 2587 if (oldFocusedNode && !oldFocusedNode->m_inDetach) { | 2574 if (oldFocusedNode && !oldFocusedNode->m_inDetach) { |
| 2588 if (oldFocusedNode->active()) | 2575 if (oldFocusedNode->active()) |
| 2589 oldFocusedNode->setActive(false); | 2576 oldFocusedNode->setActive(false); |
| 2590 | 2577 |
| 2591 oldFocusedNode->setFocus(false); | 2578 oldFocusedNode->setFocus(false); |
| 2592 | 2579 |
| 2593 // Dispatch a change event for text fields or textareas that have been e
dited | 2580 // Dispatch a change event for text fields or textareas that have been e
dited |
| 2594 RenderObject* r = static_cast<RenderObject*>(oldFocusedNode.get()->rende
rer()); | 2581 RenderObject* r = static_cast<RenderObject*>(oldFocusedNode.get()->rende
rer()); |
| 2595 if (r && (r->isTextArea() || r->isTextField()) && r->isEdited()) { | 2582 if (r && (r->isTextArea() || r->isTextField()) && r->isEdited()) { |
| 2596 oldFocusedNode->dispatchEventForType(eventNames().changeEvent, true,
false); | 2583 EventTargetNodeCast(oldFocusedNode.get())->dispatchEventForType(even
tNames().changeEvent, true, false); |
| 2597 if ((r = static_cast<RenderObject*>(oldFocusedNode.get()->renderer()
))) | 2584 if ((r = static_cast<RenderObject*>(oldFocusedNode.get()->renderer()
))) |
| 2598 r->setEdited(false); | 2585 r->setEdited(false); |
| 2599 } | 2586 } |
| 2600 | 2587 |
| 2601 // Dispatch the blur event and let the node do any other blur related ac
tivities (important for text fields) | 2588 // Dispatch the blur event and let the node do any other blur related ac
tivities (important for text fields) |
| 2602 oldFocusedNode->dispatchBlurEvent(); | 2589 EventTargetNodeCast(oldFocusedNode.get())->dispatchBlurEvent(); |
| 2603 | 2590 |
| 2604 if (m_focusedNode) { | 2591 if (m_focusedNode) { |
| 2605 // handler shifted focus | 2592 // handler shifted focus |
| 2606 focusChangeBlocked = true; | 2593 focusChangeBlocked = true; |
| 2607 newFocusedNode = 0; | 2594 newFocusedNode = 0; |
| 2608 } | 2595 } |
| 2609 oldFocusedNode->dispatchUIEvent(eventNames().DOMFocusOutEvent); | 2596 EventTargetNodeCast(oldFocusedNode.get())->dispatchUIEvent(eventNames().
DOMFocusOutEvent); |
| 2610 if (m_focusedNode) { | 2597 if (m_focusedNode) { |
| 2611 // handler shifted focus | 2598 // handler shifted focus |
| 2612 focusChangeBlocked = true; | 2599 focusChangeBlocked = true; |
| 2613 newFocusedNode = 0; | 2600 newFocusedNode = 0; |
| 2614 } | 2601 } |
| 2615 if ((oldFocusedNode.get() == this) && oldFocusedNode->hasOneRef()) | 2602 if ((oldFocusedNode.get() == this) && oldFocusedNode->hasOneRef()) |
| 2616 return true; | 2603 return true; |
| 2617 | 2604 |
| 2618 if (oldFocusedNode.get() == oldFocusedNode->rootEditableElement()) | 2605 if (oldFocusedNode.get() == oldFocusedNode->rootEditableElement()) |
| 2619 frame()->editor()->didEndEditing(); | 2606 frame()->editor()->didEndEditing(); |
| 2620 } | 2607 } |
| 2621 | 2608 |
| 2622 if (newFocusedNode) { | 2609 if (newFocusedNode) { |
| 2623 if (newFocusedNode == newFocusedNode->rootEditableElement() && !acceptsE
ditingFocus(newFocusedNode.get())) { | 2610 if (newFocusedNode == newFocusedNode->rootEditableElement() && !acceptsE
ditingFocus(newFocusedNode.get())) { |
| 2624 // delegate blocks focus change | 2611 // delegate blocks focus change |
| 2625 focusChangeBlocked = true; | 2612 focusChangeBlocked = true; |
| 2626 goto SetFocusedNodeDone; | 2613 goto SetFocusedNodeDone; |
| 2627 } | 2614 } |
| 2628 // Set focus on the new node | 2615 // Set focus on the new node |
| 2629 m_focusedNode = newFocusedNode.get(); | 2616 m_focusedNode = newFocusedNode.get(); |
| 2630 | 2617 |
| 2631 // Dispatch the focus event and let the node do any other focus related
activities (important for text fields) | 2618 // Dispatch the focus event and let the node do any other focus related
activities (important for text fields) |
| 2632 m_focusedNode->dispatchFocusEvent(); | 2619 EventTargetNodeCast(m_focusedNode.get())->dispatchFocusEvent(); |
| 2633 | 2620 |
| 2634 if (m_focusedNode != newFocusedNode) { | 2621 if (m_focusedNode != newFocusedNode) { |
| 2635 // handler shifted focus | 2622 // handler shifted focus |
| 2636 focusChangeBlocked = true; | 2623 focusChangeBlocked = true; |
| 2637 goto SetFocusedNodeDone; | 2624 goto SetFocusedNodeDone; |
| 2638 } | 2625 } |
| 2639 m_focusedNode->dispatchUIEvent(eventNames().DOMFocusInEvent); | 2626 EventTargetNodeCast(m_focusedNode.get())->dispatchUIEvent(eventNames().D
OMFocusInEvent); |
| 2640 if (m_focusedNode != newFocusedNode) { | 2627 if (m_focusedNode != newFocusedNode) { |
| 2641 // handler shifted focus | 2628 // handler shifted focus |
| 2642 focusChangeBlocked = true; | 2629 focusChangeBlocked = true; |
| 2643 goto SetFocusedNodeDone; | 2630 goto SetFocusedNodeDone; |
| 2644 } | 2631 } |
| 2645 m_focusedNode->setFocus(); | 2632 m_focusedNode->setFocus(); |
| 2646 | 2633 |
| 2647 if (m_focusedNode.get() == m_focusedNode->rootEditableElement()) | 2634 if (m_focusedNode.get() == m_focusedNode->rootEditableElement()) |
| 2648 frame()->editor()->didBeginEditing(); | 2635 frame()->editor()->didBeginEditing(); |
| 2649 | 2636 |
| (...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3301 } else { | 3288 } else { |
| 3302 ASSERT(renderer() == 0 || renderer() == m_savedRenderer); | 3289 ASSERT(renderer() == 0 || renderer() == m_savedRenderer); |
| 3303 ASSERT(m_renderArena); | 3290 ASSERT(m_renderArena); |
| 3304 setRenderer(m_savedRenderer); | 3291 setRenderer(m_savedRenderer); |
| 3305 m_savedRenderer = 0; | 3292 m_savedRenderer = 0; |
| 3306 } | 3293 } |
| 3307 } | 3294 } |
| 3308 | 3295 |
| 3309 void Document::documentWillBecomeInactive() | 3296 void Document::documentWillBecomeInactive() |
| 3310 { | 3297 { |
| 3311 #if USE(ACCELERATED_COMPOSITING) | |
| 3312 if (renderer()) | |
| 3313 renderView()->willMoveOffscreen(); | |
| 3314 #endif | |
| 3315 | |
| 3316 HashSet<Element*>::iterator end = m_documentActivationCallbackElements.end()
; | 3298 HashSet<Element*>::iterator end = m_documentActivationCallbackElements.end()
; |
| 3317 for (HashSet<Element*>::iterator i = m_documentActivationCallbackElements.be
gin(); i != end; ++i) | 3299 for (HashSet<Element*>::iterator i = m_documentActivationCallbackElements.be
gin(); i != end; ++i) |
| 3318 (*i)->documentWillBecomeInactive(); | 3300 (*i)->documentWillBecomeInactive(); |
| 3319 } | 3301 } |
| 3320 | 3302 |
| 3321 void Document::documentDidBecomeActive() | 3303 void Document::documentDidBecomeActive() |
| 3322 { | 3304 { |
| 3323 HashSet<Element*>::iterator end = m_documentActivationCallbackElements.end()
; | 3305 HashSet<Element*>::iterator end = m_documentActivationCallbackElements.end()
; |
| 3324 for (HashSet<Element*>::iterator i = m_documentActivationCallbackElements.be
gin(); i != end; ++i) | 3306 for (HashSet<Element*>::iterator i = m_documentActivationCallbackElements.be
gin(); i != end; ++i) |
| 3325 (*i)->documentDidBecomeActive(); | 3307 (*i)->documentDidBecomeActive(); |
| 3326 | |
| 3327 #if USE(ACCELERATED_COMPOSITING) | |
| 3328 if (renderer()) | |
| 3329 renderView()->didMoveOnscreen(); | |
| 3330 #endif | |
| 3331 } | 3308 } |
| 3332 | 3309 |
| 3333 void Document::registerForDocumentActivationCallbacks(Element* e) | 3310 void Document::registerForDocumentActivationCallbacks(Element* e) |
| 3334 { | 3311 { |
| 3335 m_documentActivationCallbackElements.add(e); | 3312 m_documentActivationCallbackElements.add(e); |
| 3336 } | 3313 } |
| 3337 | 3314 |
| 3338 void Document::unregisterForDocumentActivationCallbacks(Element* e) | 3315 void Document::unregisterForDocumentActivationCallbacks(Element* e) |
| 3339 { | 3316 { |
| 3340 m_documentActivationCallbackElements.remove(e); | 3317 m_documentActivationCallbackElements.remove(e); |
| (...skipping 1187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4528 } | 4505 } |
| 4529 } | 4506 } |
| 4530 } | 4507 } |
| 4531 return 0; | 4508 return 0; |
| 4532 } | 4509 } |
| 4533 | 4510 |
| 4534 } // namespace WebCore | 4511 } // namespace WebCore |
| 4535 | 4512 |
| 4536 | 4513 |
| 4537 | 4514 |
| OLD | NEW |