void nsSplitterFrameInner::UpdateState() { // State Transitions: // Open -> Dragging // Open -> CollapsedBefore // Open -> CollapsedAfter // CollapsedBefore -> Open // CollapsedBefore -> Dragging // CollapsedAfter -> Open // CollapsedAfter -> Dragging // Dragging -> Open // Dragging -> CollapsedBefore (auto collapse) // Dragging -> CollapsedAfter (auto collapse) State newState = GetState(); if (newState == mState) { // No change. return; } if ((SupportsCollapseDirection(Before) || SupportsCollapseDirection(After)) && mOuter->GetParent()->IsBoxFrame()) { // Find the splitter's immediate sibling. nsIFrame* splitterSibling; if (newState == CollapsedBefore || mState == CollapsedBefore) { splitterSibling = mOuter->GetPrevSibling(); } else { splitterSibling = mOuter->GetNextSibling(); } if (splitterSibling) { nsCOMPtr<nsIContent> sibling = splitterSibling->GetContent(); if (sibling) { if (mState == CollapsedBefore || mState == CollapsedAfter) { // CollapsedBefore -> Open // CollapsedBefore -> Dragging // CollapsedAfter -> Open // CollapsedAfter -> Dragging nsContentUtils::AddScriptRunner( new nsUnsetAttrRunnable(sibling, nsGkAtoms::collapsed)); } else if ((mState == Open || mState == Dragging) && (newState == CollapsedBefore || newState == CollapsedAfter)) { // Open -> CollapsedBefore / CollapsedAfter // Dragging -> CollapsedBefore / CollapsedAfter nsContentUtils::AddScriptRunner( new nsSetAttrRunnable(sibling, nsGkAtoms::collapsed, NS_LITERAL_STRING("true"))); } } } } mState = newState; }