|
10 | 10 | #include "widget/wglwidget.h" |
11 | 11 |
|
12 | 12 | OpenGLWindow::OpenGLWindow(WGLWidget* pWidget) |
13 | | - : m_pWidget(pWidget) { |
| 13 | + : m_pWidget(pWidget), |
| 14 | + m_pTrackDropTarget(nullptr) { |
14 | 15 | setFormat(WaveformWidgetFactory::getSurfaceFormat()); |
15 | 16 | // Prevent this window/widget from getting keyboard focus on click. |
16 | 17 | setFlag(Qt::WindowDoesNotAcceptFocus); |
@@ -69,18 +70,43 @@ bool OpenGLWindow::event(QEvent* pEv) { |
69 | 70 | ToolTipQOpenGL::singleton().start( |
70 | 71 | m_pWidget, dynamic_cast<QMouseEvent*>(pEv)->globalPos()); |
71 | 72 | } |
| 73 | + |
72 | 74 | if (t == QEvent::Leave) { |
73 | 75 | ToolTipQOpenGL::singleton().stop(); |
74 | 76 | } |
75 | 77 |
|
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; |
82 | 99 | } |
| 100 | + pEv->ignore(); |
| 101 | + return false; // clazy:exclude=base-class-event |
| 102 | + } |
83 | 103 |
|
| 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 | + } |
84 | 110 | pEv->ignore(); |
85 | 111 | return false; // clazy:exclude=base-class-event |
86 | 112 | } |
|
0 commit comments