- autodetect available input devices
authorFelix Domke <tmbinc@elitedvb.net>
Mon, 16 May 2005 15:17:53 +0000 (15:17 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Mon, 16 May 2005 15:17:53 +0000 (15:17 +0000)
 - fix flag support
 - fix keymap: listbox moveUp/moveDown

keymap.xml
keymapparser.py
lib/actions/action.cpp
lib/driver/rcinput.cpp

index 7b6e5fde25bc9286e914b48dfb777970aa80c6c8..d506ead424596dc8ef152600cac544c9f3e73949 100644 (file)
@@ -4,8 +4,8 @@
                        <key id="a" mapto="up" flags="mr" />
                        <key id="b" mapto="down" flags="mr" />
                </device>
-               <key id="KEY_UP" mapto="up" flags="mr" />
-               <key id="KEY_DOWN" mapto="down" flags="mr" />
+               <key id="KEY_UP" mapto="moveUp" flags="mr" />
+               <key id="KEY_DOWN" mapto="moveDown" flags="mr" />
                <key id="1" mapto="moveUp" flags="mr" />
                <key id="2" mapto="moveDown" flags="mr" />
        </map>
index 032805b34b595763f082137205ee58fa1d0b679c..c7bbce1fbfeadb434ed813f524a6c2488748315e 100644 (file)
@@ -38,7 +38,7 @@ def readKeymap():
                                id = x.getAttribute("id")
                                flags = x.getAttribute("flags")
                                
-                               flag_ascii_to_id = lambda x: {'m':1,'r':2,'b':4}[x]
+                               flag_ascii_to_id = lambda x: {'m':1,'b':2,'r':4}[x]
                                
 #                              try:
                                flags = sum(map(flag_ascii_to_id, flags))
@@ -66,7 +66,7 @@ def readKeymap():
                                                raise "key id '" + str(id) + "' is illegal"
 
                                print context + "::" + mapto + " -> " + device + "." + hex(keyid)
-                               p.bindKey(device, keyid, 7, context, mapto)
+                               p.bindKey(device, keyid, flags, context, mapto)
                
                parseKeys("generic", cmap)
                
index c538bd480f41c050fabe6675f62dd375c9c559b2..26eba7a488d4f3ef5d184bd8851c7d404499d4a8 100644 (file)
@@ -143,7 +143,7 @@ void eActionMap::keyPressed(int device, int key, int flags)
                                if (
                                        // (k->second.m_device == m_device) &&
                                        (k->second.m_key == key) &&
-                                       ((k->second.m_flags & flags)==flags))
+                                       (k->second.m_flags & (1<<flags)))
                                {
                                        if (i->second.m_widget->event(eWidget::evtAction, 0, (void*)k->second.m_action))
                                                return;
@@ -160,7 +160,7 @@ void eActionMap::keyPressed(int device, int key, int flags)
                                if (
                                        // (k->second.m_device == m_device) &&
                                        (k->second.m_key == key) &&
-                                       ((k->second.m_flags & flags)==flags))
+                                       (k->second.m_flags & (1<<flags)))
                                {
                                        PyObject *pArgs = PyTuple_New(2);
                                        PyTuple_SetItem(pArgs, 0, PyString_FromString(k->first.c_str()));
index 94ce3ebe911465f60ee65483087307648c8061cf..58cc9afc888357ef0767d6312dcfd44279dd5497 100644 (file)
@@ -117,11 +117,36 @@ int eRCDeviceInputDev::getKeyCompatibleCode(const eRCKey &key) const
 
 class eInputDeviceInit
 {
-       eRCInputEventDriver driver;
-       eRCDeviceInputDev deviceInputDev;
+       ePtrList<eRCInputEventDriver> m_drivers;
+       ePtrList<eRCDeviceInputDev> m_devices;
 public:
-       eInputDeviceInit(): driver("/dev/input/event0"), deviceInputDev(&driver)
+       eInputDeviceInit()
        {
+               int i = 0;
+               while (1)
+               {
+                       struct stat s;
+                       char filename[128];
+                       sprintf(filename, "/dev/input/event%d", i);
+                       if (stat(filename, &s))
+                               break;
+                       eRCInputEventDriver *p;
+                       m_drivers.push_back(p = new eRCInputEventDriver(filename));
+                       m_devices.push_back(new eRCDeviceInputDev(p));
+                       ++i;
+               }
+               eDebug("Found %d input devices!", i);
+       }
+       
+       ~eInputDeviceInit()
+       {
+               while (m_drivers.size())
+               {
+                       delete m_devices.back();
+                       m_devices.pop_back();
+                       delete m_drivers.back();
+                       m_drivers.pop_back();
+               }
        }
 };