From: Ed Rogalsky Date: Sun, 23 Feb 2014 20:09:29 +0000 (+0100) Subject: jogshuttle: add support for shuttles on newer systems - part1 X-Git-Url: https://git.sesse.net/?p=kdenlive;a=commitdiff_plain;h=937f547e26859d0ef9ddc0ac38d6986ab591b3fd jogshuttle: add support for shuttles on newer systems - part1 --- diff --git a/src/jogshuttle.cpp b/src/jogshuttle.cpp index b6095afd..44517d77 100644 --- a/src/jogshuttle.cpp +++ b/src/jogshuttle.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include @@ -343,6 +344,12 @@ void JogShuttle::customEvent(QEvent* e) emit button(e->type() - KEY_EVENT_OFFSET); } +QString JogShuttle::enumerateDevice(const QString &device) +{ + QDir canonDir(device); + //return QDir::canonicalPath(device); + return canonDir.canonicalPath(); +} // #include "jogshuttle.moc" diff --git a/src/jogshuttle.h b/src/jogshuttle.h index d0bb7867..1a337868 100644 --- a/src/jogshuttle.h +++ b/src/jogshuttle.h @@ -54,11 +54,13 @@ private: class JogShuttle: public QObject { -Q_OBJECT public: + Q_OBJECT +public: explicit JogShuttle(const QString &device, QObject * parent = 0); ~JogShuttle(); void stopDevice(); void initDevice(const QString &device); + static QString enumerateDevice(const QString &device); protected: virtual void customEvent(QEvent * e); diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index f8eb77f2..42e58133 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -44,10 +44,11 @@ #include #include #include + #ifdef USE_JOGSHUTTLE -#include "jogaction.h" -#include "jogshuttleconfig.h" -#include + #include "jogaction.h" + #include "jogshuttleconfig.h" + #include #endif @@ -523,21 +524,42 @@ void KdenliveSettingsDialog::slotCheckShuttle(int state) #ifdef USE_JOGSHUTTLE m_configShuttle.config_group->setEnabled(state); if (m_configShuttle.shuttledevicelist->count() == 0) { - // 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); + 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); } - ::close(fd); } - if (KdenliveSettings::shuttledevice().isEmpty()) QTimer::singleShot(1500, this, SLOT(slotUpdateShuttleDevice())); + + if (KdenliveSettings::shuttledevice().isEmpty()) { + QTimer::singleShot(1500, this, SLOT(slotUpdateShuttleDevice())); + } } #endif /* USE_JOGSHUTTLE */ } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 455adaa1..cee87ec7 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -882,7 +882,7 @@ void MainWindow::activateShuttleDevice() m_jogProcess = NULL; if (KdenliveSettings::enableshuttle() == false) return; - m_jogProcess = new JogShuttle(KdenliveSettings::shuttledevice()); + m_jogProcess = new JogShuttle(JogShuttle::enumerateDevice(KdenliveSettings::shuttledevice())); m_jogShuttle = new JogShuttleAction(m_jogProcess, JogShuttleConfig::actionMap(KdenliveSettings::shuttlebuttons())); connect(m_jogShuttle, SIGNAL(rewindOneFrame()), m_monitorManager, SLOT(slotRewindOneFrame()));