guard against the screensaver failing to be activated. don't disconnect from libCEC...
[deb_libcec.git] / src / LibCecTray / ui / CECTray.cs
index bf4e05a746af9a0282af435e19f08a4d289767eb..0b8d17c5636e0d81aa4fd9cffbfb53dfe21ce13c 100644 (file)
@@ -55,10 +55,12 @@ namespace LibCECTray.ui
       Text = Resources.app_name;
       InitializeComponent();
 
-      _sstimer.Interval = 1000;
+      _sstimer.Interval = 5000;
       _sstimer.Tick += ScreensaverActiveCheck;
       _sstimer.Enabled = false;
 
+      _lastScreensaverActivated = DateTime.Now;
+
       VisibleChanged += delegate
                        {
                          if (!Visible)
@@ -112,9 +114,17 @@ namespace LibCECTray.ui
       if (msg.Msg == WM_SYSCOMMAND && (msg.WParam.ToInt32() & 0xfff0) == SC_SCREENSAVE)
       {
         // there's no event for screensaver exit
-        _sstimer.Enabled = true;
-        OnSleep();
-        return;
+        if (!_sstimer.Enabled)
+        {
+          // guard against screensaver failing, and resulting in power up and down spam to the tv
+          TimeSpan diff = DateTime.Now - _lastScreensaverActivated;
+          if (diff.TotalSeconds > 60)
+          {
+            _sstimer.Enabled = true;
+            _lastScreensaverActivated = DateTime.Now;
+            Controller.CECActions.SendStandby(CecLogicalAddress.Broadcast);
+          }
+        }
       }
       else if (msg.Msg == WM_POWERBROADCAST)
       {
@@ -142,7 +152,7 @@ namespace LibCECTray.ui
                     //OnWake();
                     //return;
                   case 1:
-                    OnSleep();
+                    Controller.CECActions.SendStandby(CecLogicalAddress.Broadcast);
                     return;
                   default:
                     break;
@@ -164,7 +174,7 @@ namespace LibCECTray.ui
       if (!IsScreensaverActive())
       {
         _sstimer.Enabled = false;
-        OnWake();
+        Controller.CECActions.ActivateSource();
       }
     }
 
@@ -182,7 +192,9 @@ namespace LibCECTray.ui
 
     private void OnSleep()
     {
-      Controller.Close();
+      Controller.CECActions.SuppressUpdates = true;
+      AsyncDisconnect dc = new AsyncDisconnect(Controller);
+      (new Thread(dc.Process)).Start();
     }
 
     public override sealed string Text
@@ -201,9 +213,7 @@ namespace LibCECTray.ui
       Hide();
       if (disposing)
       {
-        Controller.CECActions.SuppressUpdates = true;
-        AsyncDisconnect dc = new AsyncDisconnect(Controller);
-        (new Thread(dc.Process)).Start();
+        OnSleep();
       }
       if (disposing && (components != null))
       {
@@ -299,7 +309,7 @@ namespace LibCECTray.ui
 
     private void BActivateSourceClick(object sender, EventArgs e)
     {
-      Controller.CECActions.ActivateSource(GetTargetDevice());
+      Controller.CECActions.SetStreamPath(GetTargetDevice());
     }
 
     private void CbCommandDestinationSelectedIndexChanged(object sender, EventArgs e)
@@ -614,6 +624,7 @@ namespace LibCECTray.ui
     }
 
     private System.Windows.Forms.Timer _sstimer = new System.Windows.Forms.Timer();
+    private DateTime _lastScreensaverActivated;
     #endregion
 
     private void AddNewApplicationToolStripMenuItemClick(object sender, EventArgs e)