diff options
Diffstat (limited to 'services/inputflinger/EventHub.cpp')
| -rw-r--r-- | services/inputflinger/EventHub.cpp | 30 | 
1 files changed, 22 insertions, 8 deletions
| diff --git a/services/inputflinger/EventHub.cpp b/services/inputflinger/EventHub.cpp index 6b60c7cf71..5859606284 100644 --- a/services/inputflinger/EventHub.cpp +++ b/services/inputflinger/EventHub.cpp @@ -438,10 +438,12 @@ bool EventHub::markSupportedKeyCodes(int32_t deviceId, size_t numCodes,      return false;  } -status_t EventHub::mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode, -        int32_t* outKeycode, uint32_t* outFlags) const { +status_t EventHub::mapKey(int32_t deviceId, +        int32_t scanCode, int32_t usageCode, int32_t metaState, +        int32_t* outKeycode, int32_t* outMetaState, uint32_t* outFlags) const {      AutoMutex _l(mLock);      Device* device = getDeviceLocked(deviceId); +    status_t status = NAME_NOT_FOUND;      if (device) {          // Check the key character map first. @@ -449,22 +451,34 @@ status_t EventHub::mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode,          if (kcm != NULL) {              if (!kcm->mapKey(scanCode, usageCode, outKeycode)) {                  *outFlags = 0; -                return NO_ERROR; +                status = NO_ERROR;              }          }          // Check the key layout next. -        if (device->keyMap.haveKeyLayout()) { +        if (status != NO_ERROR && device->keyMap.haveKeyLayout()) {              if (!device->keyMap.keyLayoutMap->mapKey(                      scanCode, usageCode, outKeycode, outFlags)) { -                return NO_ERROR; +                status = NO_ERROR; +            } +        } + +        if (status == NO_ERROR) { +            if (kcm != NULL) { +                kcm->tryRemapKey(*outKeycode, metaState, outKeycode, outMetaState); +            } else { +                *outMetaState = metaState;              }          }      } -    *outKeycode = 0; -    *outFlags = 0; -    return NAME_NOT_FOUND; +    if (status != NO_ERROR) { +        *outKeycode = 0; +        *outFlags = 0; +        *outMetaState = metaState; +    } + +    return status;  }  status_t EventHub::mapAxis(int32_t deviceId, int32_t scanCode, AxisInfo* outAxisInfo) const { |