From d7da2a5bd5060f37695810357152027a802f43a6 Mon Sep 17 00:00:00 2001 From: Araq Date: Sun, 12 Apr 2020 00:22:46 +0200 Subject: [PATCH] fixes #139 --- karax/karax.nim | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/karax/karax.nim b/karax/karax.nim index 0b1da6c..84ab6f5 100644 --- a/karax/karax.nim +++ b/karax/karax.nim @@ -78,6 +78,24 @@ template keyeventBody() = # Do not call redraw() here! That is already done # by ``karax.addEventHandler``. +proc karaxEvents(d: Node): JSeq[(cstring, NativeEventHandler)] {.importcpp: "#.karaxEvents".} +proc `karaxEvents=`(d: Node; value: JSeq[(cstring, NativeEventHandler)]) {.importcpp: "#.karaxEvents = #".} + +proc addEventShell(d: Node; name: cstring; h: NativeEventHandler) = + # The DOM is such a pathetic piece of junk that it doesn't + # offer 'removeAllEventHandlers()'. Hence we store the event + # handler twice in 'd' so that we can emulate this properly. + # This is required to fix bug #139. + d.addEventListener(name, h) + if d.karaxEvents == nil: + d.karaxEvents = newJSeq[(cstring, NativeEventHandler)]() + d.karaxEvents.add((name, h)) + +proc removeAllEventHandlers(d: Node) = + if d.karaxEvents != nil: + for i in 0..