From ea8ed5bbe4a2b51287324d97da71c90aa310cf9e Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 10 Apr 2023 13:36:52 -0700 Subject: [PATCH] HTML5Window: clean up canvas/div and event listeners on window close() --- .../_internal/backend/html5/HTML5Window.hx | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/lime/_internal/backend/html5/HTML5Window.hx b/src/lime/_internal/backend/html5/HTML5Window.hx index 636275a5f..185972d97 100644 --- a/src/lime/_internal/backend/html5/HTML5Window.hx +++ b/src/lime/_internal/backend/html5/HTML5Window.hx @@ -250,6 +250,45 @@ class HTML5Window public function close():Void { + var element = parent.element; + if (element != null) + { + if (canvas != null) + { + if (element != cast canvas) + { + element.removeChild(canvas); + } + canvas = null; + } + else if (div != null) + { + element.removeChild(div); + div = null; + } + + var events = ["mousedown", "mouseenter", "mouseleave", "mousemove", "mouseup", "wheel"]; + + for (event in events) + { + element.removeEventListener(event, handleMouseEvent, true); + } + + element.removeEventListener("contextmenu", handleContextMenuEvent, true); + + element.removeEventListener("dragstart", handleDragEvent, true); + element.removeEventListener("dragover", handleDragEvent, true); + element.removeEventListener("drop", handleDragEvent, true); + + element.removeEventListener("touchstart", handleTouchEvent, true); + element.removeEventListener("touchmove", handleTouchEvent, true); + element.removeEventListener("touchend", handleTouchEvent, true); + element.removeEventListener("touchcancel", handleTouchEvent, true); + + element.removeEventListener("gamepadconnected", handleGamepadEvent, true); + element.removeEventListener("gamepaddisconnected", handleGamepadEvent, true); + } + parent.application.__removeWindow(parent); }