From 5aba18ea06ff470999b273f28b26ae2b5d49c966 Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 10 Apr 2014 15:11:11 +0400 Subject: [PATCH] fix ie focus issues --- lib/ace/autocomplete.js | 6 +++++- lib/ace/mouse/mouse_handler.js | 12 ++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/ace/autocomplete.js b/lib/ace/autocomplete.js index bf021760..8aa8abb3 100644 --- a/lib/ace/autocomplete.js +++ b/lib/ace/autocomplete.js @@ -63,6 +63,7 @@ var Autocomplete = function() { this.insertMatch(); e.stop(); }.bind(this)); + this.popup.focus = this.editor.focus.bind(this.editor); }; this.openPopup = function(editor, prefix, keepPopupPosition) { @@ -122,7 +123,10 @@ var Autocomplete = function() { }; this.blurListener = function() { - if (document.activeElement != this.editor.textInput.getElement()) + // we have to check if activeElement is a child of popup because + // on IE preventDefault doesn't stop scrollbar from being focussed + var el = document.activeElement; + if (el != this.editor.textInput.getElement() && el.parentNode != this.popup.container) this.detach(); }; diff --git a/lib/ace/mouse/mouse_handler.js b/lib/ace/mouse/mouse_handler.js index 55b72389..c7573e94 100644 --- a/lib/ace/mouse/mouse_handler.js +++ b/lib/ace/mouse/mouse_handler.js @@ -45,7 +45,9 @@ var MouseHandler = function(editor) { new DefaultHandlers(this); new DefaultGutterHandler(this); new DragdropHandler(this); - + + var focusEditor = function(e) { editor.focus() }; + var mouseTarget = editor.renderer.getMouseEventTarget(); event.addListener(mouseTarget, "click", this.onMouseEvent.bind(this, "click")); event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this, "mousemove")); @@ -53,6 +55,10 @@ var MouseHandler = function(editor) { if (editor.renderer.scrollBarV) { event.addMultiMouseDownListener(editor.renderer.scrollBarV.inner, [400, 300, 250], this, "onMouseEvent"); event.addMultiMouseDownListener(editor.renderer.scrollBarH.inner, [400, 300, 250], this, "onMouseEvent"); + if (useragent.isIE) { + event.addListener(editor.renderer.scrollBarV.element, "mousedown", focusEditor); + event.addListener(editor.renderer.scrollBarH.element, "mousemove", focusEditor); + } } event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel")); @@ -62,9 +68,7 @@ var MouseHandler = function(editor) { event.addListener(gutterEl, "dblclick", this.onMouseEvent.bind(this, "gutterdblclick")); event.addListener(gutterEl, "mousemove", this.onMouseEvent.bind(this, "guttermousemove")); - event.addListener(mouseTarget, "mousedown", function(e) { - editor.focus(); - }); + event.addListener(mouseTarget, "mousedown", focusEditor); event.addListener(gutterEl, "mousedown", function(e) { editor.focus();