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]

Reply via email to