Merge pull request #112 from linuxstb/master
[deb_libcec.git] / src / LibCecTray / controller / applications / ApplicationController.cs
index 6234b4cf991904538ba347f6947c8b3a3d410d35..7d0b23d3dc46fca2dc149f7725117a1b53eb4983 100644 (file)
@@ -42,6 +42,8 @@ using Timer = System.Timers.Timer;
 
 namespace LibCECTray.controller.applications
 {
+  public delegate void OnApplicationRunningChanged(bool running);
+
   /// <summary>
   /// Controls an application on the PC: send key presses, open the application, close it, etc.
   /// </summary>
@@ -190,12 +192,24 @@ namespace LibCECTray.controller.applications
     public virtual void Initialise()
     {
       Timer timer = new Timer { Interval = 1000, AutoReset = true };
-      timer.Elapsed += delegate { UiControl.SetStartButtonEnabled(true); };
+      timer.Elapsed += delegate { CheckApplicationEnabled(); };
       timer.Start();
 
       if (AutoStartApplication.Value)
         Start(false);
     }
+
+    public event OnApplicationRunningChanged ApplicationRunningChanged;
+
+    private void CheckApplicationEnabled()
+    {
+      var isRunning = IsRunning();
+      if (isRunning != _applicationRunning && ApplicationRunningChanged != null)
+        ApplicationRunningChanged(isRunning);
+
+      _applicationRunning = isRunning;
+      UiControl.SetStartButtonEnabled(!isRunning && !SuppressApplicationStart);
+    }
     #endregion
 
     #region Send input to the application
@@ -285,7 +299,7 @@ namespace LibCECTray.controller.applications
       {
         if (!Settings.ContainsKey(ProcessName + "_autostart"))
         {
-          CECSettingBool setting = new CECSettingBool(ProcessName + "_autostart", "Autostart application", true, null);
+          CECSettingBool setting = new CECSettingBool(ProcessName + "_autostart", "Autostart application", false, null);
           Settings.Load(setting);
           Settings[ProcessName + "_autostart"] = setting;
         }
@@ -353,18 +367,7 @@ namespace LibCECTray.controller.applications
     private CecButtonConfig _buttonConfig;
     public CecButtonConfig ButtonConfig
     {
-      get
-      {
-        if (_buttonConfig == null)
-        {
-          _buttonConfig = new CecButtonConfig(this);
-          foreach (CecUserControlCode key in Enum.GetValues(typeof(CecUserControlCode)))
-            _buttonConfig.Add(new CecButtonConfigItem(this, (new CecKeypress { Keycode = key })));
-
-          _buttonConfig.Load();
-        }
-        return _buttonConfig;
-      }
+      get { return _buttonConfig ?? (_buttonConfig = new CecButtonConfig(this)); }
     }
 
     public CECSettings Settings;
@@ -388,6 +391,9 @@ namespace LibCECTray.controller.applications
         return !IsInternal;
       }
     }
+
+    private bool _applicationRunning;
+
     #endregion
   }
 }