tkormann 02/05/22 03:06:56 Modified: sources/org/apache/batik/bridge BridgeContext.java BridgeEventSupport.java GVTBuilder.java sources/org/apache/batik/swing/svg JSVGComponent.java Log: memory leak fix. svgCanvas.setSVGDocument(svgCanvas.getSVGDocument()) now works. All attached listeners are now removed by using the bridgeContext.dispose() method. Revision Changes Path 1.47 +18 -1 xml-batik/sources/org/apache/batik/bridge/BridgeContext.java Index: BridgeContext.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/BridgeContext.java,v retrieving revision 1.46 retrieving revision 1.47 diff -u -r1.46 -r1.47 --- BridgeContext.java 22 Apr 2002 17:08:55 -0000 1.46 +++ BridgeContext.java 22 May 2002 10:06:55 -0000 1.47 @@ -66,7 +66,7 @@ * a SVG DOM tree such as the current viewport or the user agent. * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: BridgeContext.java,v 1.46 2002/04/22 17:08:55 tkormann Exp $ + * @version $Id: BridgeContext.java,v 1.47 2002/05/22 10:06:55 tkormann Exp $ */ public class BridgeContext implements ErrorConstants, CSSContext { @@ -713,6 +713,11 @@ /** * The DOM EventListener to receive 'DOMCharacterDataModified' event. */ + protected EventListener unloadListener; + + /** + * The DOM EventListener to receive 'DOMCharacterDataModified' event. + */ protected EventListener domCharacterDataModifiedListener; /** @@ -741,6 +746,13 @@ protected FocusManager focusManager; /** + * Sets the unload listener. + */ + protected void setUnloadListener(EventListener l) { + unloadListener = l; + } + + /** * Adds EventListeners to the DOM and CSSEngineListener to the * CSSEngine to handle any modifications on the DOM tree or style * properties and update the GVT tree in response. @@ -782,6 +794,10 @@ */ public void dispose() { EventTarget evtTarget = (EventTarget)document; + + // remove the listener added by BridgeEventSupport + evtTarget.removeEventListener("SVGUnload", unloadListener, false); + evtTarget.removeEventListener("DOMAttrModified", domAttrModifiedEventListener, true); @@ -798,6 +814,7 @@ SVGOMDocument svgDocument = (SVGOMDocument)document; CSSEngine cssEngine = svgDocument.getCSSEngine(); cssEngine.removeCSSEngineListener(cssPropertiesChangedListener); + cssEngine.dispose(); focusManager.dispose(); } 1.37 +5 -6 xml-batik/sources/org/apache/batik/bridge/BridgeEventSupport.java Index: BridgeEventSupport.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/BridgeEventSupport.java,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- BridgeEventSupport.java 17 May 2002 08:16:53 -0000 1.36 +++ BridgeEventSupport.java 22 May 2002 10:06:55 -0000 1.37 @@ -50,7 +50,7 @@ * fowarding them to the DOM as regular DOM MouseEvent. * * @author <a href="mailto:[EMAIL PROTECTED]>Thierry Kormann</a> - * @version $Id: BridgeEventSupport.java,v 1.36 2002/05/17 08:16:53 tkormann Exp $ + * @version $Id: BridgeEventSupport.java,v 1.37 2002/05/22 10:06:55 tkormann Exp $ */ public class BridgeEventSupport implements SVGConstants { @@ -60,7 +60,7 @@ * Is called only for the root element in order to dispatch GVT * events to the DOM. */ - public static void addGVTListener(BridgeContext ctx, Element svgRoot) { + public static void addGVTListener(BridgeContext ctx, Document doc) { UserAgent ua = ctx.getUserAgent(); if (ua != null) { EventDispatcher dispatcher = ua.getEventDispatcher(); @@ -69,10 +69,9 @@ dispatcher.addGraphicsNodeMouseListener(listener); // add an unload listener on the SVGDocument to remove // that listener for dispatching events - ((EventTarget)svgRoot).addEventListener - ("SVGUnload", - new GVTUnloadListener(dispatcher, listener), - false); + EventListener l = new GVTUnloadListener(dispatcher, listener); + ((EventTarget)doc).addEventListener("SVGUnload", l, false); + ctx.setUnloadListener(l); } } } 1.21 +2 -2 xml-batik/sources/org/apache/batik/bridge/GVTBuilder.java Index: GVTBuilder.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/GVTBuilder.java,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- GVTBuilder.java 11 Apr 2002 08:42:22 -0000 1.20 +++ GVTBuilder.java 22 May 2002 10:06:55 -0000 1.21 @@ -30,7 +30,7 @@ * This class is responsible for creating a GVT tree using an SVG DOM tree. * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: GVTBuilder.java,v 1.20 2002/04/11 08:42:22 tkormann Exp $ + * @version $Id: GVTBuilder.java,v 1.21 2002/05/22 10:06:55 tkormann Exp $ */ public class GVTBuilder implements SVGConstants { @@ -87,7 +87,7 @@ // <!> FIXME: TO BE REMOVED if (ctx.isDynamic()) { // register GVT listeners for AWT event support - BridgeEventSupport.addGVTListener(ctx, svgElement); + BridgeEventSupport.addGVTListener(ctx, document); // register DOM listeners for dynamic support ctx.addDOMListeners(); } 1.52 +4 -1 xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java Index: JSVGComponent.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java,v retrieving revision 1.51 retrieving revision 1.52 diff -u -r1.51 -r1.52 --- JSVGComponent.java 30 Apr 2002 08:45:15 -0000 1.51 +++ JSVGComponent.java 22 May 2002 10:06:55 -0000 1.52 @@ -186,7 +186,7 @@ * building/rendering a document (invalid XML file, missing attributes...).</p> * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: JSVGComponent.java,v 1.51 2002/04/30 08:45:15 vhardy Exp $ + * @version $Id: JSVGComponent.java,v 1.52 2002/05/22 10:06:55 tkormann Exp $ */ public class JSVGComponent extends JGVTComponent { @@ -482,6 +482,9 @@ (null, SVGConstants.SVG_ZOOM_AND_PAN_ATTRIBUTE); disableInteractions = !znp.equals(SVGConstants.SVG_MAGNIFY_VALUE); + if (bridgeContext != null) { + bridgeContext.dispose(); + } bridgeContext = createBridgeContext(); nextGVTTreeBuilder = new GVTTreeBuilder(doc, bridgeContext); nextGVTTreeBuilder.setPriority(Thread.MIN_PRIORITY);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]