ソースを参照

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;