support for 'long keypresses' ('l' in keymap.xml flags)
authorFelix Domke <tmbinc@elitedvb.net>
Tue, 26 Jun 2007 23:02:31 +0000 (23:02 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Tue, 26 Jun 2007 23:02:31 +0000 (23:02 +0000)
keymapparser.py
main/enigma.cpp

index c6d5306..21e9981 100644 (file)
@@ -33,7 +33,7 @@ def readKeymap(filename = "/usr/share/enigma2/keymap.xml"):
                                id = x.getAttribute("id")
                                flags = x.getAttribute("flags")
 
-                               flag_ascii_to_id = lambda x: {'m':1,'b':2,'r':4}[x]
+                               flag_ascii_to_id = lambda x: {'m':1,'b':2,'r':4,'l':8}[x]
 
 #                              try:
                                flags = sum(map(flag_ascii_to_id, flags))
index eb0a184..19e6675 100644 (file)
@@ -58,8 +58,26 @@ int getPrevAsciiCode()
 
 void keyEvent(const eRCKey &key)
 {
+       static eRCKey last(0, 0, 0);
+       static int num_repeat;
+
        ePtr<eActionMap> ptr;
        eActionMap::getInstance(ptr);
+
+       if ((key.code == last.code) && (key.producer == last.producer) && key.flags & eRCKey::flagRepeat)
+               num_repeat++;
+       else
+       {
+               num_repeat = 0;
+               last = key;
+       }
+
+       if (num_repeat == 4)
+       {
+               ptr->keyPressed(key.producer->getIdentifier(), key.code, eRCKey::flagLong);
+               num_repeat++;
+       }
+
        if (key.flags & eRCKey::flagAscii)
        {
                prev_ascii_code = key.code;