- m_iCurrentButton = key.duration > 0 || key.keycode > CEC_USER_CONTROL_CODE_MAX ?
- CEC_USER_CONTROL_CODE_UNKNOWN :
- key.keycode;
- m_buttontime = key.duration > 0 ? 0 : GetTimeMs();
+ if (key.duration > 0 || key.keycode > CEC_USER_CONTROL_CODE_MAX)
+ {
+ transmitKey.keycode = CEC_USER_CONTROL_CODE_UNKNOWN;
+ }
+ else if (m_iCurrentButton == COMBO_KEY)
+ {
+ // stop + ok -> exit
+ if (key.keycode == CEC_USER_CONTROL_CODE_SELECT)
+ transmitKey.keycode = CEC_USER_CONTROL_CODE_EXIT;
+ // stop + pause -> root menu
+ else if (key.keycode == CEC_USER_CONTROL_CODE_ROOT_MENU)
+ transmitKey.keycode = CEC_USER_CONTROL_CODE_ROOT_MENU;
+ // stop + play -> dot (which is handled as context menu in xbmc)
+ else if (key.keycode == CEC_USER_CONTROL_CODE_PLAY)
+ transmitKey.keycode = CEC_USER_CONTROL_CODE_DOT;
+ // default, send back the previous key
+ else
+ AddKey(true);
+ }
+
+ m_iCurrentButton = transmitKey.keycode;
+ m_buttontime = m_iCurrentButton == CEC_USER_CONTROL_CODE_UNKNOWN || key.duration > 0 ? 0 : GetTimeMs();