Remove event observers in clear().
authorDaniel Carl <danielcarl@gmx.de>
Wed, 21 Jun 2017 20:43:34 +0000 (22:43 +0200)
committerDaniel Carl <danielcarl@gmx.de>
Wed, 21 Jun 2017 20:49:12 +0000 (22:49 +0200)
src/hints.c
src/scripts/hints.js

index 6046706..13ca0af 100644 (file)
@@ -87,7 +87,7 @@ void hints_clear(Client *c)
         c->mode->flags &= ~FLAG_HINTING;
         vb_input_set_text(c, "");
 
-        call_hints_function(c, "clear", "");
+        call_hints_function(c, "clear", "true");
 
         /* if open window was not allowed for JavaScript, restore this */
         if (!hints.allow_open_win) {
index 6f5b6f5..0bdc71b 100644 (file)
@@ -49,13 +49,17 @@ var hints = Object.freeze((function(){
     }
 
     function onresize() {
-        clear();
+        clear(false);
         create();
         show(false);
     }
 
-    function clear() {
-        var i, j, doc, e;
+    function clear(removeListener) {
+        var i, j, doc, e, w = window;
+        if (removeListener && w) {
+            w.removeEventListener("resize", onresize, true);
+            w.removeEventListener("scroll", onresize, false);
+        }
         for (i = 0; i < docs.length; i++) {
             doc = docs[i];
             /* find all hinted elements vimbhint 'hint' */
@@ -378,7 +382,7 @@ var hints = Object.freeze((function(){
             filterKeys = "";
             show(false);
         } else {
-            clear();
+            clear(true);
         }
 
         return res || config.action(e);
@@ -536,14 +540,8 @@ var hints = Object.freeze((function(){
             }
             return "ERROR:";
         },
-        clear: function() {
-            clear();
-            if (window) {
-                window.removeEventListener("resize", onresize, true);
-                window.removeEventListener("scroll", onresize, false);
-            }
-        },
-        fire:         fire,
-        focus:        focus,
+        clear: clear,
+        fire:  fire,
+        focus: focus,
     };
 })());