rem:  if (isInvalid(this.getShortcut())) { 
add:  if (!(isValid(this.getShortcut()) || isValid(this.getKeyCode()))) { 
context: proto._matchesKeyEvent = function(e){  // pre check for configured shortcut  if (isInvalid(this.getShortcut())) {    return false;  };  // pre-check for check special keys  // we handle this here to omit to check this later again.  if ((this._shortcutParts.shift && !e.getShiftKey()) || (this._shortcutParts.ctrl && !e.getCtrlKey()) || (this._shortcutParts.alt && !e.getAltKey())) {    return false;  };  var vEventCode = e.getKeyCode();  var vSelfCode = this.getKeyCode();  /* ------------------------------------------    #1 : Check if keycode defined is the same         as the one from the event.  ------------------------------------------ */  // Check for key code  switch(vSelfCode)  {    case null:      break;    case vEventCode:      return true;  };  /* ------------------------------------------    #2 : Check if char from event key match         any of the parts in the defined         shortcut.         Good for ranges which match the         following: a-zA-Z0-9         For example this match something         like: Ctrl+Alt+G  ------------------------------------------ */  // build string from code to test matching  var c = String.fromCharCode(vEventCode).toLowerCase();  // if keycode string is in shortcuts  if (this._shortcutParts[c]) {    return true;  };  /* ------------------------------------------    #3 : If no keycode is defined, look if         any of the keys in our parts hash         match the pressed event key.         For example this match something         like: Ctrl+Alt+Entf  ------------------------------------------ */  // If no keycode is defined  if (vSelfCode == null)  {    for (var vPart in this._shortcutParts)    {      switch(vPart)      {        case "ctrl":        case "shift":        case "alt":        case "control":          break;        default:          if (vEventCode == QxKeyEvent.keys[vPart]) {            return true;          };      };    };  };  return false;};
meta: 1005	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/1005/3d91d94d27a0e715bc126e145031f5f4d0b9e9ca/QxCommand.js/buggy/qooxdoo/source/script/core/QxCommand.js