From 7bcd5ba14ce7fe1f7625a24b5e09e2f4149e09dc Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sat, 20 Apr 2019 14:26:30 +0200 Subject: [PATCH] Fix track seeking with mouse wheel --- src/playlist/playlistview.cpp | 11 ++++++++++- src/widgets/trackslider.cpp | 4 ++++ src/widgets/trackslider.h | 5 +++++ src/widgets/tracksliderslider.cpp | 7 +++++++ src/widgets/tracksliderslider.h | 2 ++ 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/playlist/playlistview.cpp b/src/playlist/playlistview.cpp index 4a4c8616e..828256ca1 100644 --- a/src/playlist/playlistview.cpp +++ b/src/playlist/playlistview.cpp @@ -708,7 +708,16 @@ void PlaylistView::mousePressEvent(QMouseEvent *event) { return; } - QTreeView::mousePressEvent(event); + QModelIndex idx = indexAt(event->pos()); + if (event->button() == Qt::XButton1 && idx.isValid()) { + app_->player()->Previous(); + } + else if (event->button() == Qt::XButton2 && idx.isValid()) { + app_->player()->Next(); + } + else { + QTreeView::mousePressEvent(event); + } inhibit_autoscroll_ = true; inhibit_autoscroll_timer_->start(); diff --git a/src/widgets/trackslider.cpp b/src/widgets/trackslider.cpp index 88fb4c3bc..dc5d308d8 100644 --- a/src/widgets/trackslider.cpp +++ b/src/widgets/trackslider.cpp @@ -63,6 +63,10 @@ TrackSlider::TrackSlider(QWidget* parent) connect(ui_->slider, SIGNAL(sliderMoved(int)), SIGNAL(ValueChanged(int))); connect(ui_->slider, SIGNAL(valueChanged(int)), SLOT(ValueMaybeChanged(int))); connect(ui_->remaining, SIGNAL(Clicked()), SLOT(ToggleTimeDisplay())); + connect(ui_->slider, SIGNAL(SeekForward()), SIGNAL(SeekForward())); + connect(ui_->slider, SIGNAL(SeekBackward()), SIGNAL(SeekBackward())); + connect(ui_->slider, SIGNAL(Previous()), SIGNAL(Previous())); + connect(ui_->slider, SIGNAL(Next()), SIGNAL(Next())); } diff --git a/src/widgets/trackslider.h b/src/widgets/trackslider.h index e0849750a..6f7b8ef89 100644 --- a/src/widgets/trackslider.h +++ b/src/widgets/trackslider.h @@ -71,6 +71,11 @@ class TrackSlider : public QWidget { void ValueChanged(int value); void ValueChangedSeconds(int value); + void SeekForward(); + void SeekBackward(); + void Next(); + void Previous(); + private slots: void ValueMaybeChanged(int value); void ToggleTimeDisplay(); diff --git a/src/widgets/tracksliderslider.cpp b/src/widgets/tracksliderslider.cpp index 142705549..e623f5ae0 100644 --- a/src/widgets/tracksliderslider.cpp +++ b/src/widgets/tracksliderslider.cpp @@ -70,6 +70,13 @@ void TrackSliderSlider::mousePressEvent(QMouseEvent* e) { void TrackSliderSlider::mouseReleaseEvent(QMouseEvent* e) { QSlider::mouseReleaseEvent(e); + if (e->button() == Qt::XButton1) { + emit Previous(); + } + else if (e->button() == Qt::XButton2) { + emit Next(); + } + e->accept(); } void TrackSliderSlider::mouseMoveEvent(QMouseEvent* e) { diff --git a/src/widgets/tracksliderslider.h b/src/widgets/tracksliderslider.h index 4030979d9..0e86f918d 100644 --- a/src/widgets/tracksliderslider.h +++ b/src/widgets/tracksliderslider.h @@ -45,6 +45,8 @@ class TrackSliderSlider : public QSlider { signals: void SeekForward(); void SeekBackward(); + void Previous(); + void Next(); protected: void mousePressEvent(QMouseEvent* e);