diff options
| author | ghost <andreas.monzner@multimedia-labs.de> | 2009-12-29 13:15:58 +0100 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2009-12-29 13:15:58 +0100 |
| commit | 3bc4feea6206761d48e7ead73dfd32721bf8e259 (patch) | |
| tree | 11b760129732e25cd3c35f5e86e00ac897b7d5ee /lib/driver/rc.cpp | |
| parent | d36394c5c1659a13392cadab32a70105cabdb759 (diff) | |
| parent | 2b47f0d63cb4d1bfb1979bc777795a834763db9a (diff) | |
| download | enigma2-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.cpp | 30 |
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; } |
