added handler for philips. ignore repeating 'display information' keypresses from...
[deb_libcec.git] / src / lib / CECProcessor.cpp
index 73c921d8120f68c0ffff4f440e6e66e2e0443b07..399e065daa81f9872e4d95d3efb54e2773c49d05 100644 (file)
@@ -260,6 +260,12 @@ bool CCECProcessor::ActivateSource(uint16_t iStreamPath)
   return bReturn;
 }
 
+void CCECProcessor::SetActiveSource(bool bSetTo, bool bClientUnregistered)
+{
+  if (m_communication)
+    m_communication->SetActiveSource(bSetTo, bClientUnregistered);
+}
+
 void CCECProcessor::SetStandardLineTimeout(uint8_t iTimeout)
 {
   CLockObject lock(m_mutex);
@@ -345,7 +351,7 @@ cec_logical_address CCECProcessor::GetActiveSource(bool bRequestActiveSource /*
   if (activeSource)
     return activeSource->GetLogicalAddress();
 
-  if (bRequestActiveSource)
+  if (bRequestActiveSource && m_busDevices->GetActiveSourceAddress() == CEC_INVALID_PHYSICAL_ADDRESS)
   {
     // request the active source from the bus
     CCECBusDevice *primary = GetPrimaryDevice();
@@ -737,6 +743,7 @@ bool CCECProcessor::RegisterClient(CCECClient *client)
 
   // ensure that controlled mode is enabled
   m_communication->SetControlledMode(true);
+  m_bMonitor = false;
 
   // source logical address for requests
   cec_logical_address sourceAddress(CECDEVICE_UNREGISTERED);
@@ -863,7 +870,7 @@ bool CCECProcessor::UnregisterClient(CCECClient *client)
         m_clients.erase(entry);
 
       // reset the device status
-      (*it)->ResetDeviceStatus();
+      (*it)->ResetDeviceStatus(true);
     }
   }