示例#1
0
void detachRenderTree(Element* current, const AttachContext& context)
{
    WidgetHierarchyUpdatesSuspensionScope suspendWidgetHierarchyUpdates;

    if (current->hasCustomStyleResolveCallbacks())
        current->willDetachRenderers();

    current->clearStyleDerivedDataBeforeDetachingRenderer();

    // Do not remove the element's hovered and active status
    // if performing a reattach.
    if (!context.performingReattach)
        current->clearHoverAndActiveStatusBeforeDetachingRenderer();

    if (ShadowRoot* shadowRoot = current->shadowRoot())
        detachShadowRoot(shadowRoot, context);

    detachChildren(current, context);

    if (current->renderer())
        current->renderer()->destroyAndCleanupAnonymousWrappers();
    current->setRenderer(0);

    current->setAttached(false);

    if (current->hasCustomStyleResolveCallbacks())
        current->didDetachRenderers();
}
示例#2
0
static void detachRenderTree(Element& current, DetachType detachType)
{
    WidgetHierarchyUpdatesSuspensionScope suspendWidgetHierarchyUpdates;

    if (current.hasCustomStyleResolveCallbacks())
        current.willDetachRenderers();

    current.clearStyleDerivedDataBeforeDetachingRenderer();

    // Do not remove the element's hovered and active status
    // if performing a reattach.
    if (detachType != ReattachDetach)
        current.clearHoverAndActiveStatusBeforeDetachingRenderer();

    if (ShadowRoot* shadowRoot = current.shadowRoot())
        detachShadowRoot(*shadowRoot, detachType);

    detachChildren(current, detachType);

    if (current.renderer())
        current.renderer()->destroyAndCleanupAnonymousWrappers();
    current.setRenderer(0);

    current.setAttached(false);

    if (current.hasCustomStyleResolveCallbacks())
        current.didDetachRenderers();
}