]> git.sesse.net Git - kdenlive/blobdiff - src/jogshuttle.cpp
jogshuttle: add support for shuttles on newer systems - part2
[kdenlive] / src / jogshuttle.cpp
index b6095afd823d4df4b37fcc5c17361500049a9516..73985e56e9a5ad9d3b1d5d5c170613346d5ea34c 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <QApplication>
 #include <QEvent>
+#include <QDir>
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -343,6 +344,37 @@ void JogShuttle::customEvent(QEvent* e)
     emit button(e->type() - KEY_EVENT_OFFSET);
 }
 
+QString JogShuttle::enumerateDevice(const QString& device)
+{
+    QDir canonDir(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"