summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2006-10-14 11:09:01 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2006-10-14 11:09:01 +0200
commitf2c619568fbd6a1c62fd0d0ee9c2a0f1c5702860 (patch)
tree796b3a7e1b5779857f9eeeac6d29b834678b673b
parent3a9deab56cf59a7620cf6e46411bcb4dd3e79f87 (diff)
downloadvdr-f2c619568fbd6a1c62fd0d0ee9c2a0f1c5702860.tar.gz
vdr-f2c619568fbd6a1c62fd0d0ee9c2a0f1c5702860.tar.bz2
Fixed handling plugins from cRemote::PutMacro() and cRemote::CallPlugin()
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY2
-rw-r--r--remote.c20
-rw-r--r--remote.h7
4 files changed, 21 insertions, 10 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index d596ec06..87bbe365 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1832,6 +1832,8 @@ Petri Hintukainen <Petri.Hintukainen@hut.fi>
for pointing out that keys from expanded key macros should be put into the front of
the key queue to avoid problems if the queue is not empty at that time
for making cRemote::PutMacro() set a lock while it expands the macro
+ for pointing out that plugins from cRemote::PutMacro() and cRemote::CallPlugin()
+ need to be handled separately
Marcel Schaeben <mts280@gmx.de>
for his "Easy Input" patch
diff --git a/HISTORY b/HISTORY
index c5418d8a..4dbd43f3 100644
--- a/HISTORY
+++ b/HISTORY
@@ -4966,3 +4966,5 @@ Video Disk Recorder Revision History
- cKeyMacro now has an explicit counter for the number of keys it contains.
- cRemote::PutMacro() now sets a lock while it expands the macro (thanks to
Petri Hintukainen).
+- Fixed handling plugins from cRemote::PutMacro() and cRemote::CallPlugin()
+ (based on a patch from Petri Hintukainen).
diff --git a/remote.c b/remote.c
index 6f63fcd9..112f6c1b 100644
--- a/remote.c
+++ b/remote.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remote.c 1.53 2006/10/14 10:44:02 kls Exp $
+ * $Id: remote.c 1.54 2006/10/14 11:05:57 kls Exp $
*/
#include "remote.h"
@@ -29,7 +29,8 @@ cRemote *cRemote::learning = NULL;
char *cRemote::unknownCode = NULL;
cMutex cRemote::mutex;
cCondVar cRemote::keyPressed;
-const char *cRemote::plugin = NULL;
+const char *cRemote::keyMacroPlugin = NULL;
+const char *cRemote::callPlugin = NULL;
cRemote::cRemote(const char *Name)
{
@@ -105,7 +106,7 @@ bool cRemote::PutMacro(eKeys Key)
{
const cKeyMacro *km = KeyMacros.Get(Key);
if (km) {
- plugin = km->Plugin();
+ keyMacroPlugin = km->Plugin();
cMutexLock MutexLock(&mutex);
for (int i = km->NumKeys(); --i > 0; ) {
if (!Put(km->Macro()[i], true))
@@ -145,8 +146,8 @@ bool cRemote::Put(const char *Code, bool Repeat, bool Release)
bool cRemote::CallPlugin(const char *Plugin)
{
cMutexLock MutexLock(&mutex);
- if (!plugin) {
- plugin = Plugin;
+ if (!callPlugin) {
+ callPlugin = Plugin;
Put(k_Plugin);
return true;
}
@@ -156,8 +157,13 @@ bool cRemote::CallPlugin(const char *Plugin)
const char *cRemote::GetPlugin(void)
{
cMutexLock MutexLock(&mutex);
- const char *p = plugin;
- plugin = NULL;
+ const char *p = keyMacroPlugin;
+ if (p)
+ keyMacroPlugin = NULL;
+ else {
+ p = callPlugin;
+ callPlugin = NULL;
+ }
return p;
}
diff --git a/remote.h b/remote.h
index 3a2bb749..e5b80b2c 100644
--- a/remote.h
+++ b/remote.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remote.h 1.35 2006/04/17 08:59:48 kls Exp $
+ * $Id: remote.h 1.36 2006/10/14 10:56:50 kls Exp $
*/
#ifndef __REMOTE_H
@@ -28,7 +28,8 @@ private:
static char *unknownCode;
static cMutex mutex;
static cCondVar keyPressed;
- static const char *plugin;
+ static const char *keyMacroPlugin;
+ static const char *callPlugin;
char *name;
protected:
cRemote(const char *Name);
@@ -56,7 +57,7 @@ public:
///< false will be returned and the caller should try again later.
static const char *GetPlugin(void);
///< Returns the name of the plugin that was set with a previous
- ///< call to CallPlugin(). The internally stored pointer to the
+ ///< call to PutMacro() or CallPlugin(). The internally stored pointer to the
///< plugin name will be reset to NULL by this call.
static bool HasKeys(void);
static eKeys Get(int WaitMs = 1000, char **UnknownCode = NULL);