Closed Bug 25510 Opened 25 years ago Closed 25 years ago

Can't type in Netscape Webmail's to: cc: or bcc: fields

Categories

(Core :: Layout, defect, P1)

x86
Windows NT
defect

Tracking

()

VERIFIED FIXED

People

(Reporter: scottputterman, Assigned: buster)

References

()

Details

(Keywords: regression, Whiteboard: [PDT+] 2/22)

Attachments

(3 files)

Go to webmail.netscape.com
login
go to write mail
Try to type in to: cc: or bcc:
result: you can't.

But you can type in the subject field.
Summary: Can't type in Netscape Webmail's to: cc: or bcc: fields → [REGRESSION] Can't type in Netscape Webmail's to: cc: or bcc: fields
assigning to myself.  I think this is a problem with the way block/inline code 
reports maxElementSize.  Attaching minimized test case.  You will only be able 
to reproduce this in a reasonably narrow window.  If you make the window wider, 
it works as expected.
Assignee: beppe → buster
Severity: normal → major
Component: Editor → Layout
Priority: P3 → P2
Target Milestone: M14
marking potential beta1 bugs
Keywords: beta1
PDT+
Whiteboard: [PDT+]
the real problem here is that the block code needs to maintain 
starts/ends-with-nbsp on a per-span and per-frame basis to properly compute the 
max-element-size of the block.
The line state does remember whether the line wrapped. I added that, because I 
needed it. That might get you what you need
just added a test case that shows that the text control is getting mouse and key 
events.  if you click on the control, a webshell gets created, and if you type, 
characters are added.  you can't see them, but if you hit the submit button 
they'll get sent off as part of the query URL.  

latest guess:  an incremental reflow error in inline code that prevents the 
webshell from getting located properly.

rod has a similar sounding problem with select controls.
Here's what's going on here.  Basically, an incremental reflow is not getting to 
its target frame.

Let's look at the over-simplified test case:
  <Block><Span>text<TCF></Span></Block>
TCF is "Text Control Frame", but it could be a select or a number of other frame 
types that rely on incremental reflows.

The (simplified) frame model at the time of the incremental reflow looks like 
this:
Block
  Line_1
    Span_1
      Text
  Line_2
    Span_2
      TCF 

The incremental reflow is targeted at the TCF.  The mPath in the reflow command 
has Block > Span_2 > TCF.

The block code marks both Line_1 and Line_2 dirty.  Why?  Not sure, probably to 
give Line_1 an oppurtunity to pull up content from Line_2.  The block code calls 
reflowState->GetNext() and stores the next frame in reflow path Span_2. 

When Line_1 is reflowed, nsLineLayout::ReflowFrame(Span_1, ...) causes Span_2 to 
be deleted, by calling nsBlockFrame::DeleteChildsNextInFlow(Span_1).

Now that Span_2 has been deleted, the block code continues it's incremental 
reflow moving on to Line_2.  When it checks to see if any of the children of 
Line_2 are in the reflow path, the answer is "no" because the original Span_2 is 
gone.  So the incremental reflow never gets to the TCF in the new replacement 
for Span_2.

I can see 3 approaches for trying to fix this:
1) create an "endangered" list for the span's next-in-flow, rather than actually 
deleting them.  As next-in-flows need to be inserted, we grab them off this list 
if possible.  I think the "if possible" criteria is "if the prev-in-flow 
didn't change", meaning the last child frame on that line has identical 
content as before.  I'm a bit fuzzy on that.  This would maintain our pointer 
identity for the span frame in all cases where it matters, though I'm not sure I 
can articulate just what that means.  All incremental reflows where the target 
does not change width?

2) Change the flow of control to mark only the target's containing line as 
dirty, at least initially.  Do the incremental reflow "normally."  Then, detect 
if the incremental reflow caused anything to change size.  If it did, go back 
and mark the prev-in-flow and the current lines dirty and do a resize reflow.

3) Set up a notification mechanism to fix up the "next frame in reflow path" 
pointer.  Somehow, we'd have to detect that next-in-flows are being created and 
match them with the target, so we knew how to properly target the incremental 
reflow.  This could get complicated if there are multiple levels of continued 
frames.

Troy, Nisheeth, Rick:  any other approaches?  Any opinion which is most likely 
the right way to go?  

This seems to effect a fair number of important pages, so I'm marking this P1.
Status: NEW → ASSIGNED
Priority: P2 → P1
forgot to add rickg and nisheeth to cc-list.  please see my previous comment.
Keywords: regression
Summary: [REGRESSION] Can't type in Netscape Webmail's to: cc: or bcc: fields → Can't type in Netscape Webmail's to: cc: or bcc: fields
*** Bug 25936 has been marked as a duplicate of this bug. ***
*** Bug 26254 has been marked as a duplicate of this bug. ***
when verifying, please verify both webmail and netaddress
Whiteboard: [PDT+] → [PDT+] landing 2/10
fixed in nsBlockFrame.cpp.  Added a separate code path to correctly propogate 
incremental reflow to children of continued span frames.  Could be more 
efficient, but that's a separate issue.
Status: ASSIGNED → RESOLVED
Closed: 25 years ago
Resolution: --- → FIXED
I'm re-opening the bug because:
- the fix is unacceptable and doesn't work correctly if floaters are involved
- I was listed as a reviewer even though I specifically objected to the proposed 
solution

Because the code doesn't call ReflowDirtyLines() we aren't recovering the 
floater state and so reflowing the line won't work correctly if floaters are 
involved.

We also don't call PropogateReflowDamage() after calling ReflowLine() which 
means if that line impacts the line that follows the next line won't get marked 
dirty

And the check in Reflow() is for !block line which means that the original 
problem is still a potential problem in paginated mode when blocks can be split

Status: RESOLVED → REOPENED
Resolution: FIXED → ---
agreed
Status: REOPENED → ASSIGNED
Whiteboard: [PDT+] landing 2/10 → [PDT+] landing 2/23
Whiteboard: [PDT+] landing 2/23 → [PDT+] fix in hand, troy to review
Whiteboard: [PDT+] fix in hand, troy to review → [PDT+] 2/22
fixed, along with 28084.  fix was in nsBlockFrame.cpp handling of incremental 
reflows targeted at child inline frames.
Status: ASSIGNED → RESOLVED
Closed: 25 years ago25 years ago
Resolution: --- → FIXED
verified in 2/23 build.
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: