Closed Bug 12122 Opened 26 years ago Closed 26 years ago

[BLOCKER][DOGFOOD]overflow property within XUL == disappearing content

Categories

(Core :: XUL, defect, P1)

x86
Linux
defect

Tracking

()

VERIFIED FIXED

People

(Reporter: dbaron, Assigned: karnaze)

Details

(Whiteboard: [PDT+] 12/10/1999)

Attachments

(3 files)

DESCRIPTION: When the overflow property is set to scroll or auto within XUL, it causes the content within the element with the overflow property to disappear (and draws a few scrollbars if overflow is scroll). STEPS TO REPRODUCE: * download the four files stock-ticker.* in http://www.fas.harvard.edu/~dbaron/nstmp/stock-ticker/M9-3/ * Add to the beginning of stock-ticker.css either the rule: tbody#stockTB { overflow: auto; } or the rule tbody#stockTB { overflow: scroll; } * load stock-ticker.xul in viewer or apprunner or in the sidebar (currently does not work from an HTTP URL - see bug 11112.) ACTUAL RESULTS: The content within the table body (listing of five stocks with data) disappears. If you picked "overflow: scroll" above, then there are scrollbars on the *top* and right of the area where they should be, except the one on the right is very short. EXPECTED RESULTS: If the panel is displayed in a large window (such as viewer or apprunner's content window), the stocks should all fit, and if overflow is scroll (rather than auto) there should be scrollbars. If the panel is displayed in a small window, such as the sidebar (you need to edit chrome://sidebar/content/sidebar-browser.rdf to do this), the scrollbars should allow you to scroll in either case, and the stock data should take up as much room as it can so that nothing overflows off the edge of the page (kind of like an IFRAME, but no horizontal scrolling should be needed since the widths get sized to fit). BUILDS TESTED: * Linux, apprunner, 1999-08-16-08-M9 * Linux, viewer, 1999-08-16-08-M9 ADDITIONAL INFORMATION: Being able to use overflow is important for sidebar panels, since they will often want to have concepts of "navigation" and "data", where the navigation should always fit even if the sidebar panel is tiny and the data must overflow. If you want to allow scrolling some other way than the overflow property, that would be reasonable (but it would make sidebar panel developers learn yet something else). However, the overflow property shouldn't cause the disastrous results it currently causes.
I think this bug may be similar to some other bugs I've filed (or at least things that have bothered me). The way things seem to work now is that an XUL box reflows its contents to be "as small as possible". What I think should happen is that, after this happens, if the box's size is increased by a "flex" attribute, the contents should be reflowed again with the new size for the box. I think I've seen elsewhere (auto margins - bug 9442 ??) that this should happen.
Assignee: trudelle → evaughan
reassigning to evaughan for triage
Status: NEW → ASSIGNED
This is fixed with when I turn on gfx scrollbars. I mark fixed once I turn them on.
Priority: P3 → P1
Whiteboard: [BLOCKER][DOGFOOD]
Target Milestone: M10
When is GFX scheduled to be turned on? Sounds like this bug will be fixed when that happens, which is great news, but to make sure this bug is prioritized appropriately, I made the following changes as this is blocking David Baron's panel development: 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. 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.
If Linux only, please put on [PP] radar
Overflow on boxes and tabs work now. But tables are html. Are you able to get this to work in a regular html table in a html file?
Yes, it works fine within HTML. Example to be attached.
Status: ASSIGNED → RESOLVED
Closed: 26 years ago
Resolution: --- → INVALID
Your scrollbars don't show up because the second table forces the first table not to get smaller. If you make the first tables width bigger scrollbars will appear. See the example enclosed.
Status: RESOLVED → REOPENED
The problem was the interaction of XUL boxes with flex with overflow auto on an element inside them. Your example doesn't have any boxes. Reopening. The original URL was wrong. It should be http://www.fas.harvard.edu/~dbaron/nstmp/M9-3/ . That example only has one table.
Resolution: INVALID → ---
I put the test cases for this bug (revised as described in the original report), in http://www.fas.harvard.edu/~dbaron/nstmp/M9-3-bug12122/ . They are now crashing viewer and apprunner even when viewed locally (1999-09-14-09-M11).
Target Milestone: M10 → M12
Summary: overflow property within XUL == disappearing content → [BLOCKER][DOGFOOD]overflow property within XUL == disappearing content
Whiteboard: [BLOCKER][DOGFOOD]
Moving [BLOCKER][DOGFOOD]from status whiteboard to summary to get on radar. Is this still a problem with GFX scrollbars?
Whiteboard: [PDT-]
From our reading GFX scroll bars take care of this. Please send bug to pdt@netscape.com if you feel this should be put back on dogfood radar. Putting on [PDT-] radar.
Assignee: evaughan → karnaze
Status: REOPENED → NEW
This example crashes in tables: nsTableFrame::ComputeDesiredHeight(nsIPresContext & {...}, const nsHTMLReflowState & {...}, int 285) line 4201 + 14 bytes nsTableFrame::ResizeReflowPass2(nsTableFrame * const 0x027aa8a0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 2618 + 20 bytes nsTableFrame::Reflow(nsTableFrame * const 0x027aa8a4, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 2318 + 38 bytes nsContainerFrame::ReflowChild(nsIFrame * 0x027aa8a0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 372 + 28 bytes nsTableOuterFrame::Reflow(nsTableOuterFrame * const 0x027aa944, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 902 + 37 bytes nsBoxFrame::FlowChildAt(nsIFrame * 0x027aa940, 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 0x0127fd04, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 534 nsBoxFrame::FlowChildAt(nsIFrame * 0x0127fd00, 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 0x012f0434, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 534 nsBoxFrame::FlowChildAt(nsIFrame * 0x012f0430, 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 0x023f7294, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 534 nsContainerFrame::ReflowChild(nsIFrame * 0x023f7290, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 372 + 28 bytes RootFrame::Reflow(RootFrame * const 0x027a8b14, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 330 nsContainerFrame::ReflowChild(nsIFrame * 0x027a8b10, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 372 + 28 bytes ViewportFrame::Reflow(ViewportFrame * const 0x027a8b84, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 516 PresShell::InitialReflow(PresShell * const 0x027543e0, int 10875, int 8475) line 949
Eric, the fix I just checked in for bug 12012 must have fixed this also, since I'm not seeing the crash.
Assignee: karnaze → evaughan
Assignee: evaughan → karnaze
Now this crashes in tables. Its particularly spectacular when gfx scrollbars are turned on. The problem seems to be because the table casts the rowGroupFrame to at nsTableRowGroupFrame*. The only problem is the rowGroupFrame is a GfxScrollFrame. If I turn off gfx scrollbars it crashes in ComputeDesiredHeight just like it did before. nsGfxScrollFrameInner::QueryInterface(nsGfxScrollFrameInner * const 0x02759adc, const nsID & {...}, void * * 0x00000007) line 228 + 206 bytes nsTableFrame::ComputeDesiredHeight(nsIPresContext & {...}, const nsHTMLReflowState & {...}, int 300) line 4163 + 36 bytes nsTableFrame::ResizeReflowPass2(nsTableFrame * const 0x02759ae0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 2588 + 20 bytes nsTableFrame::Reflow(nsTableFrame * const 0x02759ae4, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 2285 + 38 bytes nsContainerFrame::ReflowChild(nsIFrame * 0x02759ae0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 378 + 28 bytes nsTableOuterFrame::Reflow(nsTableOuterFrame * const 0x02759b74, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 907 + 37 bytes nsBoxFrame::FlowChildAt(nsIFrame * 0x02759b70, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0, nsCalculatedBoxInfo & {...}, int & 0, nsString & {...}) line 1130 nsBoxFrame::FlowChildren(nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0, nsRect & {...}) line 699 nsBoxFrame::Reflow(nsBoxFrame * const 0x0242395c, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 534 nsBoxFrame::FlowChildAt(nsIFrame * 0x02423958, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0, nsCalculatedBoxInfo & {...}, int & 0, nsString & {...}) line 1130 nsBoxFrame::FlowChildren(nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0, nsRect & {...}) line 699 nsBoxFrame::Reflow(nsBoxFrame * const 0x02421e44, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 534 nsBoxFrame::FlowChildAt(nsIFrame * 0x02421e40, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0, nsCalculatedBoxInfo & {...}, int & 0, nsString & {...}) line 1130 nsBoxFrame::FlowChildren(nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0, nsRect & {...}) line 699 nsBoxFrame::Reflow(nsBoxFrame * const 0x0236aeb4, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 534 nsContainerFrame::ReflowChild(nsIFrame * 0x0236aeb0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 378 + 28 bytes RootFrame::Reflow(RootFrame * const 0x0225d944, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 330 nsContainerFrame::ReflowChild(nsIFrame * 0x0225d940, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 378 + 28 bytes Viewpo
It might help if someone told me how to turn on gfx scroll bars, preferably in Viewer. The scroll bars upon setting style/widget-rendering-mode/gfx don't look any different than native ones.
Assignee: karnaze → evaughan
Eric, with native scroll bars in stock-ticker.xul, I'm seeing a scroll frame (not scrollable frame) with a display type of NS_STYLE_DISPLAY_TABLE_ROW_GROUP and with gfx scroll bars, the gfx scroll bar has that display. This has to be changed because the table code makes assumptions about the frame type based on the display type. I noticed a lot of new code in nsCSSFrameConstructor and nsScrollFrame that presumably you wrote, so I'm giving this back to you.
mass-moving all m12 bugs to m13
Status: NEW → ASSIGNED
Blocks: 20203
The table should not be making assumption about display type. We should have a interface on the frame that if implemented that can return the scrolled frame inside. So when a table is looking at one of its rows it should see if it implements this interface. If it does it should ask the interface for the scrolled frame. This is very much like nsIScrollableView but at the frame level. That way the implementation of the the scrolling code can be left as implementation. Chris Karnaze wrote: > I didn't think this discussion necessarily had to do with with scrollable row > groups, but it might. The table code was crashing because a scroll frame had the > display type of row group which is clearly wrong. Recall that the table code > casts frames based on display type. So, what has changed is that scroll frames > have the wrong display type and the question is "what display type should they > have". There is no special CSS display type for something that is scrolled. Therefore, the scroll frame will have a display type of row group. And that's not wrong, that's the way it is A large part of the motivation for GetFrameType() was so that we could check what kind of frame we actually have. If you want to know whether it's a scroll frame, then you should use GetFrameType() -Troy
I want to avoid adding extra interfaces to frames unless we absolutely need to. It costs us 4 bytes overhead per frame instance for each interface the frame class implements. The frame class should be sufficient to tell whether we have a scroll frame That said, I think the equivalent of nsIScrollableView at the frame level makes sense, and since only the scroll frame (or gfx scroll frame or whatever the class name is) would implement it (and very few frames are scrolled) there won't be much overhead. No more than we had before when using views
Ok I will put the interface together, have you review it and then Chris can use it to get his scrolled row groups working. Sound like a plan?
Whiteboard: [PDT-] → [PDT+]
Putting on PDT+ radar.
Whiteboard: [PDT+] → [PDT+] 12/10/1999
Ok I have a fix for my part that is an interface that is implemented by scroll frames. Once that is checked in I'll have to pass it off to Chris to make sure he uses it. So I'm putting a date of next friday for him.
spam: changing qa contact from ckritzer -> paulmac for xul bugs
Assignee: evaughan → karnaze
Status: ASSIGNED → NEW
nsIScrollableFrame is now implemented and checed in. Search nsTableFrame for it too see how it is used.
Is this still a blocker? Is this still dogfood, or has enough of the problem been resolved that either a) the whole bug is resolved; or b) the blocking and dogfood stuff is resolved? If this is no longer dogfood, please remove the word, and also remove the PDT annotation. Thanks, Jim
I don't know. I haven't really been looking at panels since my internship ended. Eric (Krock)?
Status: NEW → ASSIGNED
I don't know if this is still dogfood or not but I do have changes locally that work with the attachments and am waiting for an approval to checkin.
Blocks: 21564
Status: ASSIGNED → RESOLVED
Closed: 26 years ago26 years ago
Resolution: --- → FIXED
kaarnaze checked in yesterday. marking fixed to get on the testing radar. lets try and get this checked out today. thanks
Status: RESOLVED → VERIFIED
marking verified, all the test cases, attachments load without crashing using 12/14 builds
BULK MOVE: Changing component from XUL to XP Toolkit/Widgets: XUL. XUL component will be deleted.
Component: XUL → XP Toolkit/Widgets: XUL
No longer blocks: 20203
No longer blocks: 21564
Component: XP Toolkit/Widgets: XUL → XUL
QA Contact: paulmac → xptoolkit.widgets
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: