Open Bug 241827 Opened 20 years ago Updated 2 years ago

builder.refresh method sometimes leaves blank values when datasource is changed.

Categories

(Core :: XUL, defect)

defect

Tracking

()

People

(Reporter: hveluwenkamp, Unassigned)

Details

Attachments

(1 file)

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7b) Gecko/20040421
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7b) Gecko/20040421

When calling the builder.refresh method after changing the RDF datasource, the
updated widget has blanks where the updated values should appear. Sounds similar
to bug 68306, but calling builder.rebuild does not alleviate the problem.

Reproducible: Always
Steps to Reproduce:
1. load XUL file that uses RDF datasource and view result
2. change the RDF datasource
3. call builder.refresh on the element and view changes


Actual Results:  
Blank values appear in places where data has changes

Expected Results:  
Display the changes.
> When calling the builder.refresh method after changing the RDF datasource, the
> updated widget has blanks where the updated values should appear. Sounds similar
> to bug 68306, but calling builder.rebuild does not alleviate the problem.
> 

Using SetTimeout to call builder.rebuild after 100ms does work however.
This probably is some bizarre combination with the XUL template code and the
mark+sweep algorithm used in the remote datasource. Does this happen for all
templates, or only dont-build-content templates?

Patches welcome...
Assignee: nobody → varga
Severity: normal → minor
Status: UNCONFIRMED → NEW
Component: RDF → XP Toolkit/Widgets: Trees
Ever confirmed: true
OS: Windows 2000 → All
QA Contact: core.rdf
Hardware: PC → All
Test case for disappearing values. To view load 'bug.xul', then change
'object.rdf' datasource. Hit Refresh button and note that changed value(s) will
be blank in the browser (more often than not, that is.)
Refresh() is an asynchronous operation. So calling rebuild() just can't work.
You could use the hacky setTimeout() solution or you could add
nsIRDFXMLSinkObserver to listen for onEndLoad() and call rebuild in this method.

Or ...
change Refresh() to Refresh(boolean aSynch)
Assignee: varga → bsmedberg
Interesting enough that 
nsXULTemplateBuilder::Refresh
actually calls Rebuild, see
http://lxr.mozilla.org/seamonkey/source/content/xul/templates/src/nsXULTemplateBuilder.cpp#265

Smells like a bug to me.

Do we need an observer method for adding/removing of datasources in composite
datasources?
I think this is a dupe of 68306. There's even an analysis in bug 68306.

>Do we need an observer method for adding/removing of datasources in composite
>datasources?

hmm, I don't see a need for it ATM.
My understanding (which may be incorrect) is that this feature was added to
moz1.7 to allow remote XUL apps to refresh RDF datasources (no extra security
privileges.) Therefore any solution should work within this context.
I have also seen this problem, I shall be making a work-around.
Assignee: benjamin → nobody
Component: XP Toolkit/Widgets: Trees → XUL
QA Contact: xptoolkit.widgets
Severity: minor → S4
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: