From 1e53a13e510d79fb11fb35d64707dbec5b50eb61 Mon Sep 17 00:00:00 2001
From: Moritz Bunkus <m.bunkus@linet-services.de>
Date: Fri, 20 Jan 2017 12:40:33 +0100
Subject: [PATCH] =?utf8?q?CustomerVendorPicker:=20Taskendr=C3=BCcke=20auf?=
 =?utf8?q?=20Shift,=20Ctrl=20&=20Alt=20ignorieren?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Andernfalls wird schon beim Drücken eines der Modifier eine Suche
ausgelöst. Das kann besonders nervig sein, wenn man den Focus vom
Browser wegnimmt:

• Alt+Tab drücken, um zum anderen Fenster zu wechseln
• Schon bei Alt wird eine Suche ausgelöst.
• Durch den Focus-Verlust wird ein Blur-Event ausgelöst.
• Und schon ist der interne Zustand ungültig, und das Element wird rot
  dargestellt.

Analoges passiert, wenn man z.B. mit Ctrl+F2 zu einem anderen virtuellen
Desktop wechselt.

Noch schlimmer ist, dass bei Shift+Tab ebenfalls zuerst eine Suche
ausgelöst und anschließend verhindert wird, dass der Focus das Element
verlässt.
---
 js/autocomplete_customer.js | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/js/autocomplete_customer.js b/js/autocomplete_customer.js
index 8e6c236f7..8f8771d86 100644
--- a/js/autocomplete_customer.js
+++ b/js/autocomplete_customer.js
@@ -14,6 +14,9 @@ namespace('kivi', function(k){
       RIGHT:  39,
       PAGE_UP: 33,
       PAGE_DOWN: 34,
+      SHIFT:     16,
+      CTRL:      17,
+      ALT:       18,
     };
     var CLASSES = {
       PICKED:       'customer-vendor-picker-picked',
@@ -132,6 +135,10 @@ namespace('kivi', function(k){
       select: function(event, ui) {
         set_item(ui.item);
       },
+      search: function(event, ui) {
+        if ((event.which == KEY.SHIFT) || (event.which == KEY.CTRL) || (event.which == KEY.ALT))
+          event.preventDefault();
+      }
     });
     /*  In case users are impatient and want to skip ahead:
      *  Capture <enter> key events and check if it's a unique hit.
@@ -164,7 +171,7 @@ namespace('kivi', function(k){
           });
           return false;
         }
-      } else {
+      } else if ((event.which != KEY.SHIFT) && (event.which != KEY.CTRL) && (event.which != KEY.ALT)) {
         state = STATES.UNDEFINED;
       }
     });
-- 
2.20.1