Pārlūkot izejas kodu

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 gadi atpakaļ
vecāks
revīzija
4114c62ca0
1 mainītis faili ar 13 papildinājumiem un 4 dzēšanām
  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;