Closed Bug 12012 Opened 25 years ago Closed 25 years ago

XUL doesn't reflow correctly on resize

Categories

(Core :: XUL, defect, P1)

defect

Tracking

()

VERIFIED FIXED

People

(Reporter: dbaron, Assigned: eric)

References

Details

(Whiteboard: This is a table bug. Dep marked on 12287)

The contents of XUL files do not reflow correctly when the containing area is
resized.  This will be a serious problem for (some) sidebar panels once bug 8000
is fixed (which it should be soon).

To see the problems, download:
http://www.fas.harvard.edu/~dbaron/nstmp/M9-3/when-com.xul
http://www.fas.harvard.edu/~dbaron/nstmp/M9-3/when-com.css
http://www.fas.harvard.edu/~dbaron/nstmp/M9-3/when-com.js
http://www.fas.harvard.edu/~dbaron/nstmp/M9-3/when-com.rdf
to your local hard disk, put them in the same directory, and load when-com.xul
in *viewer*.  (It doesn't work over HTTP right now.  See bug 11112.)  Notice
that you can resize viewer and *then* reload, and thigs will (usually, although
sometimes it's quirky) resize to the size of the window.  However, if you resize
viewer horizontally, things don't resize the way they do when you reload.  They
should.  (The most serious problem is if you load when the window is large and
then shrink it.)

Tested in:
 * Linux viewer 1999-08-15-08-M9
 * Linux viewer 1999-08-16-08-M9
 * Windows viewer 1999-08-15-09-M9
 * Windows viewer 1999-08-16-09-M9
(Note: does not work in builds for about three weeks before 1999-08-15 due to
bug 10712 (Win only) and bug 11577 (all).)
Status: NEW → RESOLVED
Closed: 25 years ago
Resolution: --- → INVALID
resolving as invalid, Viewer is a test app for Gecko, not a target platform for
XUL.
First, I'm not sure this bug is as general as I originally thought.  It may be
particular to a certain configuration of boxes and springs (that I use).

Second, do you have any reason to believe that once the sidebar is resizable,
things will behave any differently than they do in viewer now?  If not, I think
this bug should be reopened.  Or should sidebar panels not be written in XUL?
If the problem is limited to Viewer, then it should be reassigned to someone in
Gecko if reopened.  I don't really have any opinion about Viewer, other than
that it should not be the focus of our development, since we are shipping only
AppRunner and its components.
Status: RESOLVED → REOPENED
OK, I observed the same thing in the content window of apprunner, Linux
1999-08-16-08-M9 (I didn't try it before in apprunner because my (incorrect)
memory of a bug that apprunner couldn't be resized very small, on Linux anyway).
I was testing resizability in viewer because the sidebar can't be resized yet.
The sidebar will be resizable soon, which is why I was testing it.  It's an XUL
bug, unless XUL acts differently in the sidebar than it does in the content
frame of apprunner or in viewer.

Reopening.
Resolution: INVALID → ---
Assignee: trudelle → evaughan
Status: REOPENED → NEW
reassigning to evaughan, since you say it may be specific to your usage of boxes
and springs.
Status: NEW → ASSIGNED
Priority: P3 → P1
Whiteboard: [BLOCKER][DOGFOOD]
Target Milestone: M10
Made the following changes as this is blocking David Baron's panel development
(or will be as soon as 8000 is fixed):
1) changed from P3 to P1
2) set target milestone to M10
3) marked [BLOCKER][DOGFOOD] in status whiteboard because it is blocking the
development of panels and preventing us from reaching dogfood for
panel developability
4) added relevant PMs to cc: list

Also note that David's internship ends in late September; if we don't get this
fixed by the end of August at the latest, I doubt we'll be able to have David
finish as much panel demo, sample code, and doc development work as we had
hoped.

It is urgent that we fix this bug soon so that development of panels by dbaron
(for demo development) and external partners (for beta panels) can move forward.

Totally understand the pressure everyone's under; just want to make sure this
bug gets the attention it needs so we can move forward and make the panels a
success.
I'm finishing up some other bugs.

but I will work on this today.
Severity: major → blocker
Whiteboard: [BLOCKER][DOGFOOD] → Will work on this today
Blocks: 12287
In looking at this almost all of your layout is tables. Not boxes. Tables have a
major bug in them that causes them to ignore the computed size given to them by
a box. This is filed as bug: 12287.

Placing a dependency on bug 12287

Do you really need to use tables this extensively to get your desired layout?
Whiteboard: Will work on this today → This is a table bug. Dep marked on 12287
Target Milestone: M10 → M11
Target Milestone: M11 → M14
Assignee: evaughan → karnaze
Status: ASSIGNED → NEW
This crashes in tables. The reflow state looks good. Both the width and height
are calculated. Available height is NS_AUTOHEIGHT.

nsCellMap::GetCellInfoAt(int 1, int 0, int * 0x0012b4a0, int * 0x0012b4a4) line
512
nsTableFrame::GetCellInfoAt(int 1, int 0, int * 0x0012b4a0, int * 0x0012b4a4)
line 5285
BasicTableLayoutStrategy::AssignPercentageColumnWidths(int 2505, int 0) line 802
+ 30 bytes
BasicTableLayoutStrategy::BalanceColumnWidths(nsIStyleContext * 0x02d8ed50,
const nsHTMLReflowState & {...}, int 2595) line 208 + 37 bytes
nsTableFrame::BalanceColumnWidths(nsIPresContext & {...}, const
nsHTMLReflowState & {...}, const nsSize & {...}, nsSize * 0x00000000) line 3896
nsTableFrame::Reflow(nsTableFrame * const 0x02d8eac4, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 2302
nsContainerFrame::ReflowChild(nsIFrame * 0x02d8eac0, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 372 + 28 bytes
nsTableOuterFrame::Reflow(nsTableOuterFrame * const 0x02d8eb64, nsIPresContext &
{...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned
int & 0) line 902 + 37 bytes
nsBlockReflowContext::ReflowBlock(nsIFrame * 0x02d8eb60, const nsRect & {...},
int 1, int 0, int 0, nsMargin & {...}, unsigned int & 0) line 229 + 42 bytes
nsBlockFrame::ReflowBlockFrame(nsBlockReflowState & {...}, nsLineBox *
0x02d8be40, int * 0x0012bf40) line 3136 + 59 bytes
nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineBox * 0x02d8be40, int
* 0x0012bf40, int 0) line 2509 + 20 bytes
nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2320 + 27 bytes
nsBlockFrame::Reflow(nsBlockFrame * const 0x02d94074, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 1415 + 18 bytes
nsBoxFrame::FlowChildAt(nsIFrame * 0x02d94070, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0,
nsCalculatedBoxInfo & {...}, int & 0, nsString & {...}) line 1100
nsBoxFrame::FlowChildren(nsIPresContext & {...}, nsHTMLReflowMetrics & {...},
const nsHTMLReflowState & {...}, unsigned int & 0, nsRect & {...}) line 699
nsBoxFrame::Reflow(nsBoxFrame * const 0x02407574, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 534
nsBoxFrame::FlowChildAt(nsIFrame * 0x02407570, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0,
nsCalculatedBoxInfo & {...}, int & 0, nsString & {...}) line 1100
nsBoxFrame::FlowChildren(nsIPresContext & {...}, nsHTMLReflowMetrics & {...},
const nsHTMLReflowState & {...}, unsigned int & 0, nsRect & {...}) line 699
nsBoxFrame::Reflow(nsBoxFrame * const 0x02405a4c, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 534
nsBoxFrame::FlowChildAt(nsIFrame * 0x02405a48, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0,
nsCalculatedBoxInfo & {...}, int & 0, nsString & {...}) line 1100
nsBoxFrame::FlowChildren(nsIPresContext & {...}, nsHTMLReflowMetrics & {...},
const nsHTMLReflowState & {...}, unsigned int & 0, nsRect & {...}) line 699
nsBoxFrame::Reflow(nsBoxFrame * const 0x02403f24, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 534
nsContainerFrame::ReflowChild(nsIFrame * 0x02403f20, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 372 + 28 bytes
RootFrame::Reflow(RootFrame * const 0x02d85a44, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 330
nsContainerFrame::ReflowChild(nsIFrame * 0x02d85a40, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 372 + 28 bytes
ViewportFrame::Reflow(ViewportFrame * const 0x02d85ab4, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 516
nsHTMLReflowCommand::Dispatch(nsHTMLReflowCommand * const 0x02d89da0,
nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsSize & {...},
nsIRenderingContext & {...}) line 141
PresShell::ProcessReflowCommands(PresShell * const 0x02b11d90) line 1391
PresShell::ExitReflowLock(PresShell * const 0x02b11d90) line 667
PresShell::ContentAppended(PresShell * const 0x02b11d98, nsIDocument *
0x027bc140, nsIContent * 0x02d63460, int 0) line 1824
XULDocumentImpl::ContentAppended(XULDocumentImpl * const 0x027bc140, nsIContent
* 0x02d63460, int 0) line 1802
nsGenericHTMLContainerElement::AppendChildTo(nsIContent * 0x02d884bc, int 1)
line 2951
nsGenericHTMLContainerElement::InsertBefore(nsIDOMNode * 0x02d884b0, nsIDOMNode
* 0x00000000, nsIDOMNode * * 0x0012d628) line 2604 + 14 bytes
nsGenericHTMLContainerElement::AppendChild(nsIDOMNode * 0x02d884b0, nsIDOMNode *
* 0x0012d628) line 2791
nsHTMLTableCellElement::AppendChild(nsHTMLTableCellElement * const 0x02d63454,
nsIDOMNode * 0x02d884b0, nsIDOMNode * * 0x0012d628) line 62 + 22 bytes
NodeAppendChild(JSContext * 0x027541d0, JSObject * 0x023d97a8, unsigned int 1,
long * 0x023d76cc, long * 0x0012d6e4) line 617 + 25 bytes
js_Invoke(JSContext * 0x027541d0, unsigned int 1, unsigned int 0) line 672 + 26
bytes
js_Interpret(JSContext * 0x027541d0, long * 0x0012df5c) line 2248 + 15 bytes
js_Invoke(JSContext * 0x027541d0, unsigned int 0, unsigned int 0) line 688 + 13
bytes
js_Interpret(JSContext * 0x027541d0, long * 0x0012e790) line 2248 + 15 bytes
js_Invoke(JSContext * 0x027541d0, unsigned int 1, unsigned int 0) line 688 + 13
bytes
js_Interpret(JSContext * 0x027541d0, long * 0x0012efc4) line 2248 + 15 bytes
js_Invoke(JSContext * 0x027541d0, unsigned int 0, unsigned int 0) line 688 + 13
bytes
js_Interpret(JSContext * 0x027541d0, long * 0x0012f7f8) line 2248 + 15 bytes
js_Invoke(JSContext * 0x027541d0, unsigned int 1, unsigned int 2) line 688 + 13
bytes
js_InternalCall(JSContext * 0x027541d0, JSObject * 0x012f9d00, long 19900488,
unsigned int 1, long * 0x0012f978, long * 0x0012f930) line 765 + 15 bytes
JS_CallFunction(JSContext * 0x027541d0, JSObject * 0x012f9d00, JSFunction *
0x02c41a90, unsigned int 1, long * 0x0012f978, long * 0x0012f930) line 2653 + 32
bytes
nsJSContext::CallFunction(nsJSContext * const 0x02755030, void * 0x012f9d00,
void * 0x02c41a90, unsigned int 1, void * 0x0012f978, int * 0x0012f974) line 231
+ 39 bytes
nsJSEventListener::HandleEvent(nsIDOMEvent * 0x02d998e0) line 103 + 48 bytes
nsEventListenerManager::HandleEvent(nsIPresContext & {...}, nsEvent *
0x0012fcd0, nsIDOMEvent * * 0x0012fb78, unsigned int 7, nsEventStatus &
nsEventStatus_eIgnore) line 1025 + 21 bytes
GlobalWindowImpl::HandleDOMEvent(GlobalWindowImpl * const 0x027544a4,
nsIPresContext & {...}, nsEvent * 0x0012fcd0, nsIDOMEvent * * 0x0012fb78,
unsigned int 1, nsEventStatus & nsEventStatus_eIgnore) line 2897
nsWebShell::OnEndDocumentLoad(nsWebShell * const 0x027549b4, nsIDocumentLoader *
0x027540e0, nsIChannel * 0x02d362f0, unsigned int 0, nsIDocumentLoaderObserver *
0x027549b4) line 3330 + 34 bytes
nsDocLoaderImpl::FireOnEndDocumentLoad(nsDocLoaderImpl * 0x027540e0, nsIChannel
* 0x02d362f0, unsigned int 0) line 849
nsDocLoaderImpl::OnStopRequest(nsDocLoaderImpl * const 0x027540e4, nsIChannel *
0x02c3d190, nsISupports * 0x00000000, unsigned int 0, const unsigned short *
0x00000000) line 730
nsOnStopRequestEvent::HandleEvent(nsOnStopRequestEvent * const 0x02d99990) line
322
nsStreamListenerEvent::HandlePLEvent(PLEvent * 0x02d99940) line 169 + 12 bytes
PL_HandleEvent(PLEvent * 0x02d99940) line 534 + 10 bytes
PL_ProcessPendingEvents(PLEventQueue * 0x0106eaa0) line 493 + 9 bytes
_md_EventReceiverProc(HWND__ * 0x001c020a, unsigned int 49432, unsigned int 0,
long 17230496) line 963 + 9 bytes
USER32! 77e71820()
0106eaa0()
Assignee: karnaze → evaughan
Eric, I checked in a fix to nsTableRowGroupFrame.cpp for the crash.
Status: NEW → RESOLVED
Closed: 25 years ago25 years ago
Resolution: --- → FIXED
yep that fixed it thanks Chris!
Status: RESOLVED → VERIFIED
Marking VERIFIED FIXED on:
MacOS9 1999110308 apprunner
Linux6 1999110309 apprunner
Win98 1999110308 apprunner
BULK MOVE: Changing component from XUL to XP Toolkit/Widgets: XUL.  XUL 
component will be deleted.
Component: XUL → XP Toolkit/Widgets: XUL
Component: XP Toolkit/Widgets: XUL → XUL
QA Contact: ckritzer → xptoolkit.widgets
You need to log in before you can comment on or make changes to this bug.