소스 검색

InputCEC : fix some keys burst once pressed.

A few keys were only sending keydown events, causing some keypress burst issue.
This has been fixed sending the up event right after the down one, as libcec will not provide up & down events for these.
longchair 9 년 전
부모
커밋
4114c62ca0
1개의 변경된 파일13개의 추가작업 그리고 4개의 파일을 삭제
  1. 13 4
      src/input/InputCEC.cpp

+ 13 - 4
src/input/InputCEC.cpp

@@ -257,7 +257,7 @@ QString InputCECWorker::getCommandParamsList(cec_command command)
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 int InputCECWorker::CecCommand(void *cbParam, const cec_command command)
 {
-  QString cmdString;
+  QString cmdString, keyCode;
   auto cec = static_cast<InputCECWorker*>(cbParam);
   Q_ASSERT(cec);
 
@@ -270,6 +270,7 @@ int InputCECWorker::CecCommand(void *cbParam, const cec_command command)
   {
     case CEC_OPCODE_PLAY:
       cec->sendReceivedInput(CEC_INPUT_NAME, INPUT_KEY_PLAY);
+      cec->sendReceivedInput(CEC_INPUT_NAME, INPUT_KEY_PLAY, false);
       break;
 
     case CEC_OPCODE_DECK_CONTROL:
@@ -278,20 +279,28 @@ int InputCECWorker::CecCommand(void *cbParam, const cec_command command)
         switch(command.parameters[0])
         {
           case CEC_DECK_CONTROL_MODE_SKIP_FORWARD_WIND:
-            cec->sendReceivedInput(CEC_INPUT_NAME, INPUT_KEY_SEEKFWD);
+            keyCode = INPUT_KEY_SEEKFWD;
             break;
 
           case CEC_DECK_CONTROL_MODE_SKIP_REVERSE_REWIND:
-            cec->sendReceivedInput(CEC_INPUT_NAME, INPUT_KEY_SEEKBCK);
+            keyCode = INPUT_KEY_SEEKBCK;
             break;
 
           case CEC_DECK_CONTROL_MODE_STOP:
-            cec->sendReceivedInput(CEC_INPUT_NAME, INPUT_KEY_STOP);
+            keyCode = INPUT_KEY_STOP;
             break;
 
           default:
             break;
         }
+
+        if (!keyCode.isEmpty())
+        {
+          // We don't have up & down events for those special keys
+          // so we just fake them
+          cec->sendReceivedInput(CEC_INPUT_NAME, keyCode);
+          cec->sendReceivedInput(CEC_INPUT_NAME, keyCode, false);
+        }
       }
       break;