From 2d636c1ae4c905a1e9da8c68800e74aa6baf81b3 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Mon, 27 Aug 2007 21:03:28 +0000 Subject: [PATCH] Properly destroy features in the point, path, and polygon handlers. Patch with tests from fredj - thank you for the catch and the great patch. (Closes #931) git-svn-id: http://svn.openlayers.org/trunk/openlayers@4063 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Handler/Path.js | 3 ++- lib/OpenLayers/Handler/Point.js | 2 ++ tests/Handler/test_Path.html | 27 +++++++++++++++++++++++++++ tests/Handler/test_Point.html | 23 +++++++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) 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"); + }