diff --git a/mozilla/content/html/document/src/nsHTMLContentSink.cpp b/mozilla/content/html/document/src/nsHTMLContentSink.cpp
index c9ce45db9fa..101f046df9b 100644
--- a/mozilla/content/html/document/src/nsHTMLContentSink.cpp
+++ b/mozilla/content/html/document/src/nsHTMLContentSink.cpp
@@ -2227,6 +2227,9 @@ HTMLContentSink::StartLayout()
// If it's a frameset document then disable scrolling. If it is not a
// document, then let the style dictate. We need to do this before the initial reflow...
if (mWebShell) {
+ // initially show the scrollbars. We need to do this because another
+ // document like a XUL document, could have have hidden the scrollbars. -EDV
+ mWebShell->SetScrolling(-1, PR_FALSE);
if (mFrameset) {
mWebShell->SetScrolling(NS_STYLE_OVERFLOW_HIDDEN, PR_FALSE);
}
diff --git a/mozilla/layout/html/document/src/nsHTMLContentSink.cpp b/mozilla/layout/html/document/src/nsHTMLContentSink.cpp
index c9ce45db9fa..101f046df9b 100644
--- a/mozilla/layout/html/document/src/nsHTMLContentSink.cpp
+++ b/mozilla/layout/html/document/src/nsHTMLContentSink.cpp
@@ -2227,6 +2227,9 @@ HTMLContentSink::StartLayout()
// If it's a frameset document then disable scrolling. If it is not a
// document, then let the style dictate. We need to do this before the initial reflow...
if (mWebShell) {
+ // initially show the scrollbars. We need to do this because another
+ // document like a XUL document, could have have hidden the scrollbars. -EDV
+ mWebShell->SetScrolling(-1, PR_FALSE);
if (mFrameset) {
mWebShell->SetScrolling(NS_STYLE_OVERFLOW_HIDDEN, PR_FALSE);
}
diff --git a/mozilla/layout/xul/base/src/nsSplitterFrame.cpp b/mozilla/layout/xul/base/src/nsSplitterFrame.cpp
index b4c561af221..43d3c69fee5 100644
--- a/mozilla/layout/xul/base/src/nsSplitterFrame.cpp
+++ b/mozilla/layout/xul/base/src/nsSplitterFrame.cpp
@@ -89,6 +89,7 @@ public:
virtual nsresult DragMove(nsIDOMEvent* aMouseEvent) { return NS_OK; }
void MouseDrag(nsIPresContext& aPresContext, nsGUIEvent* aEvent);
+ void MouseUp(nsIPresContext& aPresContext, nsGUIEvent* aEvent);
void AdjustChildren(nsIPresContext& aPresContext);
void AdjustChildren(nsIPresContext& aPresContext, nsSplitterInfo* aChildInfos, PRInt32 aCount, PRBool aIsHorizontal);
@@ -110,7 +111,7 @@ public:
void AddListener();
void RemoveListener();
- enum ResizeType { Closest, Farest, Grow };
+ enum ResizeType { Closest, Farthest, Grow };
enum State { Open, Collapsed, Dragging };
ResizeType GetResizeBefore();
@@ -135,6 +136,7 @@ public:
nsString mCollapsedChildStyle;
nsCOMPtr mCollapsedChild;
nscoord mSplitterPos;
+ nscoord mSplitterViewPos;
};
@@ -151,8 +153,8 @@ nsSplitterFrameImpl::GetResizeBefore()
nsString value;
content->GetAttribute(kNameSpaceID_None, nsXULAtoms::resizebefore, value);
- if (value.EqualsIgnoreCase("farest"))
- return Farest;
+ if (value.EqualsIgnoreCase("farthest"))
+ return Farthest;
else
return Closest;
}
@@ -165,8 +167,8 @@ nsSplitterFrameImpl::GetResizeAfter()
nsString value;
content->GetAttribute(kNameSpaceID_None, nsXULAtoms::resizeafter, value);
- if (value.EqualsIgnoreCase("farest"))
- return Farest;
+ if (value.EqualsIgnoreCase("farthest"))
+ return Farthest;
else if (value.EqualsIgnoreCase("grow"))
return Grow;
else
@@ -237,21 +239,29 @@ nsSplitterFrame::CreateAnonymousContent(nsISupportsArray& aAnonymousChildren)
PRInt32 count = 0;
mContent->ChildCount(count);
+ // create a grippy if we have no children and teh collapse attribute is before or after.
if (count == 0) {
+ nsString value;
+ if (NS_CONTENT_ATTR_HAS_VALUE == mContent->GetAttribute(kNameSpaceID_None, nsXULAtoms::collapse, value))
+ {
+ if (value.EqualsIgnoreCase("after") || value.EqualsIgnoreCase("before"))
+ {
+ // create a spring
+ nsCOMPtr content;
+ NS_CreateAnonymousNode(mContent, nsXULAtoms::spring, nsXULAtoms::nameSpaceID, content);
+ content->SetAttribute(kNameSpaceID_None, nsXULAtoms::flex, "100%", PR_FALSE);
+ aAnonymousChildren.AppendElement(content);
- nsCOMPtr content;
- NS_CreateAnonymousNode(mContent, nsXULAtoms::spring, nsXULAtoms::nameSpaceID, content);
- content->SetAttribute(kNameSpaceID_None, nsXULAtoms::flex, "100%", PR_FALSE);
- aAnonymousChildren.AppendElement(content);
+ // a grippy
+ NS_CreateAnonymousNode(mContent, nsXULAtoms::grippy, nsXULAtoms::nameSpaceID, content);
+ aAnonymousChildren.AppendElement(content);
- // a grippy
- NS_CreateAnonymousNode(mContent, nsXULAtoms::grippy, nsXULAtoms::nameSpaceID, content);
- aAnonymousChildren.AppendElement(content);
-
- // create a spring
- NS_CreateAnonymousNode(mContent, nsXULAtoms::spring, nsXULAtoms::nameSpaceID, content);
- content->SetAttribute(kNameSpaceID_None, nsXULAtoms::flex, "100%", PR_FALSE);
- aAnonymousChildren.AppendElement(content);
+ // create a spring
+ NS_CreateAnonymousNode(mContent, nsXULAtoms::spring, nsXULAtoms::nameSpaceID, content);
+ content->SetAttribute(kNameSpaceID_None, nsXULAtoms::flex, "100%", PR_FALSE);
+ aAnonymousChildren.AppendElement(content);
+ }
+ }
}
return NS_OK;
@@ -396,42 +406,27 @@ nsSplitterFrame::HandleEvent(nsIPresContext& aPresContext,
mImpl->MouseDrag(aPresContext, aEvent);
break;
-/*
- case NS_MOUSE_RIGHT_BUTTON_DOWN:
- case NS_MOUSE_LEFT_BUTTON_DOWN:
- mImpl->mDidDrag = PR_FALSE;
- mImpl->CaptureMouse(PR_TRUE);
- break;
-*/
-
case NS_MOUSE_RIGHT_BUTTON_UP:
case NS_MOUSE_LEFT_BUTTON_UP:
- // add our listener back
- // and pass the event down to the child if we did not
- // drag
-
- mImpl->AdjustChildren(aPresContext);
- mImpl->AddListener();
- mImpl->CaptureMouse(PR_FALSE);
- mContent->SetAttribute(kNameSpaceID_None, nsXULAtoms::state, "", PR_TRUE);
- mImpl->mPressed = PR_FALSE;
-
- if (!mImpl->mDidDrag) {
- // nsIView* view = nsnull;
- // GetView(&view);
- // nsCOMPtr viewMan;
- // view->GetViewManager(*getter_AddRefs(viewMan));
-
- // return viewMan->HandleEvent(aEvent, aEventStatus);
- }
-
-
+ mImpl->MouseUp(aPresContext, aEvent);
break;
}
return nsHTMLContainerFrame::HandleEvent(aPresContext, aEvent, aEventStatus);
}
+void
+nsSplitterFrameImpl::MouseUp(nsIPresContext& aPresContext, nsGUIEvent* aEvent)
+{
+ if (IsMouseCaptured()) {
+ AdjustChildren(aPresContext);
+ AddListener();
+ CaptureMouse(PR_FALSE);
+ mSplitter->mContent->SetAttribute(kNameSpaceID_None, nsXULAtoms::state, "", PR_TRUE);
+ mPressed = PR_FALSE;
+ }
+}
+
void
nsSplitterFrameImpl::MouseDrag(nsIPresContext& aPresContext, nsGUIEvent* aEvent)
{
@@ -479,7 +474,7 @@ nsSplitterFrameImpl::MouseDrag(nsIPresContext& aPresContext, nsGUIEvent* aEvent)
// take our current position and substract the start location
pos -= start;
- printf("Diff=%d\n", pos);
+ //printf("Diff=%d\n", pos);
ResizeType resizeAfter = GetResizeAfter();
@@ -502,12 +497,13 @@ nsSplitterFrameImpl::MouseDrag(nsIPresContext& aPresContext, nsGUIEvent* aEvent)
//mCurrentPos = diff + mCurrentPos;
- printf("----- resize ----- ");
+ // printf("----- resize ----- ");
+ /*
for (i=0; i < mChildInfosBeforeCount; i++)
printf("before, index=%d, current=%d, changed=%d\n", mChildInfosBefore[i].index, mChildInfosBefore[i].current, mChildInfosBefore[i].changed);
for (i=0; i < mChildInfosAfterCount; i++)
printf("after, index=%d, current=%d, changed=%d\n", mChildInfosAfter[i].index, mChildInfosAfter[i].current, mChildInfosAfter[i].changed);
-
+ */
nsCOMPtr shell;
aPresContext.GetShell(getter_AddRefs(shell));
@@ -597,7 +593,7 @@ nsSplitterFrameImpl :: IsMouseCaptured()
nsresult
nsSplitterFrameImpl::MouseUp(nsIDOMEvent* aMouseEvent)
{
- printf("Released\n");
+ // printf("Released\n");
mPressed = PR_FALSE;
return NS_OK;
}
@@ -605,7 +601,6 @@ nsSplitterFrameImpl::MouseUp(nsIDOMEvent* aMouseEvent)
nsresult
nsSplitterFrameImpl::MouseDown(nsIDOMEvent* aMouseEvent)
{
-
mCurrentPos = 0;
mPressed = PR_TRUE;
@@ -693,13 +688,13 @@ nsSplitterFrameImpl::MouseDown(nsIDOMEvent* aMouseEvent)
}
// if the resizebefore is closest we must reverse the list because the first child in the list
- // is the farest we want the first child to be the closest.
+ // is the Farthest we want the first child to be the closest.
if (resizeBefore == Closest)
Reverse(mChildInfosBefore, mChildInfosBeforeCount);
- // if the resizeafter is the farest we must reverse the list because the first child in the list
- // is the closest we want the first child to be the farest.
- if (resizeAfter == Farest)
+ // if the resizeafter is the Farthest we must reverse the list because the first child in the list
+ // is the closest we want the first child to be the Farthest.
+ if (resizeAfter == Farthest)
Reverse(mChildInfosAfter, mChildInfosAfterCount);
// grow only applys to the children after. If grow is set then no space should be taken out of any children after
@@ -709,18 +704,25 @@ nsSplitterFrameImpl::MouseDown(nsIDOMEvent* aMouseEvent)
nsCOMPtr uiEvent(do_QueryInterface(aMouseEvent));
+ nsRect vr(0,0,0,0);
+ nsIView *v;
+ mSplitter->GetView(&v);
+ v->GetBounds(vr);
+
PRInt32 c = 0;
if (isHorizontal) {
uiEvent->GetClientX(&c);
mSplitterPos = mSplitter->mRect.x;
+ mSplitterViewPos = vr.x;
} else {
uiEvent->GetClientY(&c);
mSplitterPos = mSplitter->mRect.y;
+ mSplitterViewPos = vr.y;
}
mDragStartPx = c;
- printf("Pressed mDragStartPx=%d\n",mDragStartPx);
+ //printf("Pressed mDragStartPx=%d\n",mDragStartPx);
return NS_OK;
}
@@ -728,7 +730,7 @@ nsSplitterFrameImpl::MouseDown(nsIDOMEvent* aMouseEvent)
nsresult
nsSplitterFrameImpl::MouseMove(nsIDOMEvent* aMouseEvent)
{
- printf("Mouse move\n");
+ //printf("Mouse move\n");
if (!mPressed)
return NS_OK;
@@ -736,6 +738,10 @@ nsSplitterFrameImpl::MouseMove(nsIDOMEvent* aMouseEvent)
if (IsMouseCaptured())
return NS_OK;
+ if (mState == Collapsed)
+ return NS_OK;
+
+
mSplitter->mContent->SetAttribute(kNameSpaceID_None, nsXULAtoms::state, "dragging", PR_TRUE);
RemoveListener();
@@ -782,8 +788,14 @@ nsSplitterFrameImpl::UpdateState()
nsString value;
if (NS_CONTENT_ATTR_HAS_VALUE == content->GetAttribute(kNameSpaceID_None, nsXULAtoms::collapse, value))
{
- if (value=="after")
- before = PR_FALSE;
+ if (value.EqualsIgnoreCase("before"))
+ before = PR_TRUE;
+ else if (value.EqualsIgnoreCase("after"))
+ before = PR_FALSE;
+ else
+ return;
+ } else {
+ return;
}
// find the child just in the box just before the splitter. If we are not currently collapsed then
@@ -825,7 +837,7 @@ nsSplitterFrameImpl::AdjustChildren(nsIPresContext& aPresContext)
void
nsSplitterFrameImpl::AdjustChildren(nsIPresContext& aPresContext, nsSplitterInfo* aChildInfos, PRInt32 aCount, PRBool aIsHorizontal)
{
- printf("------- AdjustChildren------\n");
+ // printf("------- AdjustChildren------\n");
for (int i=0; i < aCount; i++)
{
@@ -866,7 +878,7 @@ nsSplitterFrameImpl::AdjustChildren(nsIPresContext& aPresContext, nsSplitterInfo
// set its preferred size.
char ch[50];
sprintf(ch,"%d",pref/onePixel);
- printf("index=%d, pref=%s\n", i, ch);
+ //printf("index=%d, pref=%s\n", i, ch);
content->SetAttribute(kNameSpaceID_None, attribute, ch, PR_FALSE);
mParentBox->SetChildNeedsRecalc(index, PR_TRUE);
}
@@ -940,14 +952,21 @@ nsSplitterFrameImpl::ResizeChildTo(nscoord& aDiff,
}
const nsRect& r = mSplitter->mRect;
-
+ nsRect vr;
+ nsCOMPtr vm;
+ nsIView *v;
+ mSplitter->GetView(&v);
+ v->GetViewManager(*getter_AddRefs(vm));
+ v->GetBounds(vr);
nsRect invalid(0,0,0,0);
if (mParentBox->IsHorizontal()) {
mSplitter->MoveTo(mSplitterPos + aDiff, r.y);
+ vm->MoveViewTo(v, mSplitterViewPos + aDiff, vr.y);
invalid.width = r.width + PR_ABS(aDiff);
invalid.x = PR_MAX(mSplitterPos,mSplitterPos + aDiff);
} else {
mSplitter->MoveTo(r.x, mSplitterPos + aDiff);
+ vm->MoveViewTo(v, vr.x, mSplitterViewPos + aDiff);
invalid.height = r.height + PR_ABS(aDiff);
invalid.y = PR_MAX(mSplitterPos, mSplitterPos + aDiff);
}
diff --git a/mozilla/xpfe/global/resources/skin/xul.css b/mozilla/xpfe/global/resources/skin/xul.css
index 717bac06000..b263d0ce209 100644
--- a/mozilla/xpfe/global/resources/skin/xul.css
+++ b/mozilla/xpfe/global/resources/skin/xul.css
@@ -1055,6 +1055,9 @@ treepusher.decrement[disabled="true"] {
splitter {
display: block;
+ cursor: arrow;
+ min-width: 5px;
+ min-height: 5px;
}
splitter[state="dragging"] {