]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/panels/information/mediawidget.cpp
mediawidget: bind arrow keys to slide in media
[dolphin.git] / src / panels / information / mediawidget.cpp
index 345cb0201c73a6ac441f5a3982d3ed9e38bca0c5..3ef046909a8ed90b5abc8436daf4eaf47c3179b1 100644 (file)
@@ -18,6 +18,8 @@
 #include <QStyleOptionSlider>
 #include <QToolButton>
 #include <QVBoxLayout>
+#include <qnamespace.h>
+#include <qwidget.h>
 
 class EmbeddedVideoPlayer : public QVideoWidget
 {
@@ -108,6 +110,32 @@ protected:
             QSlider::mousePressEvent(event);
         }
     }
+
+    void keyPressEvent(QKeyEvent *event) override
+    {
+        int newPosition = -1;
+        if (event->key() == Qt::Key_Right) {
+            // slide right 1%
+            newPosition = std::min(maximum(), sliderPosition() + maximum() / 100);
+        } else if (event->key() == Qt::Key_Left) {
+            // slide left 1%
+            newPosition = std::max(0, sliderPosition() - maximum() / 100);
+        }
+
+        if (newPosition != -1) {
+            event->accept();
+
+            if (newPosition != sliderPosition()) {
+                setSliderPosition(newPosition);
+                triggerAction(SliderMove);
+                setRepeatAction(SliderNoAction);
+
+                Q_EMIT sliderMoved(newPosition);
+            }
+        } else {
+            QSlider::keyPressEvent(event);
+        }
+    }
 };
 
 MediaWidget::MediaWidget(QWidget *parent)
@@ -231,11 +259,6 @@ void MediaWidget::showEvent(QShowEvent *event)
         m_pauseButton->setAutoRaise(true);
         m_pauseButton->hide();
         connect(m_pauseButton, &QToolButton::clicked, this, &MediaWidget::togglePlayback);
-
-        // Creating an audio player or video player instance might take up to
-        // 2 seconds when doing it the first time. To prevent that the user
-        // interface gets noticeable blocked, the creation is delayed until
-        // the play button has been pressed (see PhononWidget::play()).
     }
 }