]> git.sesse.net Git - kdenlive/commitdiff
jogshuttle: add support for shuttles on newer systems - part2
authorEd Rogalsky <ed.rogalsky@googlemail.com>
Fri, 28 Feb 2014 15:52:07 +0000 (16:52 +0100)
committerEd Rogalsky <ed.rogalsky@googlemail.com>
Fri, 28 Feb 2014 15:52:07 +0000 (16:52 +0100)
src/jogshuttle.cpp
src/jogshuttle.h
src/kdenlivesettingsdialog.cpp

index 44517d7745a839db137310c716bb256b90d3c618..73985e56e9a5ad9d3b1d5d5c170613346d5ea34c 100644 (file)
@@ -344,13 +344,38 @@ void JogShuttle::customEvent(QEvent* e)
     emit button(e->type() - KEY_EVENT_OFFSET);
 }
 
-QString JogShuttle::enumerateDevice(const QString &device)
+QString JogShuttle::enumerateDevice(const QStringdevice)
 {
     QDir canonDir(device);
-    //return QDir::canonicalPath(device);
     return canonDir.canonicalPath();
 }
 
+DeviceMap JogShuttle::enumerateDevices(const QString& devPath)
+{
+    DeviceMap devs;
+    QDir devDir(devPath);
+
+    if (!devDir.exists()) {
+        return devs;
+    }
+
+    QStringList fileList = devDir.entryList(QDir::System | QDir::Files);
+    foreach (const QString &fileName, fileList) {
+        QString devFullPath = devDir.absoluteFilePath(fileName);
+        QString fileLink = JogShuttle::enumerateDevice(devFullPath);
+        kDebug() << QString(" [%1] ").arg(fileName);
+        kDebug() << QString(" [%1] ").arg(fileLink);
+        char name[256] = "unknown";
+        int fd = KDE_open((char*)fileLink.toUtf8().data(), O_RDONLY);
+        if (fd >= 0 && ioctl(fd, EVIOCGNAME(sizeof(name)), name) >= 0) {
+            devs.insert(name, devFullPath);
+        }
+        ::close(fd);
+    }
+
+    return devs;
+}
+
 
 // #include "jogshuttle.moc"
 
index 1a337868fd2e7ab304da133d96e1dcecbedd41c7..d1cf185b3a22941499e303f74897920ce71a5844 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <QThread>
 #include <QObject>
+#include <QMap>
 
 #include <linux/input.h>
 
@@ -51,6 +52,8 @@ private:
     void key(unsigned short code, unsigned int value);
 };
 
+typedef QMap<QString, QString> DeviceMap;
+typedef QMap<QString, QString>::iterator DeviceMapIter;
 
 class JogShuttle: public QObject
 {
@@ -60,7 +63,8 @@ public:
     ~JogShuttle();
     void stopDevice();
     void initDevice(const QString &device);
-    static QString enumerateDevice(const QString &device);
+    static QString enumerateDevice(const QString& device);
+    static DeviceMap enumerateDevices(const QString& devPath);
 
 protected:
     virtual void customEvent(QEvent * e);
index 42e5813338897ecd55a89a2c52e288507b8b06d3..8e97b33d997c0e7065fa7dbc330f6570ab482d0c 100644 (file)
@@ -524,37 +524,25 @@ void KdenliveSettingsDialog::slotCheckShuttle(int state)
 #ifdef USE_JOGSHUTTLE
     m_configShuttle.config_group->setEnabled(state);
     if (m_configShuttle.shuttledevicelist->count() == 0) {
-        QString devDirStr = "/dev/input/by-id/";
+        QString devDirStr = "/dev/input/by-id";
         QDir devDir(devDirStr);
-        if (devDir.exists()) {
-            QStringList fileList = devDir.entryList(QDir::Files);
-            foreach (const QString &fileName, fileList) {
-                QString devFullPath(devDirStr + fileName);
-                QString fileLink = JogShuttle::enumerateDevice(devFullPath);
-                kDebug() << QString(" [%1] ").arg(fileName);
-                kDebug() << QString(" [%1] ").arg(fileLink);
-                char name[256] = "unknown";
-                int fd = KDE_open((char*)fileLink.toUtf8().data(), O_RDONLY);
-                if (fd >= 0 && ioctl(fd, EVIOCGNAME(sizeof(name)), name) >= 0) {
-                    m_configShuttle.shuttledevicelist->addItem(name, devFullPath);
-                }
-                ::close(fd);
-            }
-        } else {
-            // parse devices
-            QString baseName = "/dev/input/event";
-            int fd;
-            for (int i = 0; i < 30; ++i) {
-                QString filename = baseName + QString::number(i);
-                kDebug() << "/// CHECKING device: " << filename;
-
-                char name[256] = "unknown";
-                fd = KDE_open((char *) filename.toUtf8().data(), O_RDONLY);
-                if (fd >= 0 && ioctl(fd, EVIOCGNAME(sizeof(name)), name) >= 0) {
-                    m_configShuttle.shuttledevicelist->addItem(name, filename);
-                }
-                ::close(fd);
-            }
+        if (!devDir.exists()) {
+            devDirStr = "/dev/input";
+        }
+
+        DeviceMap devMap = JogShuttle::enumerateDevices(devDirStr);
+#if 0
+        if (!devMap.isEmpty()) {
+            m_configShuttle.shuttledevicelist->clear();
+        }
+#endif
+        DeviceMapIter iter = devMap.begin();
+        while (iter != devMap.end()) {
+            kDebug() << iter.key() << ": " << iter.value();
+            m_configShuttle.shuttledevicelist->addItem(
+                    iter.key(),
+                    iter.value());
+            ++iter;
         }
 
         if (KdenliveSettings::shuttledevice().isEmpty()) {