Skip to content

Commit 7ab8d1d

Browse files
authored
Merge pull request #13275 from daschuer/mouse_scratch
Mouse scratch fix
2 parents 7069f69 + 74e36e4 commit 7ab8d1d

9 files changed

Lines changed: 65 additions & 38 deletions

File tree

src/util/dnd.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -256,38 +256,38 @@ QDrag* DragAndDropHelper::dragTrackLocations(
256256

257257
//static
258258
void DragAndDropHelper::handleTrackDragEnterEvent(
259-
QDragEnterEvent* event,
259+
QDragEnterEvent* pEvent,
260260
const QString& group,
261261
UserSettingsPointer pConfig) {
262262
if (allowLoadToPlayer(group, pConfig) &&
263-
dragEnterAccept(*event->mimeData(), group, true, false)) {
264-
event->acceptProposedAction();
263+
dragEnterAccept(*pEvent->mimeData(), group, true, false)) {
264+
pEvent->acceptProposedAction();
265265
} else {
266266
qDebug() << "Ignoring drag enter event, loading not allowed";
267-
event->ignore();
267+
pEvent->ignore();
268268
}
269269
}
270270

271271
//static
272272
void DragAndDropHelper::handleTrackDropEvent(
273-
QDropEvent* event,
273+
QDropEvent* pEvent,
274274
TrackDropTarget& target,
275275
const QString& group,
276276
UserSettingsPointer pConfig) {
277277
if (allowLoadToPlayer(group, pConfig)) {
278-
if (allowDeckCloneAttempt(*event, group)) {
279-
event->accept();
280-
target.emitCloneDeck(event->mimeData()->text(), group);
278+
if (allowDeckCloneAttempt(*pEvent, group)) {
279+
pEvent->accept();
280+
target.emitCloneDeck(pEvent->mimeData()->text(), group);
281281
return;
282282
} else {
283283
const QList<mixxx::FileInfo> files = dropEventFiles(
284-
*event->mimeData(), group, true, false);
284+
*pEvent->mimeData(), group, true, false);
285285
if (!files.isEmpty()) {
286-
event->accept();
286+
pEvent->accept();
287287
target.emitTrackDropped(files.at(0).location(), group);
288288
return;
289289
}
290290
}
291291
}
292-
event->ignore();
292+
pEvent->ignore();
293293
}

src/util/dnd.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ class DragAndDropHelper final {
4242
const QString& sourceIdentifier);
4343

4444
static void handleTrackDragEnterEvent(
45-
QDragEnterEvent* event,
45+
QDragEnterEvent* pEvent,
4646
const QString& group,
4747
UserSettingsPointer pConfig);
4848

4949
static void handleTrackDropEvent(
50-
QDropEvent* event,
50+
QDropEvent* pEvent,
5151
TrackDropTarget& target,
5252
const QString& group,
5353
UserSettingsPointer pConfig);

src/widget/openglwindow.cpp

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
#include "widget/wglwidget.h"
1111

1212
OpenGLWindow::OpenGLWindow(WGLWidget* pWidget)
13-
: m_pWidget(pWidget) {
13+
: m_pWidget(pWidget),
14+
m_pTrackDropTarget(nullptr) {
1415
setFormat(WaveformWidgetFactory::getSurfaceFormat());
1516
// Prevent this window/widget from getting keyboard focus on click.
1617
setFlag(Qt::WindowDoesNotAcceptFocus);
@@ -69,18 +70,43 @@ bool OpenGLWindow::event(QEvent* pEv) {
6970
ToolTipQOpenGL::singleton().start(
7071
m_pWidget, dynamic_cast<QMouseEvent*>(pEv)->globalPos());
7172
}
73+
7274
if (t == QEvent::Leave) {
7375
ToolTipQOpenGL::singleton().stop();
7476
}
7577

76-
if (t == QEvent::DragEnter || t == QEvent::DragMove ||
77-
t == QEvent::DragLeave || t == QEvent::Drop) {
78-
// Drag & Drop events are not delivered correctly when using QApplication::sendEvent
79-
// and even result in a recursive call to this method, so we use our own mechanism.
80-
if (m_pWidget->trackDropTarget()) {
81-
return m_pWidget->trackDropTarget()->handleDragAndDropEventFromWindow(pEv);
78+
// Drag & Drop events are not delivered correctly when using QApplication::sendEvent
79+
// and even result in a recursive call to this method, so we use our own mechanism.
80+
81+
if (t == QEvent::DragEnter) {
82+
DEBUG_ASSERT(!m_pTrackDropTarget);
83+
TrackDropTarget* pTrackDropTarget = m_pWidget->trackDropTarget();
84+
if (pTrackDropTarget) {
85+
bool ret = pTrackDropTarget->handleDragAndDropEventFromWindow(pEv);
86+
if (pEv->isAccepted()) {
87+
m_pTrackDropTarget = pTrackDropTarget;
88+
}
89+
return ret;
90+
}
91+
pEv->ignore();
92+
return false; // clazy:exclude=base-class-event
93+
}
94+
95+
if (t == QEvent::DragMove) {
96+
if (m_pTrackDropTarget) {
97+
bool ret = m_pTrackDropTarget->handleDragAndDropEventFromWindow(pEv);
98+
return ret;
8299
}
100+
pEv->ignore();
101+
return false; // clazy:exclude=base-class-event
102+
}
83103

104+
if (t == QEvent::DragLeave || t == QEvent::Drop) {
105+
if (m_pTrackDropTarget) {
106+
bool ret = m_pTrackDropTarget->handleDragAndDropEventFromWindow(pEv);
107+
m_pTrackDropTarget = nullptr;
108+
return ret;
109+
}
84110
pEv->ignore();
85111
return false; // clazy:exclude=base-class-event
86112
}

src/widget/openglwindow.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <QOpenGLWindow>
44

55
class WGLWidget;
6+
class TrackDropTarget;
67

78
/// Helper class used by wglwidgetqopengl
89

@@ -22,4 +23,5 @@ class OpenGLWindow : public QOpenGLWindow {
2223
bool event(QEvent* pEv) override;
2324

2425
WGLWidget* m_pWidget;
26+
TrackDropTarget* m_pTrackDropTarget;
2527
};

src/widget/trackdroptarget.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
#pragma once
22

3+
#include <QEvent>
34
#include <QString>
45

5-
class QEvent;
6-
76
/// Mixin to mark a widget as a drop target for tracks.
87
///
98
/// This class is *not* derived from QObject (inheriting from 2 QObject classes
@@ -22,8 +21,8 @@ class TrackDropTarget {
2221
emit trackDropped(filename, group); // clazy:exclude=incorrect-emit
2322
}
2423

25-
virtual bool handleDragAndDropEventFromWindow(QEvent* event) {
26-
Q_UNUSED(event);
24+
virtual bool handleDragAndDropEventFromWindow(QEvent* pEvent) {
25+
pEvent->ignore();
2726
return false;
2827
}
2928

src/widget/wspinnybase.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -647,14 +647,14 @@ bool WSpinnyBase::event(QEvent* pEvent) {
647647
return WGLWidget::event(pEvent);
648648
}
649649

650-
bool WSpinnyBase::handleDragAndDropEventFromWindow(QEvent* ev) {
651-
return event(ev);
650+
bool WSpinnyBase::handleDragAndDropEventFromWindow(QEvent* pEvent) {
651+
return event(pEvent);
652652
}
653653

654-
void WSpinnyBase::dragEnterEvent(QDragEnterEvent* event) {
655-
DragAndDropHelper::handleTrackDragEnterEvent(event, m_group, m_pConfig);
654+
void WSpinnyBase::dragEnterEvent(QDragEnterEvent* pEvent) {
655+
DragAndDropHelper::handleTrackDragEnterEvent(pEvent, m_group, m_pConfig);
656656
}
657657

658-
void WSpinnyBase::dropEvent(QDropEvent* event) {
659-
DragAndDropHelper::handleTrackDropEvent(event, *this, m_group, m_pConfig);
658+
void WSpinnyBase::dropEvent(QDropEvent* pEvent) {
659+
DragAndDropHelper::handleTrackDropEvent(pEvent, *this, m_group, m_pConfig);
660660
}

src/widget/wspinnybase.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class WSpinnyBase : public WGLWidget,
7878
bool event(QEvent* pEvent) override;
7979

8080
// TrackDropTarget:
81-
bool handleDragAndDropEventFromWindow(QEvent* ev) override;
81+
bool handleDragAndDropEventFromWindow(QEvent* pEvent) override;
8282

8383
double calculateAngle(double playpos);
8484
int calculateFullRotations(double playpos);

src/widget/wwaveformviewer.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -202,16 +202,16 @@ void WWaveformViewer::wheelEvent(QWheelEvent* event) {
202202
}
203203
}
204204

205-
void WWaveformViewer::dragEnterEvent(QDragEnterEvent* event) {
206-
DragAndDropHelper::handleTrackDragEnterEvent(event, m_group, m_pConfig);
205+
void WWaveformViewer::dragEnterEvent(QDragEnterEvent* pEvent) {
206+
DragAndDropHelper::handleTrackDragEnterEvent(pEvent, m_group, m_pConfig);
207207
}
208208

209-
void WWaveformViewer::dropEvent(QDropEvent* event) {
210-
DragAndDropHelper::handleTrackDropEvent(event, *this, m_group, m_pConfig);
209+
void WWaveformViewer::dropEvent(QDropEvent* pEvent) {
210+
DragAndDropHelper::handleTrackDropEvent(pEvent, *this, m_group, m_pConfig);
211211
}
212212

213-
bool WWaveformViewer::handleDragAndDropEventFromWindow(QEvent* ev) {
214-
return event(ev);
213+
bool WWaveformViewer::handleDragAndDropEventFromWindow(QEvent* pEvent) {
214+
return event(pEvent);
215215
}
216216

217217
void WWaveformViewer::leaveEvent(QEvent*) {

src/widget/wwaveformviewer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class WWaveformViewer : public WWidget, public TrackDropTarget {
2626
}
2727
void setup(const QDomNode& node, const SkinContext& context);
2828

29-
bool handleDragAndDropEventFromWindow(QEvent* ev) override;
29+
bool handleDragAndDropEventFromWindow(QEvent* pEvent) override;
3030

3131
void dragEnterEvent(QDragEnterEvent *event) override;
3232
void dropEvent(QDropEvent *event) override;

0 commit comments

Comments
 (0)