sn=0;
} else
{
- sn=new eSocketNotifier(eApp, handle, eSocketNotifier::Read);
+ sn=eSocketNotifier::create(eApp, handle, eSocketNotifier::Read);
CONNECT(sn->activated, eRCConsoleDriver::keyPressed);
eRCInput::getInstance()->setFile(handle);
}
tcsetattr(handle,TCSANOW, &ot);
if (handle>=0)
close(handle);
- if (sn)
- delete sn;
}
void eRCConsoleDriver::keyPressed(int)
{
- char data[16];
- char *d = data;
+ unsigned char data[16];
+ unsigned char *d = data;
int num = read(handle, data, 16);
int code=-1;
int km = input->getKeyboardMode();
+ if (km == eRCInput::kmNone)
+ return;
+
while (num--)
{
-// eDebug("console code %02x\n", *d++);
+// eDebug("console code %08x\n", *d);
if (km == eRCInput::kmAll)
code = *d++;
else
if (code < 32) /* control characters */
code = -1;
- if (code == 0x7F) /* delete */
- code = -1;
+ else switch(code)
+ {
+ case 0x7E: // mute, einfg, entf
+ case 0x7F: // backspace
+ code = -1;
+ default:
+ break;
+ }
}
if (code != -1)
for (std::list<eRCDevice*>::iterator i(listeners.begin()); i!=listeners.end(); ++i)
{
// eDebug("ascii %08x", code);
- (*i)->handleCode(/*0x8000|*/code);
+ (*i)->handleCode(code);
}
}
}
-void eRCConsole::handleCode(int code)
+void eRCConsole::handleCode(long code)
{
input->keyPressed(eRCKey(this, code, eRCKey::flagAscii));
}