From: <cl...@us...> - 2007-12-21 00:22:06
|
Revision: 2689 http://vexi.svn.sourceforge.net/vexi/?rev=2689&view=rev Author: clrg Date: 2007-12-20 16:22:09 -0800 (Thu, 20 Dec 2007) Log Message: ----------- Fix major regression in null child puts + child moves no longer fire Children trap Modified Paths: -------------- trunk/core/org.vexi.core/src/org/vexi/core/Box.jpp Modified: trunk/core/org.vexi.core/src/org/vexi/core/Box.jpp =================================================================== --- trunk/core/org.vexi.core/src/org/vexi/core/Box.jpp 2007-12-20 15:58:30 UTC (rev 2688) +++ trunk/core/org.vexi.core/src/org/vexi/core/Box.jpp 2007-12-21 00:22:09 UTC (rev 2689) @@ -1500,17 +1500,32 @@ } parent = null; } + + /** handle the internal reflow/layout logic of parent assignment */ private void assignToParent(Box newparent, int i) throws JSExn { + // do not put null to Children trap if parent does not change + if (newparent == parent) { + if (parent == null) return; + if (test(DISPLAY)) dirty(); + parent.deleteNode(parent.indexNode(this)); + parent.insertNode(i, this); + if (test(DISPLAY)) parent.setPlace(); + return; + } // FIXME handle Enter/Leave better - clear(MOUSEINSIDE); + clear(MOUSEINSIDE); boolean wasvisible = isVisible(); Box oldparent = parent; JS oldsurface = getAndTriggerTraps(SC_surface); // remove from old parent if (oldparent != null) { - if (newparent != null) { - oldparent.put(oldparent.indexNode(this), null, false, false); - } else removeFromParent(wasvisible); + if (newparent != null) { + // invoke null put to Children trap on oldparent + oldparent.put(oldparent.indexNode(this), null, false, false); + } else { + // newparent==null => null put has already occurred + removeFromParent(wasvisible); + } } // check validity of new parent assignment if (newparent != null && i == -1) { @@ -1589,7 +1604,7 @@ Box b = getChild(i); if (b == null) throw new JSExn("Attempt to remove a null child from a box"); - if (fireTrapsOnRemove) assignToParent(null, -1); + if (fireTrapsOnRemove) b.assignToParent(null, -1); else b.removeFromParent(b.isVisible()); } else {// attempt to add a child, b, to this box This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |