X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/c930e9176a5a85509c5b0230e2bff5c22a591432..25ef3491bd9ae007ff1fc2b0d7943e6eaaccf775:/src/util/KeyNav.js diff --git a/src/util/KeyNav.js b/src/util/KeyNav.js index 0be106e6..8c08493a 100644 --- a/src/util/KeyNav.js +++ b/src/util/KeyNav.js @@ -1,5 +1,5 @@ /*! - * Ext JS Library 3.0.0 + * Ext JS Library 3.0.3 * Copyright(c) 2006-2009 Ext JS, LLC * licensing@extjs.com * http://www.extjs.com/license @@ -59,15 +59,6 @@ Ext.KeyNav.prototype = { */ forceKeyDown : false, - // private - prepareEvent : function(e){ - var k = e.getKey(); - var h = this.keyToHandler[k]; - if(Ext.isSafari2 && h && k >= 37 && k <= 40){ - e.stopEvent(); - } - }, - // private relay : function(e){ var k = e.getKey(); @@ -113,38 +104,46 @@ Ext.KeyNav.prototype = { 27 : "esc", 9 : "tab" }, + + stopKeyUp: function(e) { + var k = e.getKey(); + + if (k >= 37 && k <= 40) { + // *** bugfix - safari 2.x fires 2 keyup events on cursor keys + // *** (note: this bugfix sacrifices the "keyup" event originating from keyNav elements in Safari 2) + e.stopEvent(); + } + }, /** * Enable this KeyNav */ - enable: function(){ - if(this.disabled){ - // ie won't do special keys on keypress, no one else will repeat keys with keydown - // the EventObject will normalize Safari automatically - if(this.isKeydown()){ - this.el.on("keydown", this.relay, this); - }else{ - this.el.on("keydown", this.prepareEvent, this); - this.el.on("keypress", this.relay, this); + enable: function() { + if (this.disabled) { + if (Ext.isSafari2) { + // call stopKeyUp() on "keyup" event + this.el.on('keyup', this.stopKeyUp, this); } - this.disabled = false; - } - }, + + this.el.on(this.isKeydown()? 'keydown' : 'keypress', this.relay, this); + this.disabled = false; + } + }, /** * Disable this KeyNav */ - disable: function(){ - if(!this.disabled){ - if(this.isKeydown()){ - this.el.un("keydown", this.relay, this); - }else{ - this.el.un("keydown", this.prepareEvent, this); - this.el.un("keypress", this.relay, this); + disable: function() { + if (!this.disabled) { + if (Ext.isSafari2) { + // remove "keyup" event handler + this.el.un('keyup', this.stopKeyUp, this); } - this.disabled = true; - } - }, + + this.el.un(this.isKeydown()? 'keydown' : 'keypress', this.relay, this); + this.disabled = true; + } + }, /** * Convenience function for setting disabled/enabled by boolean.