mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Fixed handling plugins from cRemote::PutMacro() and cRemote::CallPlugin()
This commit is contained in:
parent
3a9deab56c
commit
f2c619568f
@ -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
|
||||
|
2
HISTORY
2
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).
|
||||
|
20
remote.c
20
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;
|
||||
}
|
||||
|
||||
|
7
remote.h
7
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);
|
||||
|
Loading…
Reference in New Issue
Block a user