summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/framework
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/framework')
-rw-r--r--addons/web/static/src/js/framework/barcode_events.js29
1 files changed, 17 insertions, 12 deletions
diff --git a/addons/web/static/src/js/framework/barcode_events.js b/addons/web/static/src/js/framework/barcode_events.js
index 6aa5327a768..5956eee08ee 100644
--- a/addons/web/static/src/js/framework/barcode_events.js
+++ b/addons/web/static/src/js/framework/barcode_events.js
@@ -6,7 +6,7 @@ odoo.define('web.BarcodeEvents', function(require) {
return core.Class.extend(mixins.PropertiesMixin, {
timeout: null,
- key_released: true,
+ key_pressed: {},
buffered_key_events: [],
init: function(parent) {
@@ -73,20 +73,23 @@ odoo.define('web.BarcodeEvents', function(require) {
return $(element).is('input,textarea,[contenteditable="true"]');
},
+ // 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.
+ keydown_handler: function(e){
+ if (this.key_pressed[e.which]) {
+ e.preventDefault();
+ } else {
+ this.key_pressed[e.which] = true;
+ }
+ },
+
keyup_handler: function(e){
- this.key_released = true;
+ this.key_pressed[e.which] = false;
},
handler: function(e){
if (! e.dispatched_by_barcode_reader) {
- if (! this.key_released) { // don't allow key repeat
- e.preventDefault();
- e.stopImmediatePropagation();
- return;
- }
-
- this.key_released = false;
-
// 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
@@ -106,13 +109,15 @@ odoo.define('web.BarcodeEvents', function(require) {
},
start: function(){
- document.body.addEventListener('keypress', this.handler.bind(this), true);
+ document.body.addEventListener('keydown', this.keydown_handler.bind(this), true);
document.body.addEventListener('keyup', this.keyup_handler.bind(this), true);
+ document.body.addEventListener('keypress', this.handler.bind(this), true);
},
stop: function(){
- document.body.removeEventListener('keypress', this.handler.bind(this), true);
+ document.body.removeEventListener('keydown', this.keydown_handler.bind(this), true);
document.body.removeEventListener('keyup', this.keyup_handler.bind(this), true);
+ document.body.removeEventListener('keypress', this.handler.bind(this), true);
},
});
});