From 8fad0fe870edcd90e4788d8b56da80ab29c9e016 Mon Sep 17 00:00:00 2001 From: Lars Op den Kamp Date: Fri, 13 Dec 2013 15:17:41 +0100 Subject: [PATCH] added ActivateSource action to cectray --- src/LibCecTray/LibCECTray.csproj | 1 + src/LibCecTray/controller/Actions.cs | 12 +++- .../controller/actions/ActivateSource.cs | 56 +++++++++++++++++++ src/LibCecTray/ui/CECTray.cs | 22 ++++---- src/LibCecTray/ui/DeviceInformation.cs | 2 +- 5 files changed, 81 insertions(+), 12 deletions(-) create mode 100644 src/LibCecTray/controller/actions/ActivateSource.cs diff --git a/src/LibCecTray/LibCECTray.csproj b/src/LibCecTray/LibCECTray.csproj index bfa1d9f..86cc6de 100644 --- a/src/LibCecTray/LibCECTray.csproj +++ b/src/LibCecTray/LibCECTray.csproj @@ -78,6 +78,7 @@ + diff --git a/src/LibCecTray/controller/Actions.cs b/src/LibCecTray/controller/Actions.cs index 2970ede..355f94e 100644 --- a/src/LibCecTray/controller/Actions.cs +++ b/src/LibCecTray/controller/Actions.cs @@ -208,7 +208,7 @@ namespace LibCECTray.controller /// Activate the source at the given logical address. /// /// The logical address of the device to activate - public void ActivateSource(CecLogicalAddress address) + public void SetStreamPath(CecLogicalAddress address) { if (SuppressUpdates || _activeProcess != null) return; @@ -218,6 +218,16 @@ namespace LibCECTray.controller (new Thread(_activeProcess.Run)).Start(); } + public void ActivateSource() + { + if (SuppressUpdates || _activeProcess != null) return; + + _controller.SetControlsEnabled(false); + _activeProcess = new ActivateSource(_controller.Lib); + _activeProcess.EventHandler += ProcessEventHandler; + (new Thread(_activeProcess.Run)).Start(); + } + /// /// Send a standby command to the device at the given logical address /// diff --git a/src/LibCecTray/controller/actions/ActivateSource.cs b/src/LibCecTray/controller/actions/ActivateSource.cs new file mode 100644 index 0000000..44d2d50 --- /dev/null +++ b/src/LibCecTray/controller/actions/ActivateSource.cs @@ -0,0 +1,56 @@ +/* + * This file is part of the libCEC(R) library. + * + * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. + * libCEC(R) is an original work, containing original code. + * + * libCEC(R) is a trademark of Pulse-Eight Limited. + * + * This program is dual-licensed; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * + * Alternatively, you can license this library under a commercial license, + * please contact Pulse-Eight Licensing for more information. + * + * For more information contact: + * Pulse-Eight Licensing + * http://www.pulse-eight.com/ + * http://www.pulse-eight.net/ + */ + +using CecSharp; +using LibCECTray.Properties; + +namespace LibCECTray.controller.actions +{ + class ActivateSource : UpdateProcess + { + public ActivateSource(LibCecSharp lib) + { + _lib = lib; + } + + public override void Process() + { + SendEvent(UpdateEventType.StatusText, Resources.action_activating_source); + SendEvent(UpdateEventType.ProgressBar, 50); + + var bResult = _lib.SetActiveSource(CecDeviceType.Reserved); + SendEvent(UpdateEventType.ProgressBar, 100); + } + + private readonly LibCecSharp _lib; + } +} diff --git a/src/LibCecTray/ui/CECTray.cs b/src/LibCecTray/ui/CECTray.cs index bf4e05a..3f7c094 100644 --- a/src/LibCecTray/ui/CECTray.cs +++ b/src/LibCecTray/ui/CECTray.cs @@ -55,7 +55,7 @@ namespace LibCECTray.ui Text = Resources.app_name; InitializeComponent(); - _sstimer.Interval = 1000; + _sstimer.Interval = 5000; _sstimer.Tick += ScreensaverActiveCheck; _sstimer.Enabled = false; @@ -112,9 +112,11 @@ 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) + { + _sstimer.Enabled = true; + Controller.CECActions.SendStandby(CecLogicalAddress.Broadcast); + } } else if (msg.Msg == WM_POWERBROADCAST) { @@ -164,7 +166,7 @@ namespace LibCECTray.ui if (!IsScreensaverActive()) { _sstimer.Enabled = false; - OnWake(); + Controller.CECActions.ActivateSource(); } } @@ -182,7 +184,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 +205,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 +301,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) diff --git a/src/LibCecTray/ui/DeviceInformation.cs b/src/LibCecTray/ui/DeviceInformation.cs index 581a417..1feed3b 100644 --- a/src/LibCecTray/ui/DeviceInformation.cs +++ b/src/LibCecTray/ui/DeviceInformation.cs @@ -72,7 +72,7 @@ namespace LibCECTray.ui { SetControlVisible(lInactiveSource, false); SetControlVisible(lActiveSource, true); - _controller.CECActions.ActivateSource(Address); + _controller.CECActions.SetStreamPath(Address); } private void LStandbyLinkClicked(object sender, LinkLabelLinkClickedEventArgs e) -- 2.34.1