diff --git a/lib/OpenLayers/Handler/Path.js b/lib/OpenLayers/Handler/Path.js index 2a4b4d54b6..936df89eaa 100644 --- a/lib/OpenLayers/Handler/Path.js +++ b/lib/OpenLayers/Handler/Path.js @@ -78,8 +78,9 @@ OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, { * Destroy temporary geometries */ destroyFeature: function() { + OpenLayers.Handler.Point.prototype.destroyFeature.apply(this); this.line.destroy(); - this.point.destroy(); + this.line = null; }, /** diff --git a/lib/OpenLayers/Handler/Point.js b/lib/OpenLayers/Handler/Point.js index f973aac0af..964e90ba34 100644 --- a/lib/OpenLayers/Handler/Point.js +++ b/lib/OpenLayers/Handler/Point.js @@ -116,6 +116,7 @@ OpenLayers.Handler.Point = OpenLayers.Class(OpenLayers.Handler, { } this.map.removeLayer(this.layer, false); this.layer.destroy(); + this.layer = null; return true; }, @@ -125,6 +126,7 @@ OpenLayers.Handler.Point = OpenLayers.Class(OpenLayers.Handler, { */ destroyFeature: function() { this.point.destroy(); + this.point = null; }, /** diff --git a/tests/Handler/test_Path.html b/tests/Handler/test_Path.html index 9e603679fe..8f3c7a9562 100644 --- a/tests/Handler/test_Path.html +++ b/tests/Handler/test_Path.html @@ -66,6 +66,33 @@ t.ok(!handler.line.geometry.getBounds().equals(new OpenLayers.Bounds(0,-35.15625,35.15625,0)), "Correct bounds after dragging without letting go. (Came out as "+handler.line.geometry.getBounds().toBBOX() + ".)"); } + function test_Handler_Path_destroy(t) { + t.plan(6); + var map = new OpenLayers.Map('map'); + map.addLayer(new OpenLayers.Layer.WMS("", "", {})); + map.zoomToMaxExtent(); + var control = new OpenLayers.Control(); + map.addControl(control); + var handler = new OpenLayers.Handler.Path(control, {foo: 'bar'}); + + handler.activate(); + var evt = {xy: new OpenLayers.Pixel(150, 75), which: 1}; + handler.mousedown(evt); + + t.ok(handler.layer, + "handler has a layer prior to destroy"); + t.ok(handler.point, + "handler has a point prior to destroy"); + t.ok(handler.line, + "handler has a line prior to destroy"); + handler.destroy(); + t.eq(handler.layer, null, + "handler.layer is null after destroy"); + t.eq(handler.point, null, + "handler.point is null after destroy"); + t.eq(handler.line, null, + "handler.line is null after destroy"); + } diff --git a/tests/Handler/test_Point.html b/tests/Handler/test_Point.html index 5d3475595a..8f2cbe4bb0 100644 --- a/tests/Handler/test_Point.html +++ b/tests/Handler/test_Point.html @@ -62,6 +62,29 @@ t.ok(!handler.point.geometry.getBounds().equals(new OpenLayers.Bounds(0,0,0,0)), "Bounds changed after moving mouse"); } + function test_Handler_Point_destroy(t) { + t.plan(4); + var map = new OpenLayers.Map('map'); + map.addLayer(new OpenLayers.Layer.WMS("", "", {})); + map.zoomToMaxExtent(); + var control = new OpenLayers.Control(); + map.addControl(control); + var handler = new OpenLayers.Handler.Point(control, {foo: 'bar'}); + + handler.activate(); + var evt = {xy: new OpenLayers.Pixel(150, 75), which: 1}; + handler.mousedown(evt); + + t.ok(handler.layer, + "handler has a layer prior to destroy"); + t.ok(handler.point, + "handler has a point prior to destroy"); + handler.destroy(); + t.eq(handler.layer, null, + "handler.layer is null after destroy"); + t.eq(handler.point, null, + "handler.point is null after destroy"); + }