diff --git a/addons/web/static/src/js/framework/barcode_events.js b/addons/web/static/src/js/framework/barcode_events.js index 5956eee08ee..d632c9e5cd7 100644 --- a/addons/web/static/src/js/framework/barcode_events.js +++ b/addons/web/static/src/js/framework/barcode_events.js @@ -73,6 +73,20 @@ odoo.define('web.BarcodeEvents', function(require) { return $(element).is('input,textarea,[contenteditable="true"]'); }, + // This checks that a keypress event is either ESC, TAB or an + // arrow key. This is Firefox specific, in Chrom{e,ium} + // keypress events are not fired for these types of keys, only + // keyup/keydown. + is_special_key: function(e) { + if (e.key === "ArrowLeft" || e.key === "ArrowRight" || + e.key === "ArrowUp" || e.key === "ArrowDown" || + e.key === "Escape" || e.key === "Tab") { + return true; + } else { + return false; + } + }, + // The keydown and keyup handlers are here to disallow key // repeat. When preventDefault() is called on a keydown event // the keypress that normally follows is cancelled. @@ -89,21 +103,19 @@ odoo.define('web.BarcodeEvents', function(require) { }, handler: function(e){ - if (! e.dispatched_by_barcode_reader) { - // We only stop events targeting body (meaning nothing is - // focused). We do not stop events targeting other elements - // because we have no way of redispatching 'genuine' key events - // that trigger native event handlers of elements. So this means - // that our fake events will not appear in eg. an - // element. The addition of the contentEditable attribute in HTML5 - // means that this is not only limited to ,