[Max, I was finally able to refine my debugging and I realized we
were just deferring too broadly. This change makes it so _only_
events that would be sent to the node under initialization are
deferred. With this change, the components work again. I still have
the event debug printing on in this change, so be prepared for a lot
of output if you test this change with debugging on. You can comment
the Debug.debug calls out of LaszloEvents if that is too noisy.]
Change 20070111-ptw-j by [EMAIL PROTECTED] on
2007-01-11 19:12:09 PST
in /Users/ptw/OpenLaszlo/legals-2
Summary: Refined event deferral
Bugs Fixed:
LPP-?: 'Legals branch and Broken Components'
Technical Reviewer: max (pending)
QA Reviewer: platform-team (pending)
Doc Reviewer: jsundman (pending)
Documentation:
Events that would be sent to a node when the node is being
constructed (typically events that would be triggered by
initializing the attributes of the node) are deferred until the
node's attributes are fully initialized.
Release Notes:
This is a change from previous behavior, where the initialization
of a node attribute could cause an event to be sent to the node
when the node was partially initialized. This was an
underspecified area of the LZX language which lead to hazards in
some runtimes. This change should not affect the behavior of
existing programs.
Details:
LzDebug.*: Changed the behavior of __String so that if 'pretty'
output is requested instance UID's are not printed, even for
objects that have ambiguous representations. By default '%w'
requests pretty output. You can use '%#w' to force uid's to be
printed.
LzFormat: Removed hazards where format tried to interpret the
value to be displayed as a Number or String prematurely.
LaszloCanvas, LzNode: For the purposes of testing this change, you
can set the canvas attibute __LZhenryWasRight to true or false to
enable or disable the deferral of events during node
initialization.
LzNode, LaszloEvents: Event deferral is refined in this change to
_only_ defer events that would be sent to the node under
initialization. Previously, all events sent during a node's
initialization would be deferred. This meant that even nodes that
were already initialized or standalone events were deferred, which
appears to have been the cause of the lossage in components.
LzNode: Also over-rode _dbg_typename so that node's will print
in the
debugger with their 'lz' package name.
Class: Make the Instance method for _dbg_typename overridable
Tests:
These components all work now:
examples/components/combobox_example.lzx?lzr=dhtml
examples/components/form_example.lzx?lzr=dhtml
examples/components/list_example.lzx?lzr=dhtml
examples/components/menu_example.lzx?lzr=dhtml
This test (the original bug that sent us down this path) also
works the same in swf and dhtml:
<canvas width="600" height="600">
<view id="vw" bgcolor="blue" width="100" height="100" >
<handler name="onwidth" >
this.setBGColor(0xFF0000)
</handler>
</view>
</canvas>
Files:
M WEB-INF/lps/lfc/debugger/platform/swf/LzDebug.as
M WEB-INF/lps/lfc/debugger/platform/dhtml/LzDebug.js
M WEB-INF/lps/lfc/debugger/LzFormat.lzs
M WEB-INF/lps/lfc/core/LzNode.lzs
M WEB-INF/lps/lfc/core/Class.lzs
M WEB-INF/lps/lfc/views/LaszloCanvas.lzs
M WEB-INF/lps/lfc/events/LaszloEvents.lzs
Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20070111-ptw-
j.tar