aboutsummaryrefslogtreecommitdiff
path: root/lib/driver/rc.cpp
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2009-12-29 13:15:58 +0100
committerghost <andreas.monzner@multimedia-labs.de>2009-12-29 13:15:58 +0100
commit3bc4feea6206761d48e7ead73dfd32721bf8e259 (patch)
tree11b760129732e25cd3c35f5e86e00ac897b7d5ee /lib/driver/rc.cpp
parentd36394c5c1659a13392cadab32a70105cabdb759 (diff)
parent2b47f0d63cb4d1bfb1979bc777795a834763db9a (diff)
downloadenigma2-3bc4feea6206761d48e7ead73dfd32721bf8e259.tar.gz
enigma2-3bc4feea6206761d48e7ead73dfd32721bf8e259.zip
Merge branch 'bug_251_open_rc_devices_exclusive'
Diffstat (limited to 'lib/driver/rc.cpp')
-rw-r--r--lib/driver/rc.cpp30
1 files changed, 17 insertions, 13 deletions
diff --git a/lib/driver/rc.cpp b/lib/driver/rc.cpp
index c7acd113..c56fde44 100644
--- a/lib/driver/rc.cpp
+++ b/lib/driver/rc.cpp
@@ -81,7 +81,6 @@ eRCShortDriver::eRCShortDriver(const char *filename): eRCDriver(eRCInput::getIns
{
sn=eSocketNotifier::create(eApp, handle, eSocketNotifier::Read);
CONNECT(sn->activated, eRCShortDriver::keyPressed);
- eRCInput::getInstance()->setFile(handle);
}
}
@@ -115,7 +114,6 @@ eRCInputEventDriver::eRCInputEventDriver(const char *filename): eRCDriver(eRCInp
{
sn=eSocketNotifier::create(eApp, handle, eSocketNotifier::Read);
CONNECT(sn->activated, eRCInputEventDriver::keyPressed);
- eRCInput::getInstance()->setFile(handle);
}
}
@@ -127,6 +125,16 @@ std::string eRCInputEventDriver::getDeviceName()
return name;
}
+void eRCInputEventDriver::setExclusive(bool b)
+{
+ if (handle >= 0)
+ {
+ int grab = b;
+ if (::ioctl(handle, EVIOCGRAB, grab) < 0)
+ perror("EVIOCGRAB");
+ }
+}
+
eRCInputEventDriver::~eRCInputEventDriver()
{
if (handle>=0)
@@ -165,7 +173,6 @@ eRCInput::eRCInput()
{
ASSERT( !instance);
instance=this;
- handle = -1;
locked = 0;
keyboardMode = kmNone;
}
@@ -183,21 +190,18 @@ bool eRCInput::open()
return false;
}
-int eRCInput::lock()
+void eRCInput::lock()
{
locked=1;
- return handle;
+ for (std::map<std::string,eRCDevice*>::iterator i=devices.begin(); i != devices.end(); ++i)
+ i->second->setExclusive(false);
}
void eRCInput::unlock()
{
- if (locked)
- locked=0;
-}
-
-void eRCInput::setFile(int newh)
-{
- handle=newh;
+ locked=0;
+ for (std::map<std::string,eRCDevice*>::iterator i=devices.begin(); i != devices.end(); ++i)
+ i->second->setExclusive(true);
}
void eRCInput::addDevice(const std::string &id, eRCDevice *dev)
@@ -216,7 +220,7 @@ eRCDevice *eRCInput::getDevice(const std::string &id)
if (i == devices.end())
{
eDebug("failed, possible choices are:");
- for (std::map<std::string,eRCDevice*>::iterator i=devices.begin(); i != devices.end(); ++i)
+ for (std::map<std::string,eRCDevice*>::iterator i=devices.begin(); i != devices.end(); ++i)
eDebug("%s", i->first.c_str());
return 0;
}